@willbooster/agent-skills 1.24.0 → 1.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +3 -3
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{Command as n,Option as e}from"commander";import{stdin as t,stderr as r}from"node:process";import{spawn as a,spawnSync as i}from"node:child_process";import{createWriteStream as o}from"node:fs";import{mkdir as u,readFile as c,stat as s,readdir as l,rm as f,cp as p,mkdtemp as d,writeFile as h}from"node:fs/promises";import{dirname as m,join as v,relative as w,sep as y}from"node:path";import{minimatch as g,braceExpand as b}from"minimatch";import{setTimeout as k}from"node:timers/promises";import{stripVTControlCharacters as x}from"node:util";import{stringify as S}from"yaml";import j from"node:assert";import{tmpdir as I}from"node:os";import{fileURLToPath as O}from"node:url";function A(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 $(n){var e,t,r,a=2;for("undefined"!=typeof Symbol&&(t=Symbol.asyncIterator,r=Symbol.iterator);a--;){if(t&&null!=(e=n[t]))return e.call(n);if(r&&null!=(e=n[r]))return new
|
|
2
|
+
import{Command as n,Option as e}from"commander";import{stdin as t,stderr as r}from"node:process";import{spawn as a,spawnSync as i}from"node:child_process";import{createWriteStream as o}from"node:fs";import{mkdir as u,readFile as c,stat as s,readdir as l,rm as f,cp as p,mkdtemp as d,writeFile as h}from"node:fs/promises";import{dirname as m,join as v,relative as w,sep as y}from"node:path";import{minimatch as g,braceExpand as b}from"minimatch";import{setTimeout as k}from"node:timers/promises";import{stripVTControlCharacters as x}from"node:util";import{stringify as S}from"yaml";import j from"node:assert";import{tmpdir as I}from"node:os";import{fileURLToPath as O}from"node:url";function A(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 $(n){var e,t,r,a=2;for("undefined"!=typeof Symbol&&(t=Symbol.asyncIterator,r=Symbol.iterator);a--;){if(t&&null!=(e=n[t]))return e.call(n);if(r&&null!=(e=n[r]))return new C(e.call(n));t="@@asyncIterator",r="@@iterator"}throw new TypeError("Object is not async iterable")}function C(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 C=function(n){this.s=n,this.n=n.next},C.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 C(n)}function R(n,e,t,r,a,i,o){try{var u=n[i](o),c=u.value}catch(n){return void t(n)}u.done?e(c):Promise.resolve(c).then(r,a)}function P(n){return function(){var e=this,t=arguments;return new Promise(function(r,a){var i=n.apply(e,t);function o(n){R(i,r,a,o,u,"next",n)}function u(n){R(i,r,a,o,u,"throw",n)}o(void 0)})}}function q(n,e){var t="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!t){if(Array.isArray(n)||(t=U(n))||e&&n&&"number"==typeof n.length){t&&(n=t);var r=0,a=function(){};return{s:a,n:function(){return r>=n.length?{done:!0}:{done:!1,value:n[r++]}},e:function(n){throw n},f:a}}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 i,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,i=n},f:function(){try{o||null==t.return||t.return()}finally{if(u)throw i}}}}function E(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 L(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 N(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?L(Object(t),!0).forEach(function(e){E(n,e,t[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):L(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))})}return n}function T(){
|
|
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",a=t.toStringTag||"@@toStringTag";function i(t,r,a,i){var c=r&&r.prototype instanceof u?r:u,s=Object.create(c.prototype);return D(s,"_invoke",function(t,r,a){var i,u,c,s=0,l=a||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return i=e,u=0,c=n,p.n=t,o}};function d(t,r){for(u=t,c=r,e=0;!f&&s&&!a&&e<l.length;e++){var a,i=l[e],d=p.p,h=i[2];t>3?(a=h===r)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=n):i[0]<=d&&((a=t<2&&d<i[1])?(u=0,p.v=r,p.n=i[1]):d<h&&(a=t<3||i[0]>r||r>h)&&(i[4]=t,i[5]=r,p.n=h,u=0))}if(a||t>1)return o;throw f=!0,r}return function(a,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;){i||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,i){if(u||(a="next"),e=i[a]){if(!(e=e.call(i,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=i.return)&&e.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+a+"' method"),u=1);i=n}else if((e=(f=p.n<0)?c:t.call(r,p))!==o)break}catch(e){i=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(t,a,i),!0),s}var o={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][r]?e(e([][r]())):(D(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,D(n,a,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,D(f,"constructor",s),D(s,"constructor",c),c.displayName="GeneratorFunction",D(s,a,"GeneratorFunction"),D(f),D(f,a,"Generator"),D(f,r,function(){return this}),D(f,"toString",function(){return"[object Generator]"}),(T=function(){return{w:i,m:p}})()}function D(n,e,t,r){var a=Object.defineProperty;try{a({},"",{})}catch(n){a=0}D=function(n,e,t,r){function i(e,t){D(n,e,function(n){return this._invoke(e,t,n)})}e?a?a(n,e,{value:t,enumerable:!r,configurable:!r,writable:!r}):n[e]=t:(i("next",0),i("throw",1),i("return",2))},D(n,e,t,r)}function _(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 G(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,a,i,o,u=[],c=!0,s=!1;try{if(i=(t=t.call(n)).next,0===e){if(Object(t)!==t)return;c=!1}else for(;!(c=(r=i.call(t)).done)&&(u.push(r.value),u.length!==e);c=!0);}catch(n){s=!0,a=n}finally{try{if(!c&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(s)throw a}}return u}}(n,e)||U(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 M(n){return function(n){if(Array.isArray(n))return A(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||U(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 F(n){"@babel/helpers - typeof";return F="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},F(n)}function U(n,e){if(n){if("string"==typeof n)return A(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)?A(n,e):void 0}}var H=["SIGINT","SIGTERM","SIGHUP"],W=new Set,B=!1;function J(n,e){return Y.apply(this,arguments)}function Y(){return Y=P(T().m(function n(e,t){var r,i,o,u,c,s,l,f,p,d,h;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={}),i=a(null!=(r=e[0])?r:"",e.slice(1),{detached:!0,stdio:["ignore","pipe","pipe"]}),o=Q(i,t.timeoutMs),u=X(t.waitMessage,t.waitIntervalSeconds),n.n=1,nn(t.logFilePath);case 1:return c=n.v,n.p=2,n.n=3,Promise.all([Z(i.stdout,function(n){return c.write(n)}),Z(i.stderr,function(n){return c.write(n)}),new Promise(function(n,e){i.once("error",e),i.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(s=n.v,l=G(s,3),f=l[0],p=l[1],d=l[2],!o.timedOut()){n.n=4;break}throw new Error(K("".concat(f).concat(p),o.timeoutMs,e));case 4:if(0!==d){n.n=5;break}return n.a(2,f);case 5:throw h="".concat(f).concat(p),new Error(h||"Command failed: ".concat(e.join(" ")));case 6:return n.p=6,n.n=7,c.close();case 7:return o.clear(),u(),n.f(6);case 8:return n.a(2)}},n,null,[[2,,6,8]])})),Y.apply(this,arguments)}function K(n,e,t){var r="Command timed out after ".concat(function(n){if(n%36e5==0)return"".concat(n/36e5,"h");if(n%6e4==0)return"".concat(n/6e4,"m");if(n%1e3==0)return"".concat(n/1e3,"s");return"".concat(n,"ms")}(e),": ").concat(t.join(" "));return n.length>0?"".concat(n,"\n").concat(r):r}function Q(n,e){void 0===e&&(e=36e5);var t,r=!1;W.add(n),function(){if(B)return;B=!0;var n,e=q(H);try{var t=function(){var e=n.value;process.once(e,function(){var n,t=q(W);try{for(t.s();!(n=t.n()).done;){z(n.value,e)}}catch(n){t.e(n)}finally{t.f()}process.exit(128+function(n){switch(n){case"SIGINT":return 2;case"SIGTERM":return 15;case"SIGHUP":return 1}}(e))})};for(e.s();!(n=e.n()).done;)t()}catch(n){e.e(n)}finally{e.f()}}();var a=setTimeout(function(){r=!0,z(n,"SIGTERM"),(t=setTimeout(function(){return z(n,"SIGKILL")},5e3)).unref()},e);return a.unref(),{clear:function(){clearTimeout(a),t&&clearTimeout(t),W.delete(n)},timedOut:function(){return r},timeoutMs:e}}function z(n,e){if(n.pid&&n.pid>0)try{return void process.kill(-n.pid,e)}catch(n){}n.kill(e)}function Z(n,e){return V.apply(this,arguments)}function V(){return(V=P(T().m(function n(e,t){var r,a,i,o,u,c,s,l,f,p,d;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],a=new TextDecoder,i=!1,o=!1,n.p=2,c=$(e);case 3:return n.n=4,c.next();case 4:if(!(i=!(s=n.v).done)){n.n=6;break}l=s.value,f="string"==typeof l?l:a.decode(new Uint8Array(l),{stream:!0}),r.push(f),null==t||t(f);case 5:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,d=n.v,o=!0,u=d;case 8:if(n.p=8,n.p=9,!i||null==c.return){n.n=10;break}return n.n=10,c.return();case 10:if(n.p=10,!o){n.n=11;break}throw u;case 11:return n.f(10);case 12:return n.f(8);case 13:return(p=a.decode())&&(r.push(p),null==t||t(p)),n.a(2,r.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function X(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,a=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(a),t("\n")}}function nn(n){return en.apply(this,arguments)}function en(){return en=P(T().m(function n(e){var t,r,a;return T().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=P(T().m(function n(){return T().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,u(m(e),{recursive:!0});case 3:return(r=o(e,{flags:"w"})).on("error",t),n.a(2,{write:function(n){r.writable&&r.write(n)},close:function(){var n=P(T().m(function n(){return T().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,a=n.v,t(a),n.a(2,{write:function(){},close:function(){var n=P(T().m(function n(){return T().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),en.apply(this,arguments)}var tn="There is no concern.",rn=["codex","claude","gemini"],an=new RegExp("\\b".concat("there is no concern","\\b"),"i"),on={allAgentsLabel:"agents"};function un(n,e){return cn.apply(this,arguments)}function cn(){return(cn=P(T().m(function n(e,t){var r,a,i,o;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=on),n.n=1,e;case 1:return r=n.v,a=X(wn(t.allAgentsLabel)),n.p=2,n.n=3,Promise.all(rn.map(P(T().m(function n(e){var a,i,o,u,c;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,sn(e,r,{waitMessage:!1});case 1:if(o=n.v,u=o.trim(),c=null==(a=(i=t).mapOutput)?void 0:a.call(i,e,u),!t.mapOutput||void 0!==c){n.n=2;break}return n.a(2);case 2:return n.a(2,mn(e,null!=c?c:hn(e,u)));case 3:return n.p=3,n.v,n.a(2,mn(e,vn(e)))}},n,null,[[0,3]])}))));case 3:return i=n.v,o=i.filter(function(n){return void 0!==n}),n.a(2,o.join("\n\n"));case 4:return n.p=4,a(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function sn(n,e,t){return ln.apply(this,arguments)}function ln(){return(ln=P(T().m(function n(e,t,r){var a,i,o,u;return T().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r={}),i=J,o=fn,u=e,n.n=1,t;case 1:return n.a(2,i(o(u,n.v),{logFilePath:yn(e),waitMessage:null!=(a=r.waitMessage)?a:wn(pn(e))}))}},n)}))).apply(this,arguments)}function fn(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 pn(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function dn(n){return an.test(n)}function hn(n,e){return 0===e.length?vn(n):dn(e)?tn:e}function mn(n,e){return"## ".concat(pn(n),"\n\n").concat(e)}function vn(n){return"".concat(pn(n)," did not return a review result.")}function wn(n){return"Waiting for ".concat(n," to finish.")}function yn(n){return"logs/".concat(n,"-").concat((e=new Date,t=G([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(gn),5),r=t[0],a=t[1],i=t[2],o=t[3],u=t[4],"".concat(r).concat(a,"-").concat(i).concat(o).concat(u)),".log");var e,t,r,a,i,o,u}function gn(n){return n.toString().padStart(2,"0")}var bn=["dependencies","devDependencies","peerDependencies","optionalDependencies"],kn=new Set([".git","node_modules"]),xn=["bun","update","--latest"];function Sn(n){return jn.apply(this,arguments)}function jn(){return(jn=P(T().m(function n(e){var t,r,a,i,o;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===e&&(e=process.cwd()),n.n=1,In(e);case 1:return t=n.v,n.n=2,Yn(e,t);case 2:return n.n=3,Vn(e,"root");case 3:r=q(t),n.p=4,r.s();case 5:if((a=r.n()).done){n.n=7;break}return i=a.value,n.n=6,Vn(v(e,i),i);case 6:n.n=5;break;case 7:n.n=9;break;case 8:n.p=8,o=n.v,r.e(o);case 9:return n.p=9,r.f(),n.f(9);case 10:return n.a(2)}},n,null,[[4,8,9,10]])}))).apply(this,arguments)}function In(n){return On.apply(this,arguments)}function On(){return(On=P(T().m(function n(e){var t,r,a,i,o,u,c,s,l,f,p,d,h,m;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return h=An,n.n=1,Qn(e);case 1:return t=h(n.v),n.n=2,$n(e,t);case 2:r=n.v,a=new Set,i=new Set,o=q(t),n.p=3,o.s();case 4:if((u=o.n()).done){n.n=7;break}return c=u.value,s=c.startsWith("!"),n.n=5,Fn(e,r,s?c.slice(1):c);case 5:l=n.v,f=q(l);try{for(f.s();!(p=f.n()).done;)d=p.value,s?i.add(d):a.add(d)}catch(n){f.e(n)}finally{f.f()}case 6:n.n=4;break;case 7:n.n=9;break;case 8:n.p=8,m=n.v,o.e(m);case 9:return n.p=9,o.f(),n.f(9);case 10:return n.a(2,M(a).filter(function(n){return"."!==n&&!i.has(n)}).toSorted(function(n,e){return n.localeCompare(e)}))}},n,null,[[3,8,9,10]])}))).apply(this,arguments)}function An(n){var e,t=n.workspaces,r=void 0===t?[]:t;return Array.isArray(r)?r:null!=(e=r.packages)?e:[]}function $n(n,e){return Rn.apply(this,arguments)}function Rn(){return(Rn=P(T().m(function n(e,t){var r,a,i,o,u,c,s,l,f,p,d,h;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:r=new Set,a=Cn(t),i=q(a),n.p=1,i.s();case 2:if((o=i.n()).done){n.n=7;break}return u=o.value,c=u.maxDepth,s=u.root,n.n=3,Tn(e,s);case 3:if(n.v){n.n=4;break}return n.a(3,6);case 4:return d=q,n.n=5,_n(e,s,c);case 5:l=d(n.v);try{for(l.s();!(f=l.n()).done;)p=f.value,r.add(p)}catch(n){l.e(n)}finally{l.f()}case 6:n.n=2;break;case 7:n.n=9;break;case 8:n.p=8,h=n.v,i.e(h);case 9:return n.p=9,i.f(),n.f(9);case 10:return n.a(2,M(r))}},n,null,[[1,8,9,10]])}))).apply(this,arguments)}function Cn(n){var e,t=new Map,r=q(n);try{for(r.s();!(e=r.n()).done;){var a=e.value;if(!a.startsWith("!"))for(var i=0,o=Pn(a);i<o.length;i++){var u=o[i];t.set(u.root,t.has(u.root)?qn(t.get(u.root),u.maxDepth):u.maxDepth)}}}catch(n){r.e(n)}finally{r.f()}return M(t.entries()).map(function(n){var e=G(n,2),t=e[0];return{maxDepth:e[1],root:t}}).filter(function(n){return!function(n,e){return M(e.entries()).some(function(e){var t,r,a=G(e,2),i=a[0],o=a[1];return i!==n.root&&("."===i||n.root.startsWith("".concat(i,"/")))&&(t=o,r=n.maxDepth,void 0===t||void 0!==r&&t>=r)})}(n,t)}).toSorted(function(n,e){return n.root.localeCompare(e.root)})}function Pn(n){return b(Hn(n)).map(function(n){return{maxDepth:Nn(n),root:En(n)}})}function qn(n,e){return void 0===n||void 0===e?void 0:Math.max(n,e)}function En(n){var e,t=[],r=q(n.split("/"));try{for(r.s();!(e=r.n()).done;){var a=e.value;if(""===a||Ln(a))break;t.push(a)}}catch(n){r.e(n)}finally{r.f()}return 0===t.length?".":t.join("/")}function Ln(n){return/[*?[\]{}()!+]/.test(n)}function Nn(n){if(!n.split("/").includes("**"))return Mn(n)}function Tn(n,e){return Dn.apply(this,arguments)}function Dn(){return(Dn=P(T().m(function n(e,t){var r;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,s(v(e,t));case 1:return r=n.v,n.a(2,r.isDirectory());case 2:return n.p=2,n.v,n.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function _n(n,e,t){return Gn.apply(this,arguments)}function Gn(){return(Gn=P(T().m(function n(e,t,r){var a,i,o,u,c,s,f,p,d,h;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:if(void 0===t&&(t="."),a=[t],!(void 0!==r&&Mn(t)>=r)){n.n=1;break}return n.a(2,a);case 1:return n.n=2,l(v(e,t),{withFileTypes:!0});case 2:i=n.v,o=q(i),n.p=3,o.s();case 4:if((u=o.n()).done){n.n=9;break}if((c=u.value).isDirectory()&&!kn.has(c.name)){n.n=5;break}return n.a(3,8);case 5:if(s=v(t,c.name).split(y).join("/"),!(void 0!==r&&Mn(s)>r)){n.n=6;break}return n.a(3,8);case 6:return f=a.push,p=a,d=M,n.n=7,_n(e,s,r);case 7:f.apply.call(f,p,d(n.v));case 8:n.n=4;break;case 9:n.n=11;break;case 10:n.p=10,h=n.v,o.e(h);case 11:return n.p=11,o.f(),n.f(11);case 12:return n.a(2,a)}},n,null,[[3,10,11,12]])}))).apply(this,arguments)}function Mn(n){return"."===n?0:n.split("/").length}function Fn(n,e,t){return Un.apply(this,arguments)}function Un(){return(Un=P(T().m(function n(e,t,r){var a,i,o,u,c,s,l;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:a=Wn(Hn(r)),i=[],o=q(t),n.p=1,o.s();case 2:if((u=o.n()).done){n.n=6;break}if(c=u.value,!(s=a(c))){n.n=4;break}return n.n=3,Bn(e,c);case 3:s=n.v;case 4:if(!s){n.n=5;break}i.push(c);case 5:n.n=2;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,o.e(l);case 8:return n.p=8,o.f(),n.f(8);case 9:return n.a(2,i)}},n,null,[[1,7,8,9]])}))).apply(this,arguments)}function Hn(n){var e=function(n){var e=n.split(y).join("/");return""===e?".":e}(n).replace(/\/$/,"");return"."===e?e:e.startsWith("./")?e.slice(2):e}function Wn(n){return function(e){return g(e,n,{dot:!0})}}function Bn(n,e){return Jn.apply(this,arguments)}function Jn(){return(Jn=P(T().m(function n(e,t){var r;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,s(v(e,t,"package.json"));case 1:return r=n.v,n.a(2,r.isFile());case 2:return n.p=2,n.v,n.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function Yn(n,e){return Kn.apply(this,arguments)}function Kn(){return(Kn=P(T().m(function n(e,t){var r,a,i,o,u,c,s,l;return T().w(function(n){for(;;)switch(n.n){case 0:r=[],a=0,i=["."].concat(M(t));case 1:if(!(a<i.length)){n.n=4;break}return o=i[a],n.n=2,Qn("."===o?e:v(e,o));case 2:u=n.v,c=q(Zn(u));try{for(c.s();!(s=c.n()).done;)l=s.value,r.push("".concat("."===o?"root":o,": ").concat(l))}catch(n){c.e(n)}finally{c.f()}case 3:a++,n.n=1;break;case 4:if(0!==r.length){n.n=5;break}return n.a(2);case 5:throw new Error(["Cannot safely update Bun workspace dependencies with catalog references.","Update catalog versions in the root package.json, then run bun install.","Catalog-managed dependencies: ".concat(r.join(", "))].join("\n"));case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Qn(n){return zn.apply(this,arguments)}function zn(){return(zn=P(T().m(function n(e){var t,r,a;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return t=v(e,"package.json"),n.p=1,r=JSON,n.n=2,c(t,"utf8");case 2:return n.a(2,r.parse.call(r,n.v));case 3:throw n.p=3,a=n.v,new Error("Failed to read ".concat(t,": ").concat(String(a)));case 4:return n.a(2)}},n,null,[[1,3]])}))).apply(this,arguments)}function Zn(n){var e,t=[],r=q(bn);try{for(r.s();!(e=r.n()).done;){var a=n[e.value];if(a)for(var i=0,o=Object.entries(a);i<o.length;i++){var u=G(o[i],2),c=u[0];u[1].startsWith("catalog:")&&t.push(c)}}}catch(n){r.e(n)}finally{r.f()}return t}function Vn(n,e){return Xn.apply(this,arguments)}function Xn(){return(Xn=P(T().m(function n(e,t){return T().w(function(n){for(;;)switch(n.n){case 0:return process.stdout.write("\n# ".concat(t,"\n")),n.n=1,ne(xn,e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function ne(n,e){return ee.apply(this,arguments)}function ee(){return(ee=P(T().m(function n(e,t){var r;return T().w(function(n){for(;;)switch(n.n){case 0:return r=a(e[0],e.slice(1),{cwd:t,stdio:"inherit"}),n.n=1,new Promise(function(n,a){r.once("error",a),r.once("close",function(r){0!==r?a(new Error("Command failed in ".concat(w(process.cwd(),t)||".",": ").concat(e.join(" ")))):n()})});case 1:return n.a(2)}},n)}))).apply(this,arguments)}var te={blockQuote:"literal",lineWidth:0};function re(n){r.write("".concat(n,"\n"))}function ae(n,e){void 0===e&&(e=1),r.write("".concat(n,"\n")),process.exit(e)}function ie(){return oe.apply(this,arguments)}function oe(){return(oe=P(T().m(function n(){return T().w(function(n){for(;;)switch(n.n){case 0:if(!t.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,Z(t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function ue(n){return ce.apply(this,arguments)}function ce(){return(ce=P(T().m(function n(e){var t;return T().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,ie();case 1:if(!((t=n.v).length>0)){n.n=2;break}return n.a(2,t);case 2:ae(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function se(n,e){return le.apply(this,arguments)}function le(){return le=P(T().m(function n(e,t){var r,i,o,u,c;return T().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),i=null!=(r=t.allowedExitCodes)?r:[],o=T().m(function n(){var r,o,u,s,l,f,p,d,h,m,v;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return o=a(null!=(r=e[0])?r:"",e.slice(1),{detached:!0,stdio:["pipe","pipe","pipe"]}),s=!1,l=Q(o),n.p=1,void 0!==t.stdinData?o.stdin.end(t.stdinData):o.stdin.end(),n.n=2,Promise.all([Z(o.stdout),Z(o.stderr),new Promise(function(n,e){o.once("error",e),o.once("close",function(e){return n(null!=e?e:1)})})]);case 2:if(f=n.v,p=G(f,3),d=p[0],h=p[1],m=p[2],v="".concat(d).concat(h),!l.timedOut()){n.n=3;break}u=K(v,l.timeoutMs,e),n.n=5;break;case 3:if(0!==m&&!i.includes(m)){n.n=4;break}return n.a(2,{v:v});case 4:je(e,m,v)&&c<3?s=!0:u=v||"Command failed: ".concat(e.join(" "));case 5:return n.p=5,l.clear(),n.f(5);case 6:if(!s){n.n=8;break}return re("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=7,k(1e3*c);case 7:return n.a(2,0);case 8:u&&ae(u);case 9:return n.a(2)}},n,null,[[1,,5,6]])}),c=1;case 1:if(!(c<=3)){n.n=5;break}return n.d(_(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:ae("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),le.apply(this,arguments)}function fe(n,e){return pe.apply(this,arguments)}function pe(){return(pe=P(T().m(function n(e,t){return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,se(["gh"].concat(M(e)),{stdinData:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function de(n,e,t){return he.apply(this,arguments)}function he(){return(he=P(T().m(function n(e,t,r){return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,se(["gh"].concat(M(e)),{stdinData:r,allowedExitCodes:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function me(){return ve.apply(this,arguments)}function ve(){return(ve=P(T().m(function n(){var e,t,r,a,i,o;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fe(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v,t=e.trim(),r=t.split("/",2),a=G(r,2),i=a[0],o=a[1],i&&o||ae("Error: could not determine current repository"),n.a(2,[i,o])}},n)}))).apply(this,arguments)}function we(){return ye.apply(this,arguments)}function ye(){return(ye=P(T().m(function n(){var e;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fe(["pr","view","--json","number","--jq",".number"]);case 1:return e=n.v,n.a(2,e.trim())}},n)}))).apply(this,arguments)}function ge(n,e){return be.apply(this,arguments)}function be(){return(be=P(T().m(function n(e,t){var r,a,i,o,u,c,s,l,f;return T().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),r=["api","graphql","-F","query=@-"],a=0,i=Object.entries(t);case 1:if(!(a<i.length)){n.n=4;break}if(o=G(i[a],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:a++,n.n=1;break;case 4:return f=JSON,n.n=5,fe(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"),ae("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function ke(n){return S(n,te)}function xe(n){return structuredClone(n)}function Se(n,e){var t,r,a,o,u=i(null!=(t=n[0])?t:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(r=u.status)?r:u.error?1:0,output:"".concat(null!=(a=u.stdout)?a:"").concat(null!=(o=u.stderr)?o:"")}}function je(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)}var Ie=/\btest\b/i,Oe=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],Ae=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/,$e=0===Se(["rtk","--version"]).exitCode,Re=function(){};function Ce(n){return Pe.apply(this,arguments)}function Pe(){return(Pe=P(T().m(function n(e){var t,r,a,i,o,u,c,s,l,f,p,d,h,m,v,w;return T().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,de(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,!((w=n.v)instanceof SyntaxError)){n.n=4;break}c=[],n.n=5;break;case 4:throw w;case 5:l={},f=q(c);try{for(f.s();!(p=f.n()).done;)m=p.value,v=null!=(d=m.bucket)?d:"",l[v]=(null!=(h=l[v])?h:0)+1}catch(n){f.e(n)}finally{f.f()}return n.a(2,{summary:{total:c.length,pass:null!=(t=l.pass)?t:0,fail:null!=(r=l.fail)?r:0,pending:null!=(a=l.pending)?a:0,skipping:null!=(i=l.skipping)?i:0,cancel:null!=(o=l.cancel)?o:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function qe(n,e,t,r){return Ee.apply(this,arguments)}function Ee(){return(Ee=P(T().m(function n(e,t,a,i){var o,u,c,s,l,f,p,d;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=He),void 0===a&&(a=Ce),void 0===i&&(i=function(n){return r.write(n)}),o=0,n.n=1,a(e);case 1:u=n.v,c=Re,n.p=2;case 3:if(s=Le(u),l=Ne(s),f=G(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,[u,o,!1]);case 4:if(!(o>=100)){n.n=5;break}return n.a(2,[u,o,!0]);case 5:return 1===(o+=1)&&(c=X("Waiting for test-related workflows to finish.",36,i)),n.n=6,t(36);case 6:return n.n=7,a(e);case 7:u=n.v;case 8:n.n=3;break;case 9:return n.p=9,c(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function Le(n){var e,t={},r=q(n.checks);try{for(r.s();!(e=r.n()).done;){var a=e.value,i=a.workflow||a.name||"unknown_workflow";null!=t[i]||(t[i]=[]),t[i].push(a)}}catch(n){r.e(n)}finally{r.f()}return Object.fromEntries(Object.entries(t).map(function(n){var e=G(n,2),t=e[0],r=function(n){var e,t=new Map,r=q(n);try{for(r.s();!(e=r.n()).done;){var a=e.value,i=Ge(a),o=t.get(i);o?o.push(a):t.set(i,[a])}}catch(n){r.e(n)}finally{r.f()}var u,c=[],s=q(t.values());try{for(s.s();!(u=s.n()).done;){var l=u.value;0!==c.length?Ye(l)>Ye(c)&&(c=l):c=l}}catch(n){s.e(n)}finally{s.f()}return c}(e[1]),a=r[0];a||ae("Error: no checks found for workflow ".concat(t));for(var i=a,o=0,u=r;o<u.length;o++){var c=u[o];Fe(c)>Fe(i)&&(i=c)}return[t,{classification:Me(r),check:i,checks:r}]}))}function Ne(n){for(var e={},t={},r=0,a=Object.entries(n);r<a.length;r++){var i=G(a[r],2),o=i[0],u=i[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Ue(n)})&&(t[o]=u):e[o]=u}return[e,t]}function Te(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 De(n){return _e.apply(this,arguments)}function _e(){return(_e=P(T().m(function n(e){var t,a;return T().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,de(["run","view",e,"--json",Oe.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,!((a=n.v)instanceof SyntaxError)){n.n=5;break}return r.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(a.message,"\n")),n.a(2,void 0);case 5:throw a;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function Ge(n){var e=Te(n);return e?"run:".concat(e):"unknown_run"}function Me(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 Fe(n){var e,t=n.completedAt;return t&&"0001-01-01T00:00:00Z"!==t?t:null!=(e=n.startedAt)?e:""}function Ue(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&Ie.test(n)})}function He(n){return We.apply(this,arguments)}function We(){return(We=P(T().m(function n(e){return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,k(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Be(){return Je.apply(this,arguments)}function Je(){return(Je=P(T().m(function n(){var e,t,r,a,i,o,u,c,s,l,f,p,d;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,we();case 1:return e=n.v,n.n=2,Ke(e);case 2:return t=n.v,re("Fetching latest CI results..."),n.n=3,qe(e);case 3:if(r=n.v,a=G(r,3),i=a[0],o=a[1],u=a[2],c=Le(i),s=Ne(c),l=G(s,2),f=l[0],p=l[1],d={summary:xe(i.summary),waited_for_test_related_checks:o>0,test_related_check_wait_attempts:o,test_related_check_wait_timed_out:u,latestCommits:t},!(Object.keys(f).length>0)){n.n=5;break}return n.n=4,Promise.all(Object.entries(f).map(P(T().m(function n(e){var t,r,a,i,o,u,c;return T().w(function(n){for(;;)switch(n.n){case 0:return t=G(e,2),r=t[0],a=t[1],n.n=1,Ze(r,a);case 1:return i=n.v,o=N,u=N({},i),c=et,n.n=2,Xe(a.check);case 2:return n.a(2,o(u,c(n.v)))}},n)}))));case 4:return d.failed_workflows=n.v,n.a(2,{output:ke(d),exitCode:1});case 5:if(!(Object.keys(p).length>0)){n.n=7;break}return d.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=6,Promise.all(Object.entries(p).map(function(n){var e=G(n,2);return Ze(e[0],e[1])}));case 6:return d.running_test_related_workflows=n.v,n.a(2,{output:ke(d),exitCode:1});case 7:return n.a(2,{output:ze(t),exitCode:0})}},n)}))).apply(this,arguments)}function Ye(n){var e,t="",r=q(n);try{for(r.s();!(e=r.n()).done;){var a=Fe(e.value);a>t&&(t=a)}}catch(n){r.e(n)}finally{r.f()}return t}function Ke(n){return Qe.apply(this,arguments)}function Qe(){return(Qe=P(T().m(function n(e){var t,r,a,i,o,u,c;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,me();case 1:return a=n.v,i=G(a,2),o=i[0],u=i[1],n.n=2,ge("\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n commits(last: 3) {\n nodes {\n commit {\n committedDate\n abbreviatedOid\n messageHeadline\n }\n }\n }\n }\n }\n }\n",{owner:o,name:u,number:Number(e)});case 2:return c=n.v,n.a(2,(null!=(t=null==(r=c.data)||null==(r=r.repository)||null==(r=r.pullRequest)||null==(r=r.commits)?void 0:r.nodes)?t:[]).flatMap(function(n){var e,t,r,a=at(null==(e=n.commit)?void 0:e.committedDate),i=at(null==(t=n.commit)?void 0:t.abbreviatedOid),o=at(null==(r=n.commit)?void 0:r.messageHeadline);return a&&i&&o?[{date:a,hash:i,title:o}]:[]}).toReversed())}},n)}))).apply(this,arguments)}function ze(n){return"All CI workflows passed.\n".concat(function(n){if(0===n.length)return"Latest commits: unavailable.\n";return ke({latestCommits:n})}(n))}function Ze(n,e){return Ve.apply(this,arguments)}function Ve(){return(Ve=P(T().m(function n(e,t){var r,a,i,o;return T().w(function(n){for(;;)switch(n.n){case 0:return a=Te(t.check),n.n=1,De(a);case 1:return i=n.v,o=it(i,at(t.check.name)),n.a(2,{classification:t.classification,workflow:e,job:at(t.check.name),job_url:at(null==o?void 0:o.url),failed_step:ot(o),run_id:a,run_url:null!=(r=at(null==i?void 0:i.url))?r:at(t.check.link),branch:at(null==i?void 0:i.headBranch),sha:at(null==i?void 0:i.headSha),conclusion:at(null==i?void 0:i.conclusion)})}},n)}))).apply(this,arguments)}function Xe(n){return nt.apply(this,arguments)}function nt(){return(nt=P(T().m(function n(e){var t;return T().w(function(n){for(;;)switch(n.n){case 0:if(t=Te(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,de(["run","view",t,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function et(n){return{failed_log:tt(n)}}function tt(n){var e=rt(x(n));if(!$e)return e;var t=Se(["rtk","log"],e);return 0===t.exitCode&&t.output.trim().length>0?rt(t.output):e}function rt(n){return n.split("\n").map(function(n){return n.replace(Ae,"")}).join("\n").trim()}function at(n){return"string"==typeof n&&n.length>0?n:void 0}function it(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 ot(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 ut(){return ct.apply(this,arguments)}function ct(){return(ct=P(T().m(function n(){var e,t;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ft();case 1:if(null==(e=n.v)){n.n=2;break}t=e,n.n=4;break;case 2:return n.n=3,st();case 3:t=n.v;case 4:return n.a(2,t)}},n)}))).apply(this,arguments)}function st(){return lt.apply(this,arguments)}function lt(){return(lt=P(T().m(function n(){var e;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,J(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return e=n.v,n.a(2,ht(e.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function ft(){return pt.apply(this,arguments)}function pt(){return(pt=P(T().m(function n(){var e,t,r;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,J(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v,t=e.trim(),n.a(2,t.length>0?t:void 0);case 2:if(n.p=2,!dt(r=n.v)){n.n=3;break}return n.a(2,void 0);case 3:throw r;case 4:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function dt(n){return/no pull requests? found for branch/i.test(String(n))}function ht(n,e){if(n.length>0)return n;throw new Error(e)}function mt(n){return It(n,"issue")}function vt(n){return It(n,"pull request")}function wt(n){return yt.apply(this,arguments)}function yt(){return(yt=P(T().m(function n(e){var t,r,a,i,o;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,me();case 1:return t=n.v,r=G(t,2),a=r[0],i=r[1],n.n=2,Ot(a,i,mt(e));case 2:return o=n.v,re("Fetched issue #".concat(o.number," messages.")),n.a(2,ke({issue:o}))}},n)}))).apply(this,arguments)}function gt(n){return bt.apply(this,arguments)}function bt(){return(bt=P(T().m(function n(e){var t,r,a;return T().w(function(n){for(;;)switch(n.n){case 0:if(void 0!==e){n.n=2;break}return n.n=1,we();case 1:a=n.v,n.n=3;break;case 2:a=vt(e);case 3:return t=a,n.n=4,St(t);case 4:return r=n.v,re("Fetched pull request #".concat(r.number," messages.")),n.a(2,ke({pull_request:r}))}},n)}))).apply(this,arguments)}function kt(){return xt.apply(this,arguments)}function xt(){return(xt=P(T().m(function n(){var e,t,r;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,de(["pr","view","--json","number","--jq",".number"],[1]);case 1:if(e=n.v,t=e.trim(),!dt(e)&&/^\d+$/.test(t)){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,St(t);case 3:return r=n.v,n.a(2,ke({pull_request:r}))}},n)}))).apply(this,arguments)}function St(n){return jt.apply(this,arguments)}function jt(){return(jt=P(T().m(function n(e){var t,r,a,i;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,me();case 1:return t=n.v,r=G(t,2),a=r[0],i=r[1],n.n=2,$t(a,i,e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function It(n,e){var t=String(n).trim();if(0===t.length&&ae("Error: ".concat(e," reference is required"),2),/^\d+$/.test(t))return t;var r="issue"===e?"issues":"pull",a=t.match(new RegExp("^https?://(?:www\\.)?github\\.com/[^/]+/[^/]+/".concat(r,"/(\\d+)(?:/|$)")));if(null!=a&&a[1])return a[1];ae("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(t,'"'),2)}function Ot(n,e,t){return At.apply(this,arguments)}function At(){return(At=P(T().m(function n(e,t,r){var a,i;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Dt({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 a=n.v,n.n=2,Nt({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:Gt});case 2:return i=n.v,n.a(2,N(N({},a),{},{messages:i}))}},n)}))).apply(this,arguments)}function $t(n,e,t){return Rt.apply(this,arguments)}function Rt(){return(Rt=P(T().m(function n(e,t,r){var a,i,o,u,c;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Dt({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 a=n.v,n.n=2,Promise.all([Pt(e,t,r),Et(e,t,r)]);case 2:return i=n.v,o=G(i,2),u=o[0],c=o[1],n.a(2,N(N({},a),{},{messages:[].concat(M(u),M(c)).toSorted(Ct)}))}},n)}))).apply(this,arguments)}function Ct(n,e){var t="string"==typeof n.createdAt?n.createdAt:"",r="string"==typeof e.createdAt?e.createdAt:"";return t.localeCompare(r)}function Pt(n,e,t){return qt.apply(this,arguments)}function qt(){return(qt=P(T().m(function n(e,t,r){return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Nt({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:Gt});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Et(n,e,t){return Lt.apply(this,arguments)}function Lt(){return(Lt=P(T().m(function n(e,t,r){return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Nt({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:Mt});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Nt(n){return Tt.apply(this,arguments)}function Tt(){return(Tt=P(T().m(function n(e){var t,r,a,i,o;return T().w(function(n){for(;;)switch(n.n){case 0:r=[];case 1:return o=e,n.n=2,ge(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:t});case 2:if(i=o.selectConnection.call(o,n.v)){n.n=3;break}return n.a(2,r);case 3:if(r.push.apply(r,M(i.nodes.map(e.mapNode).filter(Ft))),i.pageInfo.hasNextPage){n.n=4;break}return n.a(2,r);case 4:t=null!=(a=i.pageInfo.endCursor)?a:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Dt(n){return _t.apply(this,arguments)}function _t(){return(_t=P(T().m(function n(e){var t,r,a,i,o;return T().w(function(n){for(;;)switch(n.n){case 0:return o=e,n.n=1,ge(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(i=o.selectMetadata.call(o,n.v))||ae("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:i.number,title:i.title,url:i.url,author:null!=(t=null==(r=i.author)?void 0:r.login)?t:void 0,body:null!=(a=i.body)?a:""})}},n)}))).apply(this,arguments)}function Gt(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 Mt(n){var e,t,r,a,i;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!=(a=n.submittedAt)?a:void 0,url:n.url,body:null!=(i=n.body)?i:""}}function Ft(n){return"string"==typeof n.body&&n.body.length>0}function Ut(n){return Ht.apply(this,arguments)}function Ht(){return(Ht=P(T().m(function n(e){var t,r,a,i,o,u,c,s,l,f;return T().w(function(n){for(;;)switch(n.n){case 0:return r=(t=void 0===e?{}:e).body,a=t.title,n.n=1,se(["git","branch","--show-current"]);case 1:return i=n.v,o=i.trim(),n.n=2,fe(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return u=n.v,c=u.trim(),o||ae("Error: could not determine current branch"),c||ae("Error: could not determine default branch"),o===c&&ae("Error: current branch is the default branch (".concat(c,")")),s=["pr","create","--base",c,"--head",o,"--fill"],a&&s.push("--title",a),r&&s.push("--body-file","-"),re("Creating pull request..."),n.n=3,fe(s,r);case 3:return l=ke,f=JSON,n.n=4,fe(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,l(f.parse.call(f,n.v)))}},n)}))).apply(this,arguments)}function Wt(n){return Bt.apply(this,arguments)}function Bt(){return(Bt=P(T().m(function n(e){var t,r,a;return T().w(function(n){for(;;)switch(n.n){case 0:return t=e.body,r=e.title,n.n=1,we();case 1:return a=n.v,re("Updating pull request #".concat(a,"...")),n.n=2,Jt(a,["--title",r,"--body-file","-"],t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Jt(n,e,t){return Yt.apply(this,arguments)}function Yt(){return(Yt=P(T().m(function n(e,t,r){var a,i;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fe(["pr","edit",e].concat(M(t)),r);case 1:return a=ke,i=JSON,n.n=2,fe(["pr","view",e,"--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author,body"]);case 2:return n.a(2,a(i.parse.call(i,n.v)))}},n)}))).apply(this,arguments)}function Kt(){return Qt.apply(this,arguments)}function Qt(){return(Qt=P(T().m(function n(){var e,t,r,a,i,o,u,c;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ue("Error: JSON input is required on stdin");case 1:for(e=n.v,t=cr(e),r={},a=0,i=Object.entries(t.replies);a<i.length;a++)o=G(i[a],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 zt(n,e,t,r,a){return Zt.apply(this,arguments)}function Zt(){return(Zt=P(T().m(function n(e,t,r,a,i){var o,u,c,s,l,f,p,d,h;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,ge(e,{owner:t,name:r,number:Number(a),cursor:o});case 1:s=n.v,(l=null==(u=s.data)||null==(u=u.repository)||null==(u=u.pullRequest)?void 0:u.reviewThreads)||ae("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),f=q(l.nodes),n.p=2,f.s();case 3:if((p=f.n()).done){n.n=5;break}return d=p.value,n.n=4,i(d);case 4:n.n=3;break;case 5:n.n=7;break;case 6:n.p=6,h=n.v,f.e(h);case 7:return n.p=7,f.f(),n.f(7);case 8:if(l.pageInfo.hasNextPage){n.n=9;break}return n.a(2);case 9:o=null!=(c=l.pageInfo.endCursor)?c:void 0;case 10:n.n=0;break;case 11:return n.a(2)}},n,null,[[2,6,7,8]])}))).apply(this,arguments)}function Vt(n,e,t){return Xt.apply(this,arguments)}function Xt(){return(Xt=P(T().m(function n(e,t,r){var a;return T().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,zt("\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||a.push(n.id)});case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function nr(n,e,t){return er.apply(this,arguments)}function er(){return(er=P(T().m(function n(e,t,r){var a,i;return T().w(function(n){for(;;)switch(n.n){case 0:return a=[],i=new Map,n.n=1,zt("\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 line\n originalLine\n startLine\n originalStartLine\n commit { oid }\n originalCommit { oid }\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,P(T().m(function n(r){var o,u,c,s,l,f,p,d,h,m,v;return T().w(function(n){for(;;)switch(n.n){case 0:if(!r.isResolved){n.n=1;break}return n.a(2);case 1:return n.n=2,Promise.all(r.comments.nodes.map(function(n){var a,o;return or(n,null!=(a=r.path)?a:void 0,null!=(o=r.isOutdated)&&o,e,t,i)}));case 2:u=n.v,c=r.comments.pageInfo,s=null!=(o=c.endCursor)?o:void 0;case 3:if(!c.hasNextPage){n.n=6;break}return n.n=4,ge("\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 line\n originalLine\n startLine\n originalStartLine\n commit { oid }\n originalCommit { oid }\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",{threadId:r.id,cursor:s});case 4:return p=n.v,(d=null==(l=p.data)||null==(l=l.node)?void 0:l.comments)||ae("Could not find comments in GraphQL response for thread ".concat(r.id,".")),h=u.push,m=u,v=M,n.n=5,Promise.all(d.nodes.map(function(n){var a,o;return or(n,null!=(a=r.path)?a:void 0,null!=(o=r.isOutdated)&&o,e,t,i)}));case 5:h.apply.call(h,m,v(n.v)),c=d.pageInfo,s=null!=(f=c.endCursor)?f:void 0,n.n=3;break;case 6:a.push({id:r.id,isResolved:r.isResolved,isOutdated:r.isOutdated,path:r.path,line:r.line,originalLine:r.originalLine,startLine:r.startLine,originalStartLine:r.originalStartLine,comments:u});case 7:return n.a(2)}},n)})));case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function tr(){return rr.apply(this,arguments)}function rr(){return(rr=P(T().m(function n(){var e,t,r,a,i,o,u;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,me();case 1:return e=n.v,t=G(e,2),r=t[0],a=t[1],n.n=2,we();case 2:return i=n.v,re("Fetching unresolved review threads..."),o=ke,n.n=3,nr(r,a,i);case 3:return u=n.v,n.a(2,o({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function ar(n){return ir.apply(this,arguments)}function ir(){return(ir=P(T().m(function n(e){var t,r,a,i,o,u,c,s,l,f,p,d,h,m,v,w,y,g,b,k;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,me();case 1:return t=n.v,r=G(t,2),a=r[0],i=r[1],n.n=2,we();case 2:return o=n.v,g=Set,n.n=3,Vt(a,i,o);case 3:b=n.v,u=new g(b),re("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=q(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(d=G(f.value,2),h=d[0],m=G(d[1],2),v=m[0],w=m[1],re("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,ge("\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:w});case 7:y=n.v,null!=(p=y.data)&&null!=(p=p.resolveReviewThread)&&null!=(p=p.thread)&&p.isResolved?c.push(v):re("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,k=n.v,l.e(k);case 11:return n.p=11,l.f(),n.f(11);case 12:return re("Done."),n.a(2,ke({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function or(n,e,t,r,a,i){return ur.apply(this,arguments)}function ur(){return(ur=P(T().m(function n(e,t,r,a,i,o){var u,c,s,l,f,p,d,h;return T().w(function(n){for(;;)switch(n.n){case 0:return c=e.author,s=e.id,l=e.url,f=e.body,p=e.createdAt,d="string"==typeof c?c:null!=(u=null==c?void 0:c.login)?u:void 0,n.n=1,sr(e,t,r,a,i,o);case 1:return h=n.v,n.a(2,{id:s,url:l,body:f,createdAt:p,author:d,snippet:h})}},n)}))).apply(this,arguments)}function cr(n){try{var e=JSON.parse(n);return function(n){if("object"!==F(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==F(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||ae("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&ae("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function sr(n,e,t,r,a,i){return lr.apply(this,arguments)}function lr(){return(lr=P(T().m(function n(e,t,r,a,i,o){var u,c,s,l;return T().w(function(n){for(;;)switch(n.n){case 0:if(t){n.n=1;break}return n.a(2,void 0);case 1:if(u=r?pr(e,t):fr(e,t),c=r?fr(e,t):pr(e,t),s=null!=u?u:c){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,hr(a,i,s.expression,o);case 3:if(void 0!==(l=n.v)){n.n=4;break}return n.a(2,void 0);case 4:return n.a(2,yr(l,s.startLine,s.endLine))}},n)}))).apply(this,arguments)}function fr(n,e){var t;return dr(null==(t=n.commit)?void 0:t.oid,e,n.startLine,n.line)}function pr(n,e){var t;return dr(null==(t=n.originalCommit)?void 0:t.oid,e,n.originalStartLine,n.originalLine)}function dr(n,e,t,r){if(n&&r)return{expression:"".concat(n,":").concat(e),startLine:null!=t?t:r,endLine:r}}function hr(n,e,t,r){return mr.apply(this,arguments)}function mr(){return(mr=P(T().m(function n(e,t,r,a){var i,o;return T().w(function(n){for(;;)switch(n.n){case 0:return i="".concat(e,"/").concat(t,":").concat(r),(o=a.get(i))||(o=vr(e,t,r),a.set(i,o)),n.n=1,o;case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function vr(n,e,t){return wr.apply(this,arguments)}function wr(){return(wr=P(T().m(function n(e,t,r){var a,i,o;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ge("\n query($owner: String!, $name: String!, $expression: String!) {\n repository(owner: $owner, name: $name) {\n object(expression: $expression) {\n ... on Blob {\n isBinary\n text\n }\n }\n }\n }\n",{owner:e,name:t,expression:r});case 1:if(i=n.v,(o=null==(a=i.data)||null==(a=a.repository)?void 0:a.object)&&!o.isBinary&&"string"==typeof o.text){n.n=2;break}return n.a(2,void 0);case 2:return n.a(2,o.text)}},n)}))).apply(this,arguments)}function yr(n,e,t){var r=n.split("\n");if(r.length>0&&""===r.at(-1)&&r.pop(),0!==r.length){for(var a=gr(e,r.length),i=gr(t,r.length),o=Math.max(1,a-2),u=Math.min(r.length,i+2),c=String(u).length,s=[],l=o;l<=u;l+=1){var f,p=l>=a&&l<=i?">":" ";s.push("".concat(p," ").concat(String(l).padStart(c," ")," | ").concat(null!=(f=r[l-1])?f:""))}return s.join("\n")}}function gr(n,e){return Math.min(Math.max(n,1),e)}function br(n){return kr.apply(this,arguments)}function kr(){return(kr=P(T().m(function n(e){var t;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,wt(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 xr(n){return"git merge-base ".concat(Sr("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(Sr(n)," HEAD")}function Sr(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function jr(n){return Ir.apply(this,arguments)}function Ir(){return(Ir=P(T().m(function n(e){var t,r,a;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ut();case 1:return t=n.v,r=xr(t),n.n=2,kt();case 2:return a=n.v,n.a(2,"\nReview the current ".concat(a?"pull request":"branch"," against its base branch ").concat(t,' via `git diff "$(').concat(r,')"`.\nUse the known facts, if provided, to avoid repeating fact checks and findings. Reuse a known fact only when the same current-code evidence, command result, or primary-source evidence still applies. If the current code or source context may have changed enough to invalidate a known fact, refresh only that affected fact.\nFor each finding:\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 - 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. Clean up any temporary files created during the experiment.\n4. 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 new valid findings that are not already covered by the known facts. For each finding, include the evidence, proposed fix, and likely impact. Do not modify the code.\nWhen reporting valid findings, include a `## Verified Facts` section after the findings. Include only concise, review-relevant facts: what was verified, why it matters to the review, and how it was verified.\nIf there are no new valid findings, respond exactly with: `').concat(tn,"`\n\n").concat(Or(e),"\n\n").concat(Ar(a),"\n").trim())}},n)}))).apply(this,arguments)}function Or(n){var e=null==n?void 0:n.trim();return e?"Known facts:\n~~~~markdown\n".concat(e,"\n~~~~\n").trim():""}function Ar(n){return n?"Current pull request context:\n~~~~yaml\n".concat(n.trim(),"\n~~~~\n").trim():""}function $r(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 Rr(){return Cr.apply(this,arguments)}function Cr(){return(Cr=P(T().m(function n(){var e,t,r;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ut();case 1:return e=n.v,t=xr(e),n.n=2,kt();case 2:return r=n.v,n.a(2,"\nSimplify the current ".concat(r?"pull request":"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\n").concat(r?"Current pull request context:\n~~~~yaml\n".concat(r.trim(),"\n~~~~"):"","\n").trim())}},n)}))).apply(this,arguments)}var Pr=/\.(?:[cm]?[jt]s|json|md|ya?ml)$/i;function qr(){return Er.apply(this,arguments)}function Er(){return(Er=P(T().m(function n(){var e,t,r;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return e=O(new URL("../..",import.meta.url)),n.n=1,Lr(e);case 1:return t=n.v,n.n=2,d(v(I(),"agent-skills-install-"));case 2:return r=n.v,n.p=3,n.n=4,p(v(e,"package.json"),v(r,"package.json"));case 4:return n.n=5,p(v(e,"skills"),v(r,"skills"),{recursive:!0});case 5:return n.n=6,Tr(r,t);case 6:return n.n=7,J(["bunx","skills@latest","add",r,"--global","--yes","--skill","*","--agent","claude-code","--agent","codex","--agent","gemini-cli"],{waitMessage:"Installing packaged skills globally."});case 7:return n.p=7,n.n=8,f(r,{recursive:!0,force:!0});case 8:return n.f(7);case 9:return n.a(2)}},n,null,[[3,,7,9]])}))).apply(this,arguments)}function Lr(n){return Nr.apply(this,arguments)}function Nr(){return(Nr=P(T().m(function n(e){var t,r,a;return T().w(function(n){for(;;)switch(n.n){case 0:return t=v(e,"package.json"),a=JSON,n.n=1,c(t,"utf8");case 1:return r=a.parse.call(a,n.v),j.ok(r.name&&r.version,"Failed to read name or version from ".concat(t)),n.a(2,r)}},n)}))).apply(this,arguments)}function Tr(n,e){return Dr.apply(this,arguments)}function Dr(){return(Dr=P(T().m(function n(e,t){var r,a;return T().w(function(n){for(;;)switch(n.n){case 0:return r="".concat(t.name,"@latest"),a="".concat(t.name,"@").concat(t.version),n.n=1,_r(e,function(n){return n.replaceAll(r,a)});case 1:return n.a(2)}},n)}))).apply(this,arguments)}function _r(n,e){return Gr.apply(this,arguments)}function Gr(){return(Gr=P(T().m(function n(e,t){var r,a,i,o,u,s,f,p;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,l(e,{recursive:!0,withFileTypes:!0});case 1:r=n.v,a=q(r),n.p=2,a.s();case 3:if((i=a.n()).done){n.n=7;break}if((o=i.value).isFile()&&Pr.test(o.name)){n.n=4;break}return n.a(3,6);case 4:return u=v(o.parentPath,o.name),n.n=5,c(u,"utf8");case 5:if(s=n.v,(f=t(s))===s){n.n=6;break}return n.n=6,h(u,f);case 6:n.n=3;break;case 7:n.n=9;break;case 8:n.p=8,p=n.v,a.e(p);case 9:return n.p=9,a.f(),n.f(9);case 10:return n.a(2)}},n,null,[[2,8,9,10]])}))).apply(this,arguments)}var Mr=new n;function Fr(n){return Ur.apply(this,arguments)}function Ur(){return(Ur=P(T().m(function n(e){var t,r;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Hr();case 1:return t=n.v,r=jr(t),n.a(2,"all"===e?un(r,{allAgentsLabel:"review agents",mapOutput:function(n,e){return dn(e)?void 0:e}}):sn(e,r))}},n)}))).apply(this,arguments)}function Hr(){return Wr.apply(this,arguments)}function Wr(){return(Wr=P(T().m(function n(){var e;return T().w(function(n){for(;;)switch(n.n){case 0:if(!t.isTTY){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,ie();case 2:return e=n.v,n.a(2,e.length>0?e:void 0)}},n)}))).apply(this,arguments)}function Br(n){var t=Mr.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(P(T().m(function e(){var t,r,a,i,o,u,c,s,l,f=arguments;return T().w(function(e){for(;;)switch(e.n){case 0:for(t=f.length,r=new Array(t),a=0;a<t;a++)r[a]=f[a];return i=G(r,2),o=i[0],u=i[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 Jr(n,e,t){var r=Mr.command(n).description(e).allowExcessArguments(!1);"function"!=typeof t?r.argument(t.argumentName,t.argumentDescription).action(P(T().m(function n(e){var r;return T().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(P(T().m(function n(){var e;return T().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)})))}function Yr(){return(Yr=P(T().m(function n(e,t){var r;return T().w(function(n){for(;;)switch(n.n){case 0:return r=Qr,n.n=1,sn(e,Kr(t));case 1:return n.a(2,r(n.v))}},n)}))).apply(this,arguments)}function Kr(n){return"".concat(n,"\n\nReport on the result with a markdown code block with triple backticks.")}function Qr(n){var e,t=null==(e=M(n.matchAll(/```[^\n`]*\n?([\s\S]*?)```/g)).at(-1))?void 0:e[1];if(!t)throw new Error("Agent output did not contain a markdown code block with triple backticks.");return t}Mr.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),Mr.command("install-skills").description("Install all packaged skills globally for Claude Code, Codex, and Gemini CLI").allowExcessArguments(!1).action(P(T().m(function n(){return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,qr();case 1:process.stdout.write("Done\n");case 2:return n.a(2)}},n)}))),Mr.command("update-bun-deps").description("Update all Bun dependencies in the root package and workspace packages").allowExcessArguments(!1).action(P(T().m(function n(){return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Sn();case 1:return n.a(2)}},n)}))),Br({name:"agent",description:"Run the selected agent with the specified prompt",optionDescription:"Use an agent",choices:["codex","claude","gemini"],argumentName:"<prompt>",argumentDescription:"Prompt to pass to the agent",run:function(n,e){return function(n,e){return Yr.apply(this,arguments)}(n,e)}}),Mr.command("review").description("Run review against the current branch with the selected agent").addOption(new e("--agent <agent>","Use a review agent").choices(["all","codex","claude","gemini"]).makeOptionMandatory()).allowExcessArguments(!1).action(P(T().m(function n(e){var t;return T().w(function(n){for(;;)switch(n.n){case 0:return t=process.stdout,n.n=1,Fr(e.agent);case 1:t.write.call(t,n.v);case 2:return n.a(2)}},n)}))),Jr("review-codex","Run Codex review against the current branch",function(){return Fr("codex")}),Jr("review-claude","Run Claude Code review against the current branch",function(){return Fr("claude")}),Jr("review-gemini","Run Gemini CLI review against the current branch",function(){return Fr("gemini")}),Br({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?un(br(mt(e)),{allAgentsLabel:"planning agents"}):sn(n,br(mt(e)))}}),Jr("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return sn("codex",br(mt(n)))}}),Jr("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return sn("claude",br(mt(n)))}}),Jr("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return sn("gemini",br(mt(n)))}}),Mr.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(P(T().m(function n(e,t,r,a){var i;return T().w(function(n){for(;;)switch(n.n){case 0:return i=process.stdout,n.n=1,sn(a.agent,$r(e,t,r));case 1:i.write.call(i,n.v);case 2:return n.a(2)}},n)}))),Br({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 sn(n,Rr())}}),Jr("simplify-codex","Run Codex PR simplification against the current branch",function(){return sn("codex",Rr())}),Jr("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return sn("claude",Rr())}),Jr("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return sn("gemini",Rr())}),Mr.command("open-pr").description("Create a pull request for the current branch").argument("<title>","Pull request title").allowExcessArguments(!1).action(P(T().m(function n(e){var t,r;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ie();case 1:return t=n.v,n.n=2,Ut({body:t||void 0,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),Mr.command("update-pr").description("Update the current pull request title and body").argument("<title>","Pull request title").allowExcessArguments(!1).action(P(T().m(function n(e){var t,r;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ue("Error: PR body input is required on stdin");case 1:return t=n.v,n.n=2,Wt({body:t,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),Mr.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(P(T().m(function n(){var e;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Be();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),Mr.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action(P(T().m(function n(e){var t;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,wt(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),Mr.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(P(T().m(function n(e){var t;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,gt(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),Mr.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(P(T().m(function n(){var e;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,tr();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),Mr.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(P(T().m(function n(){var e,t;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Kt();case 1:return e=n.v,n.n=2,ar(e);case 2:t=n.v,process.stdout.write(t);case 3:return n.a(2)}},n)}))),await Mr.parseAsync(process.argv);
|
|
5
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy9kZXBzL3VwZGF0ZUJ1bkRlcGVuZGVuY2llcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3NoYXJlZC50cyIsIi4uL3NyYy9wci9jaS50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHRCcmFuY2gudHMiLCIuLi9zcmMvcHIvbWVzc2FnZXMudHMiLCIuLi9zcmMvcHIvcHVsbFJlcXVlc3QudHMiLCIuLi9zcmMvcHIvcmV2aWV3VGhyZWFkcy50cyIsIi4uL3NyYy9wcm9tcHRzL3BsYW5Qcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9iYXNlQnJhbmNoRGlmZkNvbW1hbmQudHMiLCIuLi9zcmMvcHJvbXB0cy9yZXZpZXdQcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvc2tpbGxzL2luc3RhbGxTa2lsbHMudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmludGVyZmFjZSBSdW5Db21tYW5kT3B0aW9ucyB7XG4gIGxvZ0ZpbGVQYXRoPzogc3RyaW5nO1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIHdhaXRNZXNzYWdlPzogc3RyaW5nIHwgZmFsc2U7XG4gIHdhaXRJbnRlcnZhbFNlY29uZHM/OiBudW1iZXI7XG59XG5cbnR5cGUgUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuZXhwb3J0IGludGVyZmFjZSBLaWxsYWJsZVByb2Nlc3Mge1xuICBraWxsOiAoc2lnbmFsPzogTm9kZUpTLlNpZ25hbHMpID0+IGJvb2xlYW47XG4gIHBpZD86IG51bWJlcjtcbn1cblxuLy8gVGhlIG9uZS1ob3VyIGJ1ZGdldCBrZWVwcyBhZ2VudHMgd2FpdGluZyBmb3IgbG9uZy1ydW5uaW5nIGNvbW1hbmRzIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSBwcm9jZXNzIHRvIHVzZSB0aGUgZnVsbCBob3VyLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gMzY7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVMgPSA2MCAqIDYwICogMTAwMDtcbmNvbnN0IERPVFNfUEVSX1BST0dSRVNTX1BFUkNFTlRfU1RFUCA9IDU7XG5jb25zdCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMgPSA1MDAwO1xuY29uc3QgTUFYX1BST0dSRVNTX1BFUkNFTlQgPSAxMDA7XG5jb25zdCBQUk9DRVNTX0NMRUFOVVBfU0lHTkFMUyA9IFsnU0lHSU5UJywgJ1NJR1RFUk0nLCAnU0lHSFVQJ10gYXMgY29uc3Q7XG5jb25zdCBhY3RpdmVQcm9jZXNzZXMgPSBuZXcgU2V0PEtpbGxhYmxlUHJvY2Vzcz4oKTtcbmxldCBjbGVhbnVwSGFuZGxlcnNJbnN0YWxsZWQgPSBmYWxzZTtcbi8vIEtlZXAgdGhlIENMSSB0ZXh0IGNvbmNpc2Ugc28gZG93bnN0cmVhbSBwcm9tcHRzIGNhbiBtYXRjaCBpdCBjb25zaXN0ZW50bHkuXG5leHBvcnQgY29uc3QgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HID0gJ1RoaXMgY2FuIHRha2UgdXAgdG8gMSBob3VyOyBkb3RzIGluZGljYXRlIHByb2dyZXNzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGRldGFjaGVkOiB0cnVlLFxuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG4gIGNvbnN0IHByb2Nlc3NUaW1lb3V0ID0gY3JlYXRlUHJvY2Vzc1RpbWVvdXQocHJvYywgb3B0aW9ucy50aW1lb3V0TXMpO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAocHJvY2Vzc1RpbWVvdXQudGltZWRPdXQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRpbWVvdXRFcnJvck1lc3NhZ2UoYCR7c3Rkb3V0fSR7c3RkZXJyfWAsIHByb2Nlc3NUaW1lb3V0LnRpbWVvdXRNcywgY29tbWFuZCkpO1xuICAgIH1cblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0ZG91dDtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjb21tYW5kTG9nZ2VyLmNsb3NlKCk7XG4gICAgcHJvY2Vzc1RpbWVvdXQuY2xlYXIoKTtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVvdXRFcnJvck1lc3NhZ2Uob3V0cHV0OiBzdHJpbmcsIHRpbWVvdXRNczogbnVtYmVyLCBjb21tYW5kOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBgQ29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIgJHtmb3JtYXREdXJhdGlvbih0aW1lb3V0TXMpfTogJHtjb21tYW5kLmpvaW4oJyAnKX1gO1xuICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IDAgPyBgJHtvdXRwdXR9XFxuJHttZXNzYWdlfWAgOiBtZXNzYWdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24obWlsbGlzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAobWlsbGlzZWNvbmRzICUgKDYwICogNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiA2MCAqIDEwMDApfWhgO1xuICB9XG4gIGlmIChtaWxsaXNlY29uZHMgJSAoNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiAxMDAwKX1tYDtcbiAgfVxuICBpZiAobWlsbGlzZWNvbmRzICUgMTAwMCA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAxMDAwfXNgO1xuICB9XG4gIHJldHVybiBgJHttaWxsaXNlY29uZHN9bXNgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvY2Vzc1RpbWVvdXQoXG4gIHByb2M6IEtpbGxhYmxlUHJvY2VzcyxcbiAgdGltZW91dE1zID0gREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVNcbik6IHsgY2xlYXI6ICgpID0+IHZvaWQ7IHRpbWVkT3V0OiAoKSA9PiBib29sZWFuOyB0aW1lb3V0TXM6IG51bWJlciB9IHtcbiAgbGV0IHRpbWVkT3V0ID0gZmFsc2U7XG4gIGxldCBmb3JjZUtpbGxUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGFjdGl2ZVByb2Nlc3Nlcy5hZGQocHJvYyk7XG4gIGluc3RhbGxDbGVhbnVwSGFuZGxlcnMoKTtcbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRpbWVkT3V0ID0gdHJ1ZTtcbiAgICBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHVEVSTScpO1xuICAgIGZvcmNlS2lsbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHS0lMTCcpLCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMpO1xuICAgIGZvcmNlS2lsbFRpbWVyLnVucmVmKCk7XG4gIH0sIHRpbWVvdXRNcyk7XG4gIHRpbWVvdXQudW5yZWYoKTtcblxuICByZXR1cm4ge1xuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoZm9yY2VLaWxsVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGZvcmNlS2lsbFRpbWVyKTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVByb2Nlc3Nlcy5kZWxldGUocHJvYyk7XG4gICAgfSxcbiAgICB0aW1lZE91dDogKCkgPT4gdGltZWRPdXQsXG4gICAgdGltZW91dE1zLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsQ2xlYW51cEhhbmRsZXJzKCk6IHZvaWQge1xuICBpZiAoY2xlYW51cEhhbmRsZXJzSW5zdGFsbGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNsZWFudXBIYW5kbGVyc0luc3RhbGxlZCA9IHRydWU7XG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpIHtcbiAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHByb2Mgb2YgYWN0aXZlUHJvY2Vzc2VzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzKHByb2MsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmV4aXQoMTI4ICsgc2lnbmFsTnVtYmVyKHNpZ25hbCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNpZ25hbE51bWJlcihzaWduYWw6ICh0eXBlb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpW251bWJlcl0pOiBudW1iZXIge1xuICBzd2l0Y2ggKHNpZ25hbCkge1xuICAgIGNhc2UgJ1NJR0lOVCc6IHtcbiAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBjYXNlICdTSUdURVJNJzoge1xuICAgICAgcmV0dXJuIDE1O1xuICAgIH1cbiAgICBjYXNlICdTSUdIVVAnOiB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24ga2lsbFByb2Nlc3MocHJvYzogS2lsbGFibGVQcm9jZXNzLCBzaWduYWw6IE5vZGVKUy5TaWduYWxzKTogdm9pZCB7XG4gIGlmIChwcm9jLnBpZCAmJiBwcm9jLnBpZCA+IDApIHtcbiAgICB0cnkge1xuICAgICAgcHJvY2Vzcy5raWxsKC1wcm9jLnBpZCwgc2lnbmFsKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZhbGwgYmFjayB0byBraWxsaW5nIHRoZSBkaXJlY3QgY2hpbGQgd2hlbiBwcm9jZXNzLWdyb3VwIHRlcm1pbmF0aW9uIGlzIHVuYXZhaWxhYmxlLlxuICAgIH1cbiAgfVxuICBwcm9jLmtpbGwoc2lnbmFsKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChcbiAgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvbkNodW5rPzogKGNodW5rOiBzdHJpbmcpID0+IHZvaWRcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY29uc3QgY2h1bmtUZXh0ID0gdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IGNodW5rIDogZGVjb2Rlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoY2h1bmspLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICBjaHVua3MucHVzaChjaHVua1RleHQpO1xuICAgIG9uQ2h1bms/LihjaHVua1RleHQpO1xuICB9XG4gIGNvbnN0IGZpbmFsQ2h1bmsgPSBkZWNvZGVyLmRlY29kZSgpO1xuICBpZiAoZmluYWxDaHVuaykge1xuICAgIGNodW5rcy5wdXNoKGZpbmFsQ2h1bmspO1xuICAgIG9uQ2h1bms/LihmaW5hbENodW5rKTtcbiAgfVxuICByZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2FpdFByb2dyZXNzKFxuICB3YWl0TWVzc2FnZTogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQsXG4gIHdhaXRJbnRlcnZhbFNlY29uZHMgPSBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgd3JpdGVQcm9ncmVzczogUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZSkgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUobWVzc2FnZSlcbik6ICgpID0+IHZvaWQge1xuICBpZiAoIXdhaXRNZXNzYWdlKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG5cbiAgbGV0IGRvdENvdW50ID0gMDtcbiAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgd3JpdGVQcm9ncmVzcygnLicpO1xuICAgIGRvdENvdW50ICs9IDE7XG4gICAgaWYgKGRvdENvdW50IDw9IE1BWF9QUk9HUkVTU19QRVJDRU5UICYmIGRvdENvdW50ICUgRE9UU19QRVJfUFJPR1JFU1NfUEVSQ0VOVF9TVEVQID09PSAwKSB7XG4gICAgICAvLyBUaGlzIHRyYWNrcyBlbGFwc2VkIHdhaXQgYnVkZ2V0LCBub3QgdGhlIGNoaWxkIHByb2Nlc3MgY29tcGxldGlvbiBwZXJjZW50YWdlLlxuICAgICAgd3JpdGVQcm9ncmVzcyhgICR7ZG90Q291bnR9JSBkb25lIGApO1xuICAgIH1cbiAgfSwgd2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuXG4gIHdyaXRlUHJvZ3Jlc3MoYCR7d2FpdE1lc3NhZ2V9ICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfTogYCk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICB3cml0ZVByb2dyZXNzKCdcXG4nKTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIENvbW1hbmRMb2dnZXIge1xuICB3cml0ZTogKGNodW5rOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsb3NlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDb21tYW5kTG9nZ2VyKGxvZ0ZpbGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPENvbW1hbmRMb2dnZXI+IHtcbiAgaWYgKCFsb2dGaWxlUGF0aCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKCkgPT4ge30sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT4ge30sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHdhcm4gPSAoZXJyb3I6IHVua25vd24pOiB2b2lkID0+IHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgV2FybmluZzogRmFpbGVkIHRvIHdyaXRlIGNvbW1hbmQgbG9nIHRvICR7bG9nRmlsZVBhdGh9OiAke1N0cmluZyhlcnJvcil9XFxuYCk7XG4gIH07XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBta2RpcihkaXJuYW1lKGxvZ0ZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgY29uc3Qgc3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW0obG9nRmlsZVBhdGgsIHsgZmxhZ3M6ICd3JyB9KTtcblxuICAgIHN0cmVhbS5vbignZXJyb3InLCB3YXJuKTtcblxuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKGNodW5rKSA9PiB7XG4gICAgICAgIGlmIChzdHJlYW0ud3JpdGFibGUpIHtcbiAgICAgICAgICBzdHJlYW0ud3JpdGUoY2h1bmspO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgc3RyZWFtLmVuZCgoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9KSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHdhcm4oZXJyb3IpO1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKCkgPT4ge30sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT4ge30sXG4gICAgfTtcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fUEhSQVNFID0gJ3RoZXJlIGlzIG5vIGNvbmNlcm4nO1xuZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fTUVTU0FHRSA9ICdUaGVyZSBpcyBubyBjb25jZXJuLic7XG4iLCJpbXBvcnQgeyBjcmVhdGVXYWl0UHJvZ3Jlc3MsIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHsgTk9fQ09OQ0VSTl9NRVNTQUdFLCBOT19DT05DRVJOX1BIUkFTRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuXG5leHBvcnQgY29uc3QgQUdFTlRfTkFNRVMgPSBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSBhcyBjb25zdDtcbmNvbnN0IENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVggPSBuZXcgUmVnRXhwKGBcXFxcYiR7Tk9fQ09OQ0VSTl9QSFJBU0V9XFxcXGJgLCAnaScpO1xuZXhwb3J0IHR5cGUgQWdlbnROYW1lID0gKHR5cGVvZiBBR0VOVF9OQU1FUylbbnVtYmVyXTtcblxuaW50ZXJmYWNlIEFnZW50Q29tbWFuZE9wdGlvbnMge1xuICB3YWl0TWVzc2FnZT86IHN0cmluZyB8IGZhbHNlO1xufVxuXG5pbnRlcmZhY2UgQWxsQWdlbnRDb21tYW5kT3B0aW9ucyB7XG4gIGFsbEFnZW50c0xhYmVsOiBzdHJpbmc7XG4gIG1hcE91dHB1dD86IChhZ2VudDogQWdlbnROYW1lLCBvdXRwdXQ6IHN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5jb25zdCBERUZBVUxUX0FMTF9BR0VOVF9DT01NQU5EX09QVElPTlM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7IGFsbEFnZW50c0xhYmVsOiAnYWdlbnRzJyB9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWxsQWdlbnRDb21tYW5kcyhcbiAgcHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4sXG4gIG9wdGlvbnM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSBERUZBVUxUX0FMTF9BR0VOVF9DT01NQU5EX09QVElPTlNcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc29sdmVkUHJvbXB0ID0gYXdhaXQgcHJvbXB0O1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKHdhaXRNZXNzYWdlRm9yKG9wdGlvbnMuYWxsQWdlbnRzTGFiZWwpKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGFnZW50T3V0cHV0c1dpdGhTa2lwcGVkUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgQUdFTlRfTkFNRVMubWFwKGFzeW5jIChhZ2VudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgcmVzb2x2ZWRQcm9tcHQsIHtcbiAgICAgICAgICAgIHdhaXRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCB0cmltbWVkT3V0cHV0ID0gb3V0cHV0LnRyaW0oKTtcbiAgICAgICAgICBjb25zdCBtYXBwZWRPdXRwdXQgPSBvcHRpb25zLm1hcE91dHB1dD8uKGFnZW50LCB0cmltbWVkT3V0cHV0KTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5tYXBPdXRwdXQgJiYgbWFwcGVkT3V0cHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdEFnZW50U2VjdGlvbihhZ2VudCwgbWFwcGVkT3V0cHV0ID8/IHN1bW1hcml6ZUFnZW50T3V0cHV0KGFnZW50LCB0cmltbWVkT3V0cHV0KSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBmb3JtYXRBZ2VudFNlY3Rpb24oYWdlbnQsIGFnZW50RmFpbHVyZU1lc3NhZ2UoYWdlbnQpKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIGNvbnN0IGFnZW50T3V0cHV0cyA9IGFnZW50T3V0cHV0c1dpdGhTa2lwcGVkUmVzdWx0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0ICE9PSB1bmRlZmluZWQpO1xuICAgIHJldHVybiBhZ2VudE91dHB1dHMuam9pbignXFxuXFxuJyk7XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZ2VudENvbW1hbmQoXG4gIGFnZW50OiBBZ2VudE5hbWUsXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBZ2VudENvbW1hbmRPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSwge1xuICAgIGxvZ0ZpbGVQYXRoOiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50KSxcbiAgICB3YWl0TWVzc2FnZTogb3B0aW9ucy53YWl0TWVzc2FnZSA/PyB3YWl0TWVzc2FnZUZvcihkaXNwbGF5QWdlbnROYW1lKGFnZW50KSksXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBZ2VudENvbW1hbmQoYWdlbnQ6IEFnZW50TmFtZSwgcHJvbXB0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6IHtcbiAgICAgIHJldHVybiBbJ25weCcsICctLXllcycsICdAb3BlbmFpL2NvZGV4QGxhdGVzdCcsICdleGVjJywgJy0tZGFuZ2Vyb3VzbHktYnlwYXNzLWFwcHJvdmFscy1hbmQtc2FuZGJveCcsIHByb21wdF07XG4gICAgfVxuICAgIGNhc2UgJ2NsYXVkZSc6IHtcbiAgICAgIHJldHVybiBbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdO1xuICAgIH1cbiAgICBjYXNlICdnZW1pbmknOiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAgICctcCcsXG4gICAgICAgIHByb21wdCxcbiAgICAgIF07XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5QWdlbnROYW1lKGFnZW50OiBBZ2VudE5hbWUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGFnZW50KSB7XG4gICAgY2FzZSAnY29kZXgnOiB7XG4gICAgICByZXR1cm4gJ0NvZGV4JztcbiAgICB9XG4gICAgY2FzZSAnY2xhdWRlJzoge1xuICAgICAgcmV0dXJuICdDbGF1ZGUgQ29kZSc7XG4gICAgfVxuICAgIGNhc2UgJ2dlbWluaSc6IHtcbiAgICAgIHJldHVybiAnR2VtaW5pIENMSSc7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYLnRlc3Qob3V0cHV0KTtcbn1cblxuZnVuY3Rpb24gc3VtbWFyaXplQWdlbnRPdXRwdXQoYWdlbnQ6IEFnZW50TmFtZSwgb3V0cHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAob3V0cHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBhZ2VudEZhaWx1cmVNZXNzYWdlKGFnZW50KTtcbiAgfVxuXG4gIGlmIChjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dCkpIHtcbiAgICByZXR1cm4gTk9fQ09OQ0VSTl9NRVNTQUdFO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0QWdlbnRTZWN0aW9uKGFnZW50OiBBZ2VudE5hbWUsIGJvZHk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgIyMgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX1cXG5cXG4ke2JvZHl9YDtcbn1cblxuZnVuY3Rpb24gYWdlbnRGYWlsdXJlTWVzc2FnZShhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2Rpc3BsYXlBZ2VudE5hbWUoYWdlbnQpfSBkaWQgbm90IHJldHVybiBhIHJldmlldyByZXN1bHQuYDtcbn1cblxuZnVuY3Rpb24gd2FpdE1lc3NhZ2VGb3IodGFyZ2V0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFdhaXRpbmcgZm9yICR7dGFyZ2V0fSB0byBmaW5pc2guYDtcbn1cblxuZnVuY3Rpb24gYWdlbnRMb2dGaWxlUGF0aChhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBsb2dzLyR7YWdlbnR9LSR7dGltZXN0YW1wRm9yTG9nRmlsZSgpfS5sb2dgO1xufVxuXG5mdW5jdGlvbiB0aW1lc3RhbXBGb3JMb2dGaWxlKCk6IHN0cmluZyB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IFttb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZF0gPSBbXG4gICAgbm93LmdldE1vbnRoKCkgKyAxLFxuICAgIG5vdy5nZXREYXRlKCksXG4gICAgbm93LmdldEhvdXJzKCksXG4gICAgbm93LmdldE1pbnV0ZXMoKSxcbiAgICBub3cuZ2V0U2Vjb25kcygpLFxuICBdLm1hcCh0d29EaWdpdHMpO1xuICByZXR1cm4gYCR7bW9udGh9JHtkYXl9LSR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xufVxuXG5mdW5jdGlvbiB0d29EaWdpdHModmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG59XG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyByZWFkZGlyLCByZWFkRmlsZSwgc3RhdCB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiwgcmVsYXRpdmUsIHNlcCB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBicmFjZUV4cGFuZCwgbWluaW1hdGNoIH0gZnJvbSAnbWluaW1hdGNoJztcblxuaW50ZXJmYWNlIFBhY2thZ2VKc29uIHtcbiAgZGVwZW5kZW5jaWVzPzogRGVwZW5kZW5jeU1hcDtcbiAgZGV2RGVwZW5kZW5jaWVzPzogRGVwZW5kZW5jeU1hcDtcbiAgb3B0aW9uYWxEZXBlbmRlbmNpZXM/OiBEZXBlbmRlbmN5TWFwO1xuICBwZWVyRGVwZW5kZW5jaWVzPzogRGVwZW5kZW5jeU1hcDtcbiAgd29ya3NwYWNlcz86IHN0cmluZ1tdIHwgeyBwYWNrYWdlcz86IHN0cmluZ1tdIH07XG59XG50eXBlIERlcGVuZGVuY3lNYXAgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuaW50ZXJmYWNlIFdvcmtzcGFjZUNhbmRpZGF0ZVJvb3Qge1xuICBtYXhEZXB0aD86IG51bWJlcjtcbiAgcm9vdDogc3RyaW5nO1xufVxuXG5jb25zdCBERVBFTkRFTkNZX1NFQ1RJT05TID0gWydkZXBlbmRlbmNpZXMnLCAnZGV2RGVwZW5kZW5jaWVzJywgJ3BlZXJEZXBlbmRlbmNpZXMnLCAnb3B0aW9uYWxEZXBlbmRlbmNpZXMnXSBhcyBjb25zdDtcbmNvbnN0IElHTk9SRURfRElSRUNUT1JJRVMgPSBuZXcgU2V0KFsnLmdpdCcsICdub2RlX21vZHVsZXMnXSk7XG5jb25zdCBVUERBVEVfQ09NTUFORCA9IFsnYnVuJywgJ3VwZGF0ZScsICctLWxhdGVzdCddIGFzIGNvbnN0O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlQnVuRGVwZW5kZW5jaWVzKGN3ZCA9IHByb2Nlc3MuY3dkKCkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgd29ya3NwYWNlRGlyZWN0b3JpZXMgPSBhd2FpdCBmaW5kV29ya3NwYWNlRGlyZWN0b3JpZXMoY3dkKTtcbiAgYXdhaXQgYXNzZXJ0Tm9DYXRhbG9nRGVwZW5kZW5jaWVzKGN3ZCwgd29ya3NwYWNlRGlyZWN0b3JpZXMpO1xuICBhd2FpdCB1cGRhdGVQYWNrYWdlKGN3ZCwgJ3Jvb3QnKTtcblxuICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiB3b3Jrc3BhY2VEaXJlY3Rvcmllcykge1xuICAgIGF3YWl0IHVwZGF0ZVBhY2thZ2Uoam9pbihjd2QsIGRpcmVjdG9yeSksIGRpcmVjdG9yeSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluZFdvcmtzcGFjZURpcmVjdG9yaWVzKGN3ZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBwYXR0ZXJucyA9IHdvcmtzcGFjZVBhdHRlcm5zKGF3YWl0IHJlYWRQYWNrYWdlSnNvbihjd2QpKTtcbiAgY29uc3QgZGlyZWN0b3JpZXMgPSBhd2FpdCBsaXN0V29ya3NwYWNlQ2FuZGlkYXRlRGlyZWN0b3JpZXMoY3dkLCBwYXR0ZXJucyk7XG4gIGNvbnN0IGluY2x1ZGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGV4Y2x1ZGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgY29uc3QgaXNFeGNsdXNpb24gPSBwYXR0ZXJuLnN0YXJ0c1dpdGgoJyEnKTtcbiAgICBjb25zdCBtYXRjaGVzID0gYXdhaXQgZXhwYW5kV29ya3NwYWNlUGF0dGVybihjd2QsIGRpcmVjdG9yaWVzLCBpc0V4Y2x1c2lvbiA/IHBhdHRlcm4uc2xpY2UoMSkgOiBwYXR0ZXJuKTtcbiAgICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBtYXRjaGVzKSB7XG4gICAgICBpZiAoaXNFeGNsdXNpb24pIHtcbiAgICAgICAgZXhjbHVkZWQuYWRkKGRpcmVjdG9yeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmNsdWRlZC5hZGQoZGlyZWN0b3J5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gWy4uLmluY2x1ZGVkXVxuICAgIC5maWx0ZXIoKGRpcmVjdG9yeSkgPT4gZGlyZWN0b3J5ICE9PSAnLicgJiYgIWV4Y2x1ZGVkLmhhcyhkaXJlY3RvcnkpKVxuICAgIC50b1NvcnRlZCgobGVmdCwgcmlnaHQpID0+IGxlZnQubG9jYWxlQ29tcGFyZShyaWdodCkpO1xufVxuXG5mdW5jdGlvbiB3b3Jrc3BhY2VQYXR0ZXJucyh7IHdvcmtzcGFjZXMgPSBbXSB9OiBQYWNrYWdlSnNvbik6IHN0cmluZ1tdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkod29ya3NwYWNlcykpIHtcbiAgICByZXR1cm4gd29ya3NwYWNlcztcbiAgfVxuICByZXR1cm4gd29ya3NwYWNlcy5wYWNrYWdlcyA/PyBbXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdFdvcmtzcGFjZUNhbmRpZGF0ZURpcmVjdG9yaWVzKGN3ZDogc3RyaW5nLCBwYXR0ZXJuczogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGRpcmVjdG9yaWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHJvb3RzID0gd29ya3NwYWNlQ2FuZGlkYXRlUm9vdHMocGF0dGVybnMpO1xuXG4gIGZvciAoY29uc3QgeyBtYXhEZXB0aCwgcm9vdCB9IG9mIHJvb3RzKSB7XG4gICAgaWYgKCEoYXdhaXQgaXNEaXJlY3RvcnkoY3dkLCByb290KSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBhd2FpdCBsaXN0RGlyZWN0b3JpZXMoY3dkLCByb290LCBtYXhEZXB0aCkpIHtcbiAgICAgIGRpcmVjdG9yaWVzLmFkZChkaXJlY3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbLi4uZGlyZWN0b3JpZXNdO1xufVxuXG5mdW5jdGlvbiB3b3Jrc3BhY2VDYW5kaWRhdGVSb290cyhwYXR0ZXJuczogc3RyaW5nW10pOiBXb3Jrc3BhY2VDYW5kaWRhdGVSb290W10ge1xuICBjb25zdCByb290cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgIGlmIChwYXR0ZXJuLnN0YXJ0c1dpdGgoJyEnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgcm9vdCBvZiBjYW5kaWRhdGVSb290cyhwYXR0ZXJuKSkge1xuICAgICAgcm9vdHMuc2V0KHJvb3Qucm9vdCwgcm9vdHMuaGFzKHJvb3Qucm9vdCkgPyBtZXJnZWRNYXhEZXB0aChyb290cy5nZXQocm9vdC5yb290KSwgcm9vdC5tYXhEZXB0aCkgOiByb290Lm1heERlcHRoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFsuLi5yb290cy5lbnRyaWVzKCldXG4gICAgLm1hcCgoW3Jvb3QsIG1heERlcHRoXSkgPT4gKHsgbWF4RGVwdGgsIHJvb3QgfSkpXG4gICAgLmZpbHRlcigocm9vdCkgPT4gIWhhc1BhcmVudFJvb3Qocm9vdCwgcm9vdHMpKVxuICAgIC50b1NvcnRlZCgobGVmdCwgcmlnaHQpID0+IGxlZnQucm9vdC5sb2NhbGVDb21wYXJlKHJpZ2h0LnJvb3QpKTtcbn1cblxuZnVuY3Rpb24gY2FuZGlkYXRlUm9vdHMocGF0dGVybjogc3RyaW5nKTogV29ya3NwYWNlQ2FuZGlkYXRlUm9vdFtdIHtcbiAgcmV0dXJuIGJyYWNlRXhwYW5kKG5vcm1hbGl6ZVdvcmtzcGFjZVBhdHRlcm4ocGF0dGVybikpLm1hcCgoZXhwYW5kZWRQYXR0ZXJuKSA9PiAoe1xuICAgIG1heERlcHRoOiB3b3Jrc3BhY2VQYXR0ZXJuTWF4RGVwdGgoZXhwYW5kZWRQYXR0ZXJuKSxcbiAgICByb290OiBjYW5kaWRhdGVSb290KGV4cGFuZGVkUGF0dGVybiksXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VkTWF4RGVwdGgobGVmdDogbnVtYmVyIHwgdW5kZWZpbmVkLCByaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGxlZnQgPT09IHVuZGVmaW5lZCB8fCByaWdodCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogTWF0aC5tYXgobGVmdCwgcmlnaHQpO1xufVxuXG5mdW5jdGlvbiBoYXNQYXJlbnRSb290KHJvb3Q6IFdvcmtzcGFjZUNhbmRpZGF0ZVJvb3QsIHJvb3RzOiBNYXA8c3RyaW5nLCBudW1iZXIgfCB1bmRlZmluZWQ+KTogYm9vbGVhbiB7XG4gIHJldHVybiBbLi4ucm9vdHMuZW50cmllcygpXS5zb21lKFxuICAgIChbb3RoZXJSb290LCBvdGhlck1heERlcHRoXSkgPT5cbiAgICAgIG90aGVyUm9vdCAhPT0gcm9vdC5yb290ICYmXG4gICAgICAob3RoZXJSb290ID09PSAnLicgfHwgcm9vdC5yb290LnN0YXJ0c1dpdGgoYCR7b3RoZXJSb290fS9gKSkgJiZcbiAgICAgIGNvdmVyc0RlcHRoKG90aGVyTWF4RGVwdGgsIHJvb3QubWF4RGVwdGgpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNvdmVyc0RlcHRoKHBhcmVudE1heERlcHRoOiBudW1iZXIgfCB1bmRlZmluZWQsIGNoaWxkTWF4RGVwdGg6IG51bWJlciB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcGFyZW50TWF4RGVwdGggPT09IHVuZGVmaW5lZCB8fCAoY2hpbGRNYXhEZXB0aCAhPT0gdW5kZWZpbmVkICYmIHBhcmVudE1heERlcHRoID49IGNoaWxkTWF4RGVwdGgpO1xufVxuXG5mdW5jdGlvbiBjYW5kaWRhdGVSb290KHBhdHRlcm46IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gW107XG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBwYXR0ZXJuLnNwbGl0KCcvJykpIHtcbiAgICBpZiAoc2VnbWVudCA9PT0gJycgfHwgaGFzR2xvYk1hZ2ljKHNlZ21lbnQpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgfVxuICByZXR1cm4gc2VnbWVudHMubGVuZ3RoID09PSAwID8gJy4nIDogc2VnbWVudHMuam9pbignLycpO1xufVxuXG5mdW5jdGlvbiBoYXNHbG9iTWFnaWMoc2VnbWVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvWyo/W1xcXXt9KCkhK10vLnRlc3Qoc2VnbWVudCk7XG59XG5cbmZ1bmN0aW9uIHdvcmtzcGFjZVBhdHRlcm5NYXhEZXB0aChwYXR0ZXJuOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBpZiAocGF0dGVybi5zcGxpdCgnLycpLmluY2x1ZGVzKCcqKicpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcGF0aERlcHRoKHBhdHRlcm4pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc0RpcmVjdG9yeShjd2Q6IHN0cmluZywgZGlyZWN0b3J5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJlY3RvcnlTdGF0ID0gYXdhaXQgc3RhdChqb2luKGN3ZCwgZGlyZWN0b3J5KSk7XG4gICAgcmV0dXJuIGRpcmVjdG9yeVN0YXQuaXNEaXJlY3RvcnkoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxpc3REaXJlY3Rvcmllcyhjd2Q6IHN0cmluZywgZGlyZWN0b3J5ID0gJy4nLCBtYXhEZXB0aD86IG51bWJlcik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgZGlyZWN0b3JpZXMgPSBbZGlyZWN0b3J5XTtcbiAgaWYgKG1heERlcHRoICE9PSB1bmRlZmluZWQgJiYgcGF0aERlcHRoKGRpcmVjdG9yeSkgPj0gbWF4RGVwdGgpIHtcbiAgICByZXR1cm4gZGlyZWN0b3JpZXM7XG4gIH1cblxuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihqb2luKGN3ZCwgZGlyZWN0b3J5KSwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGlmICghZW50cnkuaXNEaXJlY3RvcnkoKSB8fCBJR05PUkVEX0RJUkVDVE9SSUVTLmhhcyhlbnRyeS5uYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGREaXJlY3RvcnkgPSBqb2luKGRpcmVjdG9yeSwgZW50cnkubmFtZSkuc3BsaXQoc2VwKS5qb2luKCcvJyk7XG4gICAgaWYgKG1heERlcHRoICE9PSB1bmRlZmluZWQgJiYgcGF0aERlcHRoKGNoaWxkRGlyZWN0b3J5KSA+IG1heERlcHRoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZGlyZWN0b3JpZXMucHVzaCguLi4oYXdhaXQgbGlzdERpcmVjdG9yaWVzKGN3ZCwgY2hpbGREaXJlY3RvcnksIG1heERlcHRoKSkpO1xuICB9XG5cbiAgcmV0dXJuIGRpcmVjdG9yaWVzO1xufVxuXG5mdW5jdGlvbiBwYXRoRGVwdGgocGF0aDogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBhdGggPT09ICcuJyA/IDAgOiBwYXRoLnNwbGl0KCcvJykubGVuZ3RoO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleHBhbmRXb3Jrc3BhY2VQYXR0ZXJuKGN3ZDogc3RyaW5nLCBkaXJlY3Rvcmllczogc3RyaW5nW10sIHBhdHRlcm46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgbWF0Y2hlciA9IGdsb2JQYXR0ZXJuTWF0Y2hlcihub3JtYWxpemVXb3Jrc3BhY2VQYXR0ZXJuKHBhdHRlcm4pKTtcbiAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuXG4gIGZvciAoY29uc3QgZGlyZWN0b3J5IG9mIGRpcmVjdG9yaWVzKSB7XG4gICAgaWYgKG1hdGNoZXIoZGlyZWN0b3J5KSAmJiAoYXdhaXQgaGFzUGFja2FnZUpzb24oY3dkLCBkaXJlY3RvcnkpKSkge1xuICAgICAgbWF0Y2hlcy5wdXNoKGRpcmVjdG9yeSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVdvcmtzcGFjZVBhdHRlcm4ocGF0dGVybjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVBhdGgocGF0dGVybikucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgaWYgKG5vcm1hbGl6ZWQgPT09ICcuJykge1xuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkLnN0YXJ0c1dpdGgoJy4vJykgPyBub3JtYWxpemVkLnNsaWNlKDIpIDogbm9ybWFsaXplZDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkID0gcGF0aC5zcGxpdChzZXApLmpvaW4oJy8nKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWQgPT09ICcnID8gJy4nIDogbm9ybWFsaXplZDtcbn1cblxuZnVuY3Rpb24gZ2xvYlBhdHRlcm5NYXRjaGVyKHBhdHRlcm46IHN0cmluZyk6IChkaXJlY3Rvcnk6IHN0cmluZykgPT4gYm9vbGVhbiB7XG4gIHJldHVybiAoZGlyZWN0b3J5KSA9PiBtaW5pbWF0Y2goZGlyZWN0b3J5LCBwYXR0ZXJuLCB7IGRvdDogdHJ1ZSB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFzUGFja2FnZUpzb24oY3dkOiBzdHJpbmcsIGRpcmVjdG9yeTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUpzb25TdGF0ID0gYXdhaXQgc3RhdChqb2luKGN3ZCwgZGlyZWN0b3J5LCAncGFja2FnZS5qc29uJykpO1xuICAgIHJldHVybiBwYWNrYWdlSnNvblN0YXQuaXNGaWxlKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBhc3NlcnROb0NhdGFsb2dEZXBlbmRlbmNpZXMoY3dkOiBzdHJpbmcsIHdvcmtzcGFjZURpcmVjdG9yaWVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjYXRhbG9nRGVwZW5kZW5jaWVzID0gW107XG4gIGZvciAoY29uc3QgZGlyZWN0b3J5IG9mIFsnLicsIC4uLndvcmtzcGFjZURpcmVjdG9yaWVzXSkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKGRpcmVjdG9yeSA9PT0gJy4nID8gY3dkIDogam9pbihjd2QsIGRpcmVjdG9yeSkpO1xuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBjYXRhbG9nRGVwZW5kZW5jeU5hbWVzKHBhY2thZ2VKc29uKSkge1xuICAgICAgY2F0YWxvZ0RlcGVuZGVuY2llcy5wdXNoKGAke2RpcmVjdG9yeSA9PT0gJy4nID8gJ3Jvb3QnIDogZGlyZWN0b3J5fTogJHtkZXBlbmRlbmN5fWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYXRhbG9nRGVwZW5kZW5jaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBbXG4gICAgICAnQ2Fubm90IHNhZmVseSB1cGRhdGUgQnVuIHdvcmtzcGFjZSBkZXBlbmRlbmNpZXMgd2l0aCBjYXRhbG9nIHJlZmVyZW5jZXMuJyxcbiAgICAgICdVcGRhdGUgY2F0YWxvZyB2ZXJzaW9ucyBpbiB0aGUgcm9vdCBwYWNrYWdlLmpzb24sIHRoZW4gcnVuIGJ1biBpbnN0YWxsLicsXG4gICAgICBgQ2F0YWxvZy1tYW5hZ2VkIGRlcGVuZGVuY2llczogJHtjYXRhbG9nRGVwZW5kZW5jaWVzLmpvaW4oJywgJyl9YCxcbiAgICBdLmpvaW4oJ1xcbicpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRQYWNrYWdlSnNvbihjd2Q6IHN0cmluZyk6IFByb21pc2U8UGFja2FnZUpzb24+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gam9pbihjd2QsICdwYWNrYWdlLmpzb24nKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYWNrYWdlSnNvblBhdGgsICd1dGY4JykpIGFzIFBhY2thZ2VKc29uO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJlYWQgJHtwYWNrYWdlSnNvblBhdGh9OiAke1N0cmluZyhlcnJvcil9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2F0YWxvZ0RlcGVuZGVuY3lOYW1lcyhwYWNrYWdlSnNvbjogUGFja2FnZUpzb24pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG5hbWVzID0gW107XG4gIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBERVBFTkRFTkNZX1NFQ1RJT05TKSB7XG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gcGFja2FnZUpzb25bc2VjdGlvbl07XG4gICAgaWYgKCFkZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2ZXJzaW9uXSBvZiBPYmplY3QuZW50cmllcyhkZXBlbmRlbmNpZXMpKSB7XG4gICAgICBpZiAodmVyc2lvbi5zdGFydHNXaXRoKCdjYXRhbG9nOicpKSB7XG4gICAgICAgIG5hbWVzLnB1c2gobmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlUGFja2FnZShjd2Q6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFxuIyAke2xhYmVsfVxcbmApO1xuICBhd2FpdCBydW5Db21tYW5kKFVQREFURV9DT01NQU5ELCBjd2QpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGNvbW1hbmQ6IHJlYWRvbmx5IFtzdHJpbmcsIC4uLnN0cmluZ1tdXSwgY3dkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0sIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBjd2QsXG4gICAgc3RkaW86ICdpbmhlcml0JyxcbiAgfSk7XG5cbiAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgIHByb2Mub25jZSgnY2xvc2UnLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKGNvZGUgPT09IDApIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZWplY3QobmV3IEVycm9yKGBDb21tYW5kIGZhaWxlZCBpbiAke3JlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGN3ZCkgfHwgJy4nfTogJHtjb21tYW5kLmpvaW4oJyAnKX1gKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiLyoqXG4gKiBgYmxvY2tRdW90ZTogJ2xpdGVyYWwnYDogVXNlcyBhIHBpcGUgKGBwcm9wOiB8YCkgdG8gcmVwcmVzZW50IG11bHRpbGluZSBzdHJpbmdzLlxuICogYGxpbmVXaWR0aDogMGA6IERpc2FibGVzIGxpbmUgd3JhcHBpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCB5YW1sU3RyaW5naWZ5T3B0aW9ucyA9IHsgYmxvY2tRdW90ZTogJ2xpdGVyYWwnLCBsaW5lV2lkdGg6IDAgfSBhcyBjb25zdDtcbiIsImltcG9ydCB7IHNwYXduLCBzcGF3blN5bmMgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgc3RkZXJyIGFzIHByb2Nlc3NTdGRlcnIsIHN0ZGluIGFzIHByb2Nlc3NTdGRpbiB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNsZWVwIH0gZnJvbSAnbm9kZTp0aW1lcnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeVlhbWwgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IGNyZWF0ZVByb2Nlc3NUaW1lb3V0LCBzdHJlYW1Ub1RleHQsIHRpbWVvdXRFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHsgeWFtbFN0cmluZ2lmeU9wdGlvbnMgfSBmcm9tICcuLi95YW1sLmpzJztcblxuZXhwb3J0IHR5cGUgSnNvbk9iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFOb2RlIHtcbiAgbnVtYmVyOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUluZm8ge1xuICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4ge1xuICBub2RlczogVE5vZGVbXTtcbiAgcGFnZUluZm86IFBhZ2VJbmZvO1xufVxuXG5pbnRlcmZhY2UgUnVuQ29tbWFuZE9wdGlvbnMge1xuICBzdGRpbkRhdGE/OiBzdHJpbmc7XG4gIGFsbG93ZWRFeGl0Q29kZXM/OiBudW1iZXJbXTtcbn1cblxuY29uc3QgR0hfUkVUUllfTUFYX0FUVEVNUFRTID0gMztcbmNvbnN0IEdIX1JFVFJZX0JBU0VfREVMQVlfTVMgPSAxMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvZ3Jlc3MobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4aXRXaXRoRXJyb3IobWVzc2FnZTogc3RyaW5nLCBjb2RlID0gMSk6IG5ldmVyIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xuICBwcm9jZXNzLmV4aXQoY29kZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU3RkaW5UZXh0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChwcm9jZXNzU3RkaW4uaXNUVFkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHN0cmVhbVRvVGV4dChwcm9jZXNzU3RkaW4pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcXVpcmVkU3RkaW5UZXh0KGVycm9yTWVzc2FnZSA9ICdFcnJvcjogaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaW5wdXQgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gIGlmIChpbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIGV4aXRXaXRoRXJyb3IoZXJyb3JNZXNzYWdlLCAyKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBhbGxvd2VkRXhpdENvZGVzID0gb3B0aW9ucy5hbGxvd2VkRXhpdENvZGVzID8/IFtdO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IEdIX1JFVFJZX01BWF9BVFRFTVBUUzsgYXR0ZW1wdCArPSAxKSB7XG4gICAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICB9KTtcbiAgICBsZXQgZmFpbHVyZU1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgcmV0cnkgPSBmYWxzZTtcbiAgICBjb25zdCBwcm9jZXNzVGltZW91dCA9IGNyZWF0ZVByb2Nlc3NUaW1lb3V0KHByb2MpO1xuICAgIHRyeSB7XG4gICAgICBpZiAob3B0aW9ucy5zdGRpbkRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9jLnN0ZGluLmVuZChvcHRpb25zLnN0ZGluRGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jLnN0ZGluLmVuZCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3Rkb3V0KSxcbiAgICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyKSxcbiAgICAgICAgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgcHJvYy5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgICB9KSxcbiAgICAgIF0pO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG5cbiAgICAgIGlmIChwcm9jZXNzVGltZW91dC50aW1lZE91dCgpKSB7XG4gICAgICAgIGZhaWx1cmVNZXNzYWdlID0gdGltZW91dEVycm9yTWVzc2FnZShvdXRwdXQsIHByb2Nlc3NUaW1lb3V0LnRpbWVvdXRNcywgY29tbWFuZCk7XG4gICAgICB9IGVsc2UgaWYgKGV4aXRDb2RlID09PSAwIHx8IGFsbG93ZWRFeGl0Q29kZXMuaW5jbHVkZXMoZXhpdENvZGUpKSB7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICB9IGVsc2UgaWYgKGlzVHJhbnNpZW50R2hGYWlsdXJlKGNvbW1hbmQsIGV4aXRDb2RlLCBvdXRwdXQpICYmIGF0dGVtcHQgPCBHSF9SRVRSWV9NQVhfQVRURU1QVFMpIHtcbiAgICAgICAgcmV0cnkgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFpbHVyZU1lc3NhZ2UgPSBvdXRwdXQgfHwgYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmQuam9pbignICcpfWA7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHByb2Nlc3NUaW1lb3V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHJldHJ5KSB7XG4gICAgICBwcm9ncmVzcyhgVHJhbnNpZW50IEdpdEh1YiBDTEkgZmFpbHVyZTsgcmV0cnlpbmcuLi4gKGF0dGVtcHQgJHthdHRlbXB0fSBvZiAke0dIX1JFVFJZX01BWF9BVFRFTVBUUyAtIDF9KWApO1xuICAgICAgYXdhaXQgc2xlZXAoR0hfUkVUUllfQkFTRV9ERUxBWV9NUyAqIGF0dGVtcHQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChmYWlsdXJlTWVzc2FnZSkge1xuICAgICAgZXhpdFdpdGhFcnJvcihmYWlsdXJlTWVzc2FnZSk7XG4gICAgfVxuICB9XG4gIGV4aXRXaXRoRXJyb3IoYENvbW1hbmQgZmFpbGVkIGFmdGVyICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTfSBhdHRlbXB0czogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoKGFyZ3M6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2hBbGxvd0V4aXRDb2RlcyhcbiAgYXJnczogc3RyaW5nW10sXG4gIGFsbG93ZWRFeGl0Q29kZXM6IG51bWJlcltdLFxuICBzdGRpbkRhdGE/OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEsIGFsbG93ZWRFeGl0Q29kZXMgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UmVwb1BhcnRzKCk6IFByb21pc2U8W3N0cmluZywgc3RyaW5nXT4ge1xuICBjb25zdCBuYW1lV2l0aE93bmVyT3V0cHV0ID0gYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ25hbWVXaXRoT3duZXInLCAnLS1qcScsICcubmFtZVdpdGhPd25lciddKTtcbiAgY29uc3QgbmFtZVdpdGhPd25lciA9IG5hbWVXaXRoT3duZXJPdXRwdXQudHJpbSgpO1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gbmFtZVdpdGhPd25lci5zcGxpdCgnLycsIDIpO1xuICBpZiAoIW93bmVyIHx8ICFuYW1lKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCByZXBvc2l0b3J5Jyk7XG4gIH1cbiAgcmV0dXJuIFtvd25lciwgbmFtZV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UHJOdW1iZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5udW1iZXInXSk7XG4gIHJldHVybiBwck51bWJlci50cmltKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBncmFwaHFsPFQgZXh0ZW5kcyBKc29uT2JqZWN0PihcbiAgcXVlcnk6IHN0cmluZyxcbiAgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkPiA9IHt9XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgYXJncyA9IFsnYXBpJywgJ2dyYXBocWwnLCAnLUYnLCAncXVlcnk9QC0nXTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFycykpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy1GJywgYCR7a2V5fT0ke3ZhbHVlfWApO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGF3YWl0IGdoKGFyZ3MsIHF1ZXJ5KSkgYXMgSnNvbk9iamVjdCAmIHsgZXJyb3JzPzogQXJyYXk8eyBtZXNzYWdlPzogc3RyaW5nIH0+IH07XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlIGFzIFQ7XG4gIH1cblxuICBjb25zdCBlcnJvck1lc3NhZ2VzID0gcmVzcG9uc2UuZXJyb3JzLm1hcCgoZXJyb3IpID0+IGVycm9yLm1lc3NhZ2UgPz8gJ1Vua25vd24gR3JhcGhRTCBlcnJvcicpLmpvaW4oJ1xcbicpO1xuICBleGl0V2l0aEVycm9yKGBHcmFwaFFMIEFQSSBlcnJvcjpcXG4ke2Vycm9yTWVzc2FnZXN9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5YW1sRHVtcChkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmluZ2lmeVlhbWwoZGF0YSwgeWFtbFN0cmluZ2lmeU9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcENvcHk8VD4oZGF0YTogVCk6IFQge1xuICByZXR1cm4gc3RydWN0dXJlZENsb25lKGRhdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEF2YWlsYWJsZShjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNwYXduU3luY1NhZmUoW2NvbW1hbmQsICctLXZlcnNpb24nXSkuZXhpdENvZGUgPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGF3blN5bmNTYWZlKGNvbW1hbmQ6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiB7IGV4aXRDb2RlOiBudW1iZXI7IG91dHB1dDogc3RyaW5nIH0ge1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgaW5wdXQ6IHN0ZGluRGF0YSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBleGl0Q29kZTogcmVzdWx0LnN0YXR1cyA/PyAocmVzdWx0LmVycm9yID8gMSA6IDApLFxuICAgIG91dHB1dDogYCR7cmVzdWx0LnN0ZG91dCA/PyAnJ30ke3Jlc3VsdC5zdGRlcnIgPz8gJyd9YCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZDogc3RyaW5nW10sIGV4aXRDb2RlOiBudW1iZXIsIG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChjb21tYW5kWzBdICE9PSAnZ2gnIHx8IGV4aXRDb2RlID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIC8oSFRUUCA1MFswMjM0XVxcYnxXZSBoYWQgaXNzdWVzIHByb2R1Y2luZyB0aGUgcmVzcG9uc2UgdG8geW91ciByZXF1ZXN0KS9pLnRlc3Qob3V0cHV0KTtcbn1cbiIsImltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2xlZXAgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgeyBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgY3JlYXRlV2FpdFByb2dyZXNzLCBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5pbXBvcnQge1xuICBjb21tYW5kQXZhaWxhYmxlLFxuICBjdXJyZW50UHJOdW1iZXIsXG4gIGN1cnJlbnRSZXBvUGFydHMsXG4gIGRlZXBDb3B5LFxuICBleGl0V2l0aEVycm9yLFxuICBnaEFsbG93RXhpdENvZGVzLFxuICBncmFwaHFsLFxuICBwcm9ncmVzcyxcbiAgc3Bhd25TeW5jU2FmZSxcbiAgeWFtbER1bXAsXG59IGZyb20gJy4vc2hhcmVkLmpzJztcblxuZXhwb3J0IGNvbnN0IFRFU1RfUkVMQVRFRF9QQVRURVJOID0gL1xcYnRlc3RcXGIvaTtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyA9IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTO1xuLy8gT25lIGh1bmRyZWQgMzYtc2Vjb25kIGNoZWNrcyBwcmVzZXJ2ZXMgdGhlIG1heGltdW0gb25lLWhvdXIgQ0kgd2FpdCBidWRnZXQuXG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUyA9IDEwMDtcbmNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9NRVNTQUdFID0gJ1dhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG5leHBvcnQgY29uc3QgWkVST19USU1FU1RBTVAgPSAnMDAwMS0wMS0wMVQwMDowMDowMFonO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyA9IFtcbiAgJ2F0dGVtcHQnLFxuICAnY29uY2x1c2lvbicsXG4gICdjcmVhdGVkQXQnLFxuICAnZGF0YWJhc2VJZCcsXG4gICdkaXNwbGF5VGl0bGUnLFxuICAnZXZlbnQnLFxuICAnaGVhZEJyYW5jaCcsXG4gICdoZWFkU2hhJyxcbiAgJ2pvYnMnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrIHtcbiAgYnVja2V0Pzogc3RyaW5nO1xuICBjb21wbGV0ZWRBdD86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGV2ZW50Pzogc3RyaW5nO1xuICBsaW5rPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGFydGVkQXQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xuICB3b3JrZmxvdz86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaVJlc3VsdHMge1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYXNzOiBudW1iZXI7XG4gICAgZmFpbDogbnVtYmVyO1xuICAgIHBlbmRpbmc6IG51bWJlcjtcbiAgICBza2lwcGluZzogbnVtYmVyO1xuICAgIGNhbmNlbDogbnVtYmVyO1xuICB9O1xuICBjaGVja3M6IENoZWNrW107XG59XG5cbmV4cG9ydCB0eXBlIFdvcmtmbG93Q2xhc3NpZmljYXRpb24gPSAnZmFpbGVkJyB8ICdydW5uaW5nJyB8ICdzdWNjZXNzZnVsJztcblxuZXhwb3J0IGludGVyZmFjZSBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQge1xuICBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbjtcbiAgY2hlY2s6IENoZWNrO1xuICBjaGVja3M6IENoZWNrW107XG59XG5cbmludGVyZmFjZSBDb21wYWN0V29ya2Zsb3dSdW4ge1xuICBicmFuY2g/OiBzdHJpbmc7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGZhaWxlZF9zdGVwPzogc3RyaW5nO1xuICBqb2I/OiBzdHJpbmc7XG4gIGpvYl91cmw/OiBzdHJpbmc7XG4gIHJ1bl9pZD86IHN0cmluZztcbiAgcnVuX3VybD86IHN0cmluZztcbiAgc2hhPzogc3RyaW5nO1xuICB3b3JrZmxvdz86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93UnVuU3RlcCB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG51bWJlcj86IG51bWJlcjtcbiAgc3RhdHVzPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgV29ya2Zsb3dSdW5Kb2Ige1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBkYXRhYmFzZUlkPzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIHN0ZXBzPzogV29ya2Zsb3dSdW5TdGVwW107XG4gIHVybD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93UnVuRGV0YWlscyB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGhlYWRCcmFuY2g/OiBzdHJpbmc7XG4gIGhlYWRTaGE/OiBzdHJpbmc7XG4gIGpvYnM/OiBXb3JrZmxvd1J1bkpvYltdO1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQckNvbW1pdE5vZGUge1xuICBjb21taXQ/OiB7XG4gICAgY29tbWl0dGVkRGF0ZT86IHN0cmluZztcbiAgICBhYmJyZXZpYXRlZE9pZD86IHN0cmluZztcbiAgICBtZXNzYWdlSGVhZGxpbmU/OiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBQckNvbW1pdHNSZXNwb25zZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgIGNvbW1pdHM/OiB7XG4gICAgICAgICAgbm9kZXM/OiBQckNvbW1pdE5vZGVbXTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXRlc3RDb21taXRTdW1tYXJ5IHtcbiAgZGF0ZTogc3RyaW5nO1xuICBoYXNoOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG59XG5cbmNvbnN0IEZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiA9IC9eLio/XFx0VU5LTk9XTiBTVEVQXFx0XFxkezR9LVxcZHsyfS1cXGR7Mn1UW15aXStaXFxzKi87XG5jb25zdCBydGtBdmFpbGFibGUgPSBjb21tYW5kQXZhaWxhYmxlKCdydGsnKTtcbmNvbnN0IG5vb3AgPSAoKTogdm9pZCA9PiB7fTtcbmNvbnN0IFBSX0NPTU1JVFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWl0cyhsYXN0OiAzKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgY29tbWl0IHtcbiAgICAgICAgICAgICAgY29tbWl0dGVkRGF0ZVxuICAgICAgICAgICAgICBhYmJyZXZpYXRlZE9pZFxuICAgICAgICAgICAgICBtZXNzYWdlSGVhZGxpbmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXRlc3RQckNpUmVzdWx0cyhwck51bWJlcj86IHN0cmluZyk6IFByb21pc2U8Q2lSZXN1bHRzPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ3ByJywgJ2NoZWNrcyddO1xuICBpZiAocHJOdW1iZXIpIHtcbiAgICBhcmdzLnB1c2gocHJOdW1iZXIpO1xuICB9XG4gIGFyZ3MucHVzaCgnLS1qc29uJywgJ2J1Y2tldCxjb21wbGV0ZWRBdCxkZXNjcmlwdGlvbixldmVudCxsaW5rLG5hbWUsc3RhcnRlZEF0LHN0YXRlLHdvcmtmbG93Jyk7XG5cbiAgbGV0IGNoZWNrczogQ2hlY2tbXSA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoYXJncywgWzhdKTtcbiAgICBjaGVja3MgPSByYXcudHJpbSgpLmxlbmd0aCA+IDAgPyAoSlNPTi5wYXJzZShyYXcpIGFzIENoZWNrW10pIDogW107XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIGNoZWNrcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdW1tYXJ5OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gIGZvciAoY29uc3QgY2hlY2sgb2YgY2hlY2tzKSB7XG4gICAgY29uc3QgYnVja2V0ID0gY2hlY2suYnVja2V0ID8/ICcnO1xuICAgIHN1bW1hcnlbYnVja2V0XSA9IChzdW1tYXJ5W2J1Y2tldF0gPz8gMCkgKyAxO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdW1tYXJ5OiB7XG4gICAgICB0b3RhbDogY2hlY2tzLmxlbmd0aCxcbiAgICAgIHBhc3M6IHN1bW1hcnkucGFzcyA/PyAwLFxuICAgICAgZmFpbDogc3VtbWFyeS5mYWlsID8/IDAsXG4gICAgICBwZW5kaW5nOiBzdW1tYXJ5LnBlbmRpbmcgPz8gMCxcbiAgICAgIHNraXBwaW5nOiBzdW1tYXJ5LnNraXBwaW5nID8/IDAsXG4gICAgICBjYW5jZWw6IHN1bW1hcnkuY2FuY2VsID8/IDAsXG4gICAgfSxcbiAgICBjaGVja3MsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKFxuICBwck51bWJlcjogc3RyaW5nLFxuICBzbGVlcEZuOiAoc2Vjb25kczogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+ID0gc2xlZXBTZWNvbmRzLFxuICBsYXRlc3RDaVJlc3VsdHNGbjogKHByTnVtYmVyPzogc3RyaW5nKSA9PiBDaVJlc3VsdHMgfCBQcm9taXNlPENpUmVzdWx0cz4gPSBsYXRlc3RQckNpUmVzdWx0cyxcbiAgd3JpdGVQcm9ncmVzc0ZuOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkID0gKG1lc3NhZ2UpID0+IHByb2Nlc3NTdGRlcnIud3JpdGUobWVzc2FnZSlcbik6IFByb21pc2U8W0NpUmVzdWx0cywgbnVtYmVyLCBib29sZWFuXT4ge1xuICBsZXQgYXR0ZW1wdHMgPSAwO1xuICBsZXQgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICBsZXQgc3RvcFdhaXRQcm9ncmVzcyA9IG5vb3A7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCBjbGFzc2lmaWVkUmVzdWx0cyA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gICAgICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRSZXN1bHRzKTtcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDAgfHwgT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIGZhbHNlXTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRlbXB0cyA+PSBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTKSB7XG4gICAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgdHJ1ZV07XG4gICAgICB9XG5cbiAgICAgIGF0dGVtcHRzICs9IDE7XG4gICAgICBpZiAoYXR0ZW1wdHMgPT09IDEpIHtcbiAgICAgICAgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyhcbiAgICAgICAgICBURVNUX0NIRUNLX1dBSVRfTUVTU0FHRSxcbiAgICAgICAgICBURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgICAgICAgICB3cml0ZVByb2dyZXNzRm5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHNsZWVwRm4oVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMpO1xuICAgICAgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0czogQ2lSZXN1bHRzKTogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiB7XG4gIGNvbnN0IGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93OiBSZWNvcmQ8c3RyaW5nLCBDaGVja1tdPiA9IHt9O1xuICBmb3IgKGNvbnN0IGNoZWNrIG9mIGNpUmVzdWx0cy5jaGVja3MpIHtcbiAgICBjb25zdCB3b3JrZmxvd0tleSA9IGNoZWNrLndvcmtmbG93IHx8IGNoZWNrLm5hbWUgfHwgJ3Vua25vd25fd29ya2Zsb3cnO1xuICAgIGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93W3dvcmtmbG93S2V5XSA/Pz0gW107XG4gICAgbGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3dbd29ya2Zsb3dLZXldLnB1c2goY2hlY2spO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdykubWFwKChbd29ya2Zsb3dLZXksIGNoZWNrc10pID0+IHtcbiAgICAgIGNvbnN0IGxhdGVzdEF0dGVtcHRDaGVja3MgPSBsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyhjaGVja3MpO1xuICAgICAgY29uc3QgZmlyc3RDaGVjayA9IGxhdGVzdEF0dGVtcHRDaGVja3NbMF07XG4gICAgICBpZiAoIWZpcnN0Q2hlY2spIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IG5vIGNoZWNrcyBmb3VuZCBmb3Igd29ya2Zsb3cgJHt3b3JrZmxvd0tleX1gKTtcbiAgICAgIH1cbiAgICAgIGxldCBsYXRlc3RDaGVjayA9IGZpcnN0Q2hlY2s7XG4gICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIGxhdGVzdEF0dGVtcHRDaGVja3MpIHtcbiAgICAgICAgaWYgKGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKSA+IGxhdGVzdENoZWNrVGltZXN0YW1wKGxhdGVzdENoZWNrKSkge1xuICAgICAgICAgIGxhdGVzdENoZWNrID0gY2hlY2s7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgd29ya2Zsb3dLZXksXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2lmaWNhdGlvbjogd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihsYXRlc3RBdHRlbXB0Q2hlY2tzKSxcbiAgICAgICAgICBjaGVjazogbGF0ZXN0Q2hlY2ssXG4gICAgICAgICAgY2hlY2tzOiBsYXRlc3RBdHRlbXB0Q2hlY2tzLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKFxuICBjbGFzc2lmaWVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PlxuKTogW1JlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4sIFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5dIHtcbiAgY29uc3QgZmFpbGVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuICBjb25zdCBydW5uaW5nUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuXG4gIGZvciAoY29uc3QgW3dvcmtmbG93S2V5LCByZXN1bHRdIG9mIE9iamVjdC5lbnRyaWVzKGNsYXNzaWZpZWRSZXN1bHRzKSkge1xuICAgIGlmIChyZXN1bHQuY2xhc3NpZmljYXRpb24gPT09ICdmYWlsZWQnKSB7XG4gICAgICBmYWlsZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA9IHJlc3VsdDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAncnVubmluZycgJiYgcmVzdWx0LmNoZWNrcy5zb21lKChjaGVjaykgPT4gdGVzdFJlbGF0ZWRDaGVjayhjaGVjaykpKSB7XG4gICAgICBydW5uaW5nUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjazogQ2hlY2sgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsaW5rID0gY2hlY2s/Lmxpbms7XG4gIGlmICghbGluaykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGxpbmsubWF0Y2goL1xcL2FjdGlvbnNcXC9ydW5zXFwvKFxcZCspLyk/LlsxXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdvcmtmbG93UnVuKHJ1bklkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkPiB7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcnVuSnNvbiA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1qc29uJywgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTLmpvaW4oJywnKV0sIFsxXSk7XG4gIGlmIChydW5Kc29uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShydW5Kc29uKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgcHJvY2Vzc1N0ZGVyci53cml0ZShgV2FybmluZzogQ291bGQgbm90IHBhcnNlIEpTT04gZm9yIHdvcmtmbG93IHJ1biAke3J1bklkfTogJHtlcnJvci5tZXNzYWdlfVxcbmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrczogQ2hlY2tbXSk6IENoZWNrW10ge1xuICBjb25zdCBncm91cHMgPSBuZXcgTWFwPHN0cmluZywgQ2hlY2tbXT4oKTtcbiAgZm9yIChjb25zdCBjaGVjayBvZiBjaGVja3MpIHtcbiAgICBjb25zdCBrZXkgPSB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2spO1xuICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBzLmdldChrZXkpO1xuICAgIGlmIChncm91cCkge1xuICAgICAgZ3JvdXAucHVzaChjaGVjayk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZ3JvdXBzLnNldChrZXksIFtjaGVja10pO1xuICB9XG5cbiAgbGV0IGxhdGVzdEdyb3VwOiBDaGVja1tdID0gW107XG4gIGZvciAoY29uc3QgY3VycmVudEdyb3VwIG9mIGdyb3Vwcy52YWx1ZXMoKSkge1xuICAgIGlmIChsYXRlc3RHcm91cC5sZW5ndGggPT09IDApIHtcbiAgICAgIGxhdGVzdEdyb3VwID0gY3VycmVudEdyb3VwO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGxhdGVzdEdyb3VwVGltZXN0YW1wKGN1cnJlbnRHcm91cCkgPiBsYXRlc3RHcm91cFRpbWVzdGFtcChsYXRlc3RHcm91cCkpIHtcbiAgICAgIGxhdGVzdEdyb3VwID0gY3VycmVudEdyb3VwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGF0ZXN0R3JvdXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIHJldHVybiBydW5JZCA/IGBydW46JHtydW5JZH1gIDogJ3Vua25vd25fcnVuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24oY2hlY2tzOiBDaGVja1tdKTogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB7XG4gIGNvbnN0IGJ1Y2tldHMgPSBjaGVja3MubWFwKChjaGVjaykgPT4gY2hlY2suYnVja2V0ID8/ICcnKTtcbiAgaWYgKGJ1Y2tldHMuc29tZSgoYnVja2V0KSA9PiAhWydwYXNzJywgJ3NraXBwaW5nJywgJ3BlbmRpbmcnXS5pbmNsdWRlcyhidWNrZXQpKSkge1xuICAgIHJldHVybiAnZmFpbGVkJztcbiAgfVxuICBpZiAoYnVja2V0cy5pbmNsdWRlcygncGVuZGluZycpKSB7XG4gICAgcmV0dXJuICdydW5uaW5nJztcbiAgfVxuICByZXR1cm4gJ3N1Y2Nlc3NmdWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgdGltZXN0YW1wID0gY2hlY2suY29tcGxldGVkQXQ7XG4gIGlmICghdGltZXN0YW1wIHx8IHRpbWVzdGFtcCA9PT0gWkVST19USU1FU1RBTVApIHtcbiAgICByZXR1cm4gY2hlY2suc3RhcnRlZEF0ID8/ICcnO1xuICB9XG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0UmVsYXRlZENoZWNrKGNoZWNrOiBDaGVjayk6IGJvb2xlYW4ge1xuICByZXR1cm4gW2NoZWNrLm5hbWUsIGNoZWNrLndvcmtmbG93XS5zb21lKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBURVNUX1JFTEFURURfUEFUVEVSTi50ZXN0KHZhbHVlKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcFNlY29uZHMoc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNsZWVwKHNlY29uZHMgKiAxMDAwKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrUHJDaSgpOiBQcm9taXNlPHsgb3V0cHV0OiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfT4ge1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuICBjb25zdCBsYXRlc3RDb21taXRzID0gYXdhaXQgbGF0ZXN0UHJDb21taXRTdW1tYXJpZXMocHJOdW1iZXIpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyBsYXRlc3QgQ0kgcmVzdWx0cy4uLicpO1xuICBjb25zdCBbY2lSZXN1bHRzLCB3YWl0QXR0ZW1wdHMsIHdhaXRUaW1lZE91dF0gPSBhd2FpdCB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKHByTnVtYmVyKTtcbiAgY29uc3QgY2xhc3NpZmllZExhdGVzdCA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZExhdGVzdCk7XG5cbiAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgc3VtbWFyeTogZGVlcENvcHkoY2lSZXN1bHRzLnN1bW1hcnkpLFxuICAgIHdhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrczogd2FpdEF0dGVtcHRzID4gMCxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0czogd2FpdEF0dGVtcHRzLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dDogd2FpdFRpbWVkT3V0LFxuICAgIGxhdGVzdENvbW1pdHMsXG4gIH07XG5cbiAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLmZhaWxlZF93b3JrZmxvd3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKGZhaWxlZFJlc3VsdHMpLm1hcChhc3luYyAoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBhY3RXb3JrZmxvdyA9IGF3YWl0IGNvbXBhY3RXb3JrZmxvd1Jlc3VsdCh3b3JrZmxvd0tleSwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb21wYWN0V29ya2Zsb3csXG4gICAgICAgICAgLi4uYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMoYXdhaXQgZmFpbGVkV29ya2Zsb3dMb2cocmVzdWx0LmNoZWNrKSksXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykubGVuZ3RoID4gMCkge1xuICAgIHBheWxvYWQudGVzdF93b3JrZmxvd19vdXRwdXQgPSAnVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG4gICAgcGF5bG9hZC5ydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJ1bm5pbmdSZXN1bHRzKS5tYXAoKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4gY29tcGFjdFdvcmtmbG93UmVzdWx0KHdvcmtmbG93S2V5LCByZXN1bHQpKVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIHJldHVybiB7IG91dHB1dDogc3VjY2Vzc2Z1bENpT3V0cHV0KGxhdGVzdENvbW1pdHMpLCBleGl0Q29kZTogMCB9O1xufVxuXG5mdW5jdGlvbiBsYXRlc3RHcm91cFRpbWVzdGFtcChjaGVja3M6IENoZWNrW10pOiBzdHJpbmcge1xuICBsZXQgbGF0ZXN0ID0gJyc7XG4gIGZvciAoY29uc3QgY2hlY2sgb2YgY2hlY2tzKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spO1xuICAgIGlmICh0aW1lc3RhbXAgPiBsYXRlc3QpIHtcbiAgICAgIGxhdGVzdCA9IHRpbWVzdGFtcDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxhdGVzdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGF0ZXN0UHJDb21taXRTdW1tYXJpZXMocHJOdW1iZXI6IHN0cmluZyk6IFByb21pc2U8TGF0ZXN0Q29tbWl0U3VtbWFyeVtdPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDxQckNvbW1pdHNSZXNwb25zZT4oUFJfQ09NTUlUU19RVUVSWSwge1xuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBOdW1iZXIocHJOdW1iZXIpLFxuICB9KTtcblxuICByZXR1cm4gKHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5jb21taXRzPy5ub2RlcyA/PyBbXSlcbiAgICAuZmxhdE1hcCgobm9kZSkgPT4ge1xuICAgICAgY29uc3QgZGF0ZSA9IHN0cmluZ09yVW5kZWZpbmVkKG5vZGUuY29tbWl0Py5jb21taXR0ZWREYXRlKTtcbiAgICAgIGNvbnN0IGhhc2ggPSBzdHJpbmdPclVuZGVmaW5lZChub2RlLmNvbW1pdD8uYWJicmV2aWF0ZWRPaWQpO1xuICAgICAgY29uc3QgdGl0bGUgPSBzdHJpbmdPclVuZGVmaW5lZChub2RlLmNvbW1pdD8ubWVzc2FnZUhlYWRsaW5lKTtcbiAgICAgIHJldHVybiBkYXRlICYmIGhhc2ggJiYgdGl0bGUgPyBbeyBkYXRlLCBoYXNoLCB0aXRsZSB9XSA6IFtdO1xuICAgIH0pXG4gICAgLnRvUmV2ZXJzZWQoKTtcbn1cblxuZnVuY3Rpb24gc3VjY2Vzc2Z1bENpT3V0cHV0KGxhdGVzdENvbW1pdHM6IExhdGVzdENvbW1pdFN1bW1hcnlbXSk6IHN0cmluZyB7XG4gIHJldHVybiBgQWxsIENJIHdvcmtmbG93cyBwYXNzZWQuXG4ke2Zvcm1hdExhdGVzdENvbW1pdFNlY3Rpb24obGF0ZXN0Q29tbWl0cyl9YDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TGF0ZXN0Q29tbWl0U2VjdGlvbihsYXRlc3RDb21taXRzOiBMYXRlc3RDb21taXRTdW1tYXJ5W10pOiBzdHJpbmcge1xuICBpZiAobGF0ZXN0Q29tbWl0cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ0xhdGVzdCBjb21taXRzOiB1bmF2YWlsYWJsZS5cXG4nO1xuICB9XG5cbiAgcmV0dXJuIHlhbWxEdW1wKHsgbGF0ZXN0Q29tbWl0cyB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcGFjdFdvcmtmbG93UmVzdWx0KFxuICB3b3JrZmxvd0tleTogc3RyaW5nLFxuICByZXN1bHQ6IENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdFxuKTogUHJvbWlzZTx7IGNsYXNzaWZpY2F0aW9uOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uIH0gJiBDb21wYWN0V29ya2Zsb3dSdW4+IHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhyZXN1bHQuY2hlY2spO1xuICBjb25zdCBydW4gPSAoYXdhaXQgd29ya2Zsb3dSdW4ocnVuSWQpKSBhcyBXb3JrZmxvd1J1bkRldGFpbHMgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGZhaWxlZEpvYiA9IGZhaWxlZFdvcmtmbG93UnVuSm9iKHJ1biwgc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLm5hbWUpKTtcbiAgcmV0dXJuIHtcbiAgICBjbGFzc2lmaWNhdGlvbjogcmVzdWx0LmNsYXNzaWZpY2F0aW9uLFxuICAgIHdvcmtmbG93OiB3b3JrZmxvd0tleSxcbiAgICBqb2I6IHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5uYW1lKSxcbiAgICBqb2JfdXJsOiBzdHJpbmdPclVuZGVmaW5lZChmYWlsZWRKb2I/LnVybCksXG4gICAgZmFpbGVkX3N0ZXA6IGZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUoZmFpbGVkSm9iKSxcbiAgICBydW5faWQ6IHJ1bklkLFxuICAgIHJ1bl91cmw6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8udXJsKSA/PyBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2subGluayksXG4gICAgYnJhbmNoOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmhlYWRCcmFuY2gpLFxuICAgIHNoYTogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5oZWFkU2hhKSxcbiAgICBjb25jbHVzaW9uOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmNvbmNsdXNpb24pLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmYWlsZWRXb3JrZmxvd0xvZyhjaGVjazogQ2hlY2spOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrKTtcbiAgaWYgKCFydW5JZCkge1xuICAgIHJldHVybiAnRmFpbGVkIGxhdGVzdCByZXN1bHQgaGFzIG5vIEdpdEh1YiBBY3Rpb25zIHJ1biBsaW5rLic7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1sb2ctZmFpbGVkJ10sIFsxXSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzKGxvZzogc3RyaW5nKToge1xuICBmYWlsZWRfbG9nOiBzdHJpbmc7XG59IHtcbiAgcmV0dXJuIHtcbiAgICBmYWlsZWRfbG9nOiByZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyhsb2cpLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyhsb2c6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNhbml0aXplZElucHV0ID0gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMobG9nKSk7XG4gIGlmICghcnRrQXZhaWxhYmxlKSB7XG4gICAgcmV0dXJuIHNhbml0aXplZElucHV0O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jU2FmZShbJ3J0aycsICdsb2cnXSwgc2FuaXRpemVkSW5wdXQpO1xuICByZXR1cm4gcmVzdWx0LmV4aXRDb2RlID09PSAwICYmIHJlc3VsdC5vdXRwdXQudHJpbSgpLmxlbmd0aCA+IDBcbiAgICA/IHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2cocmVzdWx0Lm91dHB1dClcbiAgICA6IHNhbml0aXplZElucHV0O1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKGxvZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGxvZ1xuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnJlcGxhY2UoRkFJTEVEX0xPR19MSU5FX1BSRUZJWF9QQVRURVJOLCAnJykpXG4gICAgLmpvaW4oJ1xcbicpXG4gICAgLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nT3JVbmRlZmluZWQodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93UnVuSm9iKFxuICBydW46IFdvcmtmbG93UnVuRGV0YWlscyB8IHVuZGVmaW5lZCxcbiAgam9iTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBXb3JrZmxvd1J1bkpvYiB8IHVuZGVmaW5lZCB7XG4gIGlmICghcnVuPy5qb2JzIHx8IHJ1bi5qb2JzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLm5hbWUgPT09IGpvYk5hbWUpID8/XG4gICAgcnVuLmpvYnMuZmluZCgoam9iKSA9PiBqb2IuY29uY2x1c2lvbiA9PT0gJ2ZhaWx1cmUnKSA/P1xuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCcpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUoam9iOiBXb3JrZmxvd1J1bkpvYiB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICgham9iPy5zdGVwcyB8fCBqb2Iuc3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgam9iLnN0ZXBzLmZpbmQoKHN0ZXApID0+IHN0ZXAuY29uY2x1c2lvbiA9PT0gJ2ZhaWx1cmUnKT8ubmFtZSA/P1xuICAgIGpvYi5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCcpPy5uYW1lXG4gICk7XG59XG4iLCJpbXBvcnQgeyBydW5Db21tYW5kV2l0aFByb2dyZXNzIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRCYXNlQnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCgpKSA/PyAoYXdhaXQgY3VycmVudERlZmF1bHRCcmFuY2goKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50RGVmYXVsdEJyYW5jaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkZWZhdWx0QnJhbmNoID0gYXdhaXQgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhbXG4gICAgJ2doJyxcbiAgICAncmVwbycsXG4gICAgJ3ZpZXcnLFxuICAgICctLWpzb24nLFxuICAgICdkZWZhdWx0QnJhbmNoUmVmJyxcbiAgICAnLS10ZW1wbGF0ZScsXG4gICAgJ3t7LmRlZmF1bHRCcmFuY2hSZWYubmFtZX19JyxcbiAgXSk7XG4gIHJldHVybiByZXF1aXJlTm9uRW1wdHkoZGVmYXVsdEJyYW5jaC50cmltKCksICdFcnJvcjogY291bGQgbm90IGRldGVybWluZSB0aGUgZGVmYXVsdCBicmFuY2gnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGJhc2VCcmFuY2hPdXRwdXQgPSBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFtcbiAgICAgICdnaCcsXG4gICAgICAncHInLFxuICAgICAgJ3ZpZXcnLFxuICAgICAgJy0tanNvbicsXG4gICAgICAnYmFzZVJlZk5hbWUnLFxuICAgICAgJy0tdGVtcGxhdGUnLFxuICAgICAgJ3t7LmJhc2VSZWZOYW1lfX0nLFxuICAgIF0pO1xuICAgIGNvbnN0IGJhc2VCcmFuY2ggPSBiYXNlQnJhbmNoT3V0cHV0LnRyaW0oKTtcbiAgICByZXR1cm4gYmFzZUJyYW5jaC5sZW5ndGggPiAwID8gYmFzZUJyYW5jaCA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKGVycm9yKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gL25vIHB1bGwgcmVxdWVzdHM/IGZvdW5kIGZvciBicmFuY2gvaS50ZXN0KFN0cmluZyhlcnJvcikpO1xufVxuXG5mdW5jdGlvbiByZXF1aXJlTm9uRW1wdHkodmFsdWU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuIiwiaW1wb3J0IHsgaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7XG4gIGN1cnJlbnRQck51bWJlcixcbiAgY3VycmVudFJlcG9QYXJ0cyxcbiAgZXhpdFdpdGhFcnJvcixcbiAgZ2hBbGxvd0V4aXRDb2RlcyxcbiAgZ3JhcGhxbCxcbiAgdHlwZSBKc29uT2JqZWN0LFxuICB0eXBlIE1lc3NhZ2UsXG4gIHR5cGUgTWVzc2FnZUNvbm5lY3Rpb24sXG4gIHR5cGUgTWV0YWRhdGFOb2RlLFxuICBwcm9ncmVzcyxcbiAgeWFtbER1bXAsXG59IGZyb20gJy4vc2hhcmVkLmpzJztcblxuaW50ZXJmYWNlIElzc3VlTWVzc2FnZUNvbW1lbnROb2RlIHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgUHJSZXZpZXdOb2RlIHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIHN0YXRlPzogc3RyaW5nIHwgbnVsbDtcbiAgc3VibWl0dGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59XG5cbmludGVyZmFjZSBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgIGNvbW1lbnRzPzogTWVzc2FnZUNvbm5lY3Rpb248SXNzdWVNZXNzYWdlQ29tbWVudE5vZGU+O1xuICAgICAgICByZXZpZXdzPzogTWVzc2FnZUNvbm5lY3Rpb248UHJSZXZpZXdOb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIElzc3VlTWVzc2FnZXNSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Qge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBpc3N1ZT86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59XG5cbmludGVyZmFjZSBQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgcHVsbFJlcXVlc3Q/OiBNZXRhZGF0YU5vZGU7XG4gICAgfTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIElzc3VlTWV0YWRhdGFSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Qge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBpc3N1ZT86IE1ldGFkYXRhTm9kZTtcbiAgICB9O1xuICB9O1xufVxuXG5jb25zdCBJU1NVRV9NRVNTQUdFU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgaXNzdWUobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IElTU1VFX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgaXNzdWUobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIG51bWJlclxuICAgICAgICB0aXRsZVxuICAgICAgICB1cmxcbiAgICAgICAgYm9keVxuICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9DT01NRU5UU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIG51bWJlclxuICAgICAgICB0aXRsZVxuICAgICAgICB1cmxcbiAgICAgICAgYm9keVxuICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9SRVZJRVdTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgc3VibWl0dGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSXNzdWVOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2UsICdpc3N1ZScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUHJOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2UsICdwdWxsIHJlcXVlc3QnKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBpc3N1ZU1lc3NhZ2VzKG93bmVyLCBuYW1lLCBub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZU51bWJlcikpO1xuICBwcm9ncmVzcyhgRmV0Y2hlZCBpc3N1ZSAjJHtpc3N1ZS5udW1iZXJ9IG1lc3NhZ2VzLmApO1xuICByZXR1cm4geWFtbER1bXAoeyBpc3N1ZSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJNZXNzYWdlcyhwck51bWJlcj86IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc29sdmVkUHJOdW1iZXIgPSBwck51bWJlciA9PT0gdW5kZWZpbmVkID8gYXdhaXQgY3VycmVudFByTnVtYmVyKCkgOiBub3JtYWxpemVQck51bWJlcihwck51bWJlcik7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHJlc29sdmVkUHJOdW1iZXIpO1xuICBwcm9ncmVzcyhgRmV0Y2hlZCBwdWxsIHJlcXVlc3QgIyR7cHVsbFJlcXVlc3QubnVtYmVyfSBtZXNzYWdlcy5gKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcHVsbF9yZXF1ZXN0OiBwdWxsUmVxdWVzdCB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBwck51bWJlck91dHB1dCA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydwcicsICd2aWV3JywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcubnVtYmVyJ10sIFsxXSk7XG4gIGNvbnN0IHByTnVtYmVyID0gcHJOdW1iZXJPdXRwdXQudHJpbSgpO1xuICBpZiAoaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKHByTnVtYmVyT3V0cHV0KSB8fCAhL15cXGQrJC8udGVzdChwck51bWJlcikpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocHJOdW1iZXIpO1xuICByZXR1cm4geWFtbER1bXAoeyBwdWxsX3JlcXVlc3Q6IHB1bGxSZXF1ZXN0IH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICByZXR1cm4gYXdhaXQgcHJNZXNzYWdlcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyLCBsYWJlbDogJ2lzc3VlJyB8ICdwdWxsIHJlcXVlc3QnKTogc3RyaW5nIHtcbiAgY29uc3QgcmVmZXJlbmNlVGV4dCA9IFN0cmluZyhyZWZlcmVuY2UpLnRyaW0oKTtcbiAgaWYgKHJlZmVyZW5jZVRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6ICR7bGFiZWx9IHJlZmVyZW5jZSBpcyByZXF1aXJlZGAsIDIpO1xuICB9XG5cbiAgaWYgKC9eXFxkKyQvLnRlc3QocmVmZXJlbmNlVGV4dCkpIHtcbiAgICByZXR1cm4gcmVmZXJlbmNlVGV4dDtcbiAgfVxuXG4gIGNvbnN0IGtpbmRTZWdtZW50ID0gbGFiZWwgPT09ICdpc3N1ZScgPyAnaXNzdWVzJyA6ICdwdWxsJztcbiAgY29uc3QgbWF0Y2ggPSByZWZlcmVuY2VUZXh0Lm1hdGNoKFxuICAgIG5ldyBSZWdFeHAoYF5odHRwcz86Ly8oPzp3d3dcXFxcLik/Z2l0aHViXFxcXC5jb20vW14vXSsvW14vXSsvJHtraW5kU2VnbWVudH0vKFxcXFxkKykoPzovfCQpYClcbiAgKTtcbiAgaWYgKG1hdGNoPy5bMV0pIHtcbiAgICByZXR1cm4gbWF0Y2hbMV07XG4gIH1cblxuICBleGl0V2l0aEVycm9yKGBFcnJvcjogZXhwZWN0ZWQgYSBHaXRIdWIgJHtsYWJlbH0gbnVtYmVyIG9yIFVSTCwgcmVjZWl2ZWQgXCIke3JlZmVyZW5jZVRleHR9XCJgLCAyKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNzdWVNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPElzc3VlTWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgbm91bjogJ2lzc3VlJyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZSxcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgSXNzdWVNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX01FU1NBR0VTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlPy5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgLi4uaXNzdWUsIG1lc3NhZ2VzIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIG5vdW46ICdwdWxsIHJlcXVlc3QnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0LFxuICB9KTtcbiAgY29uc3QgW2lzc3VlQ29tbWVudHMsIHJldmlld3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHBySXNzdWVDb21tZW50cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICAgIHByUmV2aWV3cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnB1bGxSZXF1ZXN0LFxuICAgIG1lc3NhZ2VzOiBbLi4uaXNzdWVDb21tZW50cywgLi4ucmV2aWV3c10udG9Tb3J0ZWQoY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdChsZWZ0OiBNZXNzYWdlLCByaWdodDogTWVzc2FnZSk6IG51bWJlciB7XG4gIGNvbnN0IGxlZnRDcmVhdGVkQXQgPSB0eXBlb2YgbGVmdC5jcmVhdGVkQXQgPT09ICdzdHJpbmcnID8gbGVmdC5jcmVhdGVkQXQgOiAnJztcbiAgY29uc3QgcmlnaHRDcmVhdGVkQXQgPSB0eXBlb2YgcmlnaHQuY3JlYXRlZEF0ID09PSAnc3RyaW5nJyA/IHJpZ2h0LmNyZWF0ZWRBdCA6ICcnO1xuICByZXR1cm4gbGVmdENyZWF0ZWRBdC5sb2NhbGVDb21wYXJlKHJpZ2h0Q3JlYXRlZEF0KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJJc3N1ZUNvbW1lbnRzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIHJldHVybiBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlLCBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfQ09NTUVOVFNfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LmNvbW1lbnRzLFxuICAgIG1hcE5vZGU6IGNvbW1lbnRNZXNzYWdlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJSZXZpZXdzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIHJldHVybiBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPFByUmV2aWV3Tm9kZSwgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX1JFVklFV1NfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LnJldmlld3MsXG4gICAgbWFwTm9kZTogcmV2aWV3TWVzc2FnZSxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlTWVzc2FnZXM8VE5vZGUsIFRSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Q+KGNvbmZpZzoge1xuICBxdWVyeTogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2U6IFRSZXNwb25zZSkgPT4gTWVzc2FnZUNvbm5lY3Rpb248VE5vZGU+IHwgdW5kZWZpbmVkO1xuICBtYXBOb2RlOiAobm9kZTogVE5vZGUpID0+IE1lc3NhZ2U7XG59KTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgbGV0IGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb25zdCBtZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25maWcuc2VsZWN0Q29ubmVjdGlvbihcbiAgICAgIGF3YWl0IGdyYXBocWw8VFJlc3BvbnNlPihjb25maWcucXVlcnksIHtcbiAgICAgICAgb3duZXI6IGNvbmZpZy5vd25lcixcbiAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICAgIG51bWJlcjogTnVtYmVyKGNvbmZpZy5udW1iZXIpLFxuICAgICAgICBjdXJzb3IsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgIHJldHVybiBtZXNzYWdlcztcbiAgICB9XG5cbiAgICBtZXNzYWdlcy5wdXNoKC4uLmNvbm5lY3Rpb24ubm9kZXMubWFwKGNvbmZpZy5tYXBOb2RlKS5maWx0ZXIoaGFzTWVzc2FnZUJvZHkpKTtcblxuICAgIGlmICghY29ubmVjdGlvbi5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cbiAgICBjdXJzb3IgPSBjb25uZWN0aW9uLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hNZXRhZGF0YTxUUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0Pihjb25maWc6IHtcbiAgcXVlcnk6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZyB8IG51bWJlcjtcbiAgbm91bjogc3RyaW5nO1xuICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlOiBUUmVzcG9uc2UpID0+IE1ldGFkYXRhTm9kZSB8IHVuZGVmaW5lZDtcbn0pOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBjb25maWcuc2VsZWN0TWV0YWRhdGEoXG4gICAgYXdhaXQgZ3JhcGhxbDxUUmVzcG9uc2U+KGNvbmZpZy5xdWVyeSwge1xuICAgICAgb3duZXI6IGNvbmZpZy5vd25lcixcbiAgICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgICAgbnVtYmVyOiBOdW1iZXIoY29uZmlnLm51bWJlciksXG4gICAgfSlcbiAgKTtcblxuICBpZiAoIW1ldGFkYXRhKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgJHtjb25maWcubm91bn0gIyR7Y29uZmlnLm51bWJlcn0gaW4gJHtjb25maWcub3duZXJ9LyR7Y29uZmlnLm5hbWV9LmApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBudW1iZXI6IG1ldGFkYXRhLm51bWJlcixcbiAgICB0aXRsZTogbWV0YWRhdGEudGl0bGUsXG4gICAgdXJsOiBtZXRhZGF0YS51cmwsXG4gICAgYXV0aG9yOiBtZXRhZGF0YS5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBib2R5OiBtZXRhZGF0YS5ib2R5ID8/ICcnLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21tZW50TWVzc2FnZShjb21tZW50OiBJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSk6IE1lc3NhZ2Uge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdjb21tZW50JyxcbiAgICBhdXRob3I6IGNvbW1lbnQuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiBjb21tZW50LmNyZWF0ZWRBdCxcbiAgICB1cmw6IGNvbW1lbnQudXJsLFxuICAgIGJvZHk6IGNvbW1lbnQuYm9keSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmV2aWV3TWVzc2FnZShyZXZpZXc6IFByUmV2aWV3Tm9kZSk6IE1lc3NhZ2Uge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdyZXZpZXcnLFxuICAgIGF1dGhvcjogcmV2aWV3LmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIHN0YXRlOiByZXZpZXcuc3RhdGUgPz8gdW5kZWZpbmVkLFxuICAgIGNyZWF0ZWRBdDogcmV2aWV3LnN1Ym1pdHRlZEF0ID8/IHVuZGVmaW5lZCxcbiAgICB1cmw6IHJldmlldy51cmwsXG4gICAgYm9keTogcmV2aWV3LmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc01lc3NhZ2VCb2R5KG1lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBtZXNzYWdlLmJvZHkgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2UuYm9keS5sZW5ndGggPiAwO1xufVxuIiwiaW1wb3J0IHsgY3VycmVudFByTnVtYmVyLCBleGl0V2l0aEVycm9yLCBnaCwgcHJvZ3Jlc3MsIHJ1bkNvbW1hbmQsIHlhbWxEdW1wIH0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5Qck9wdGlvbnMge1xuICBib2R5Pzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVQck9wdGlvbnMge1xuICBib2R5OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuUHIoeyBib2R5LCB0aXRsZSB9OiBPcGVuUHJPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBoZWFkT3V0cHV0ID0gYXdhaXQgcnVuQ29tbWFuZChbJ2dpdCcsICdicmFuY2gnLCAnLS1zaG93LWN1cnJlbnQnXSk7XG4gIGNvbnN0IGhlYWQgPSBoZWFkT3V0cHV0LnRyaW0oKTtcbiAgY29uc3QgYmFzZU91dHB1dCA9IGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICdkZWZhdWx0QnJhbmNoUmVmJywgJy0tanEnLCAnLmRlZmF1bHRCcmFuY2hSZWYubmFtZSddKTtcbiAgY29uc3QgYmFzZSA9IGJhc2VPdXRwdXQudHJpbSgpO1xuXG4gIGlmICghaGVhZCkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCBicmFuY2gnKTtcbiAgfVxuICBpZiAoaGVhZCA9PT0gYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBjdXJyZW50IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBicmFuY2ggKCR7YmFzZX0pYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVBcmdzID0gWydwcicsICdjcmVhdGUnLCAnLS1iYXNlJywgYmFzZSwgJy0taGVhZCcsIGhlYWQsICctLWZpbGwnXTtcbiAgaWYgKHRpdGxlKSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLXRpdGxlJywgdGl0bGUpO1xuICB9XG4gIGlmIChib2R5KSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLWJvZHktZmlsZScsICctJyk7XG4gIH1cblxuICBwcm9ncmVzcygnQ3JlYXRpbmcgcHVsbCByZXF1ZXN0Li4uJyk7XG4gIGF3YWl0IGdoKGNyZWF0ZUFyZ3MsIGJvZHkpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvciddKSlcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByKHsgYm9keSwgdGl0bGUgfTogVXBkYXRlUHJPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcyhgVXBkYXRpbmcgcHVsbCByZXF1ZXN0ICMke3ByTnVtYmVyfS4uLmApO1xuICByZXR1cm4gYXdhaXQgZWRpdFByKHByTnVtYmVyLCBbJy0tdGl0bGUnLCB0aXRsZSwgJy0tYm9keS1maWxlJywgJy0nXSwgYm9keSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVkaXRQcihwck51bWJlcjogc3RyaW5nLCBlZGl0QXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGF3YWl0IGdoKFsncHInLCAnZWRpdCcsIHByTnVtYmVyLCAuLi5lZGl0QXJnc10sIHN0ZGluRGF0YSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoXG4gICAgICBhd2FpdCBnaChbXG4gICAgICAgICdwcicsXG4gICAgICAgICd2aWV3JyxcbiAgICAgICAgcHJOdW1iZXIsXG4gICAgICAgICctLWpzb24nLFxuICAgICAgICAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvcixib2R5JyxcbiAgICAgIF0pXG4gICAgKVxuICApO1xufVxuIiwiaW1wb3J0IHtcbiAgY3VycmVudFByTnVtYmVyLFxuICBjdXJyZW50UmVwb1BhcnRzLFxuICBleGl0V2l0aEVycm9yLFxuICBncmFwaHFsLFxuICBwcm9ncmVzcyxcbiAgcmVhZFJlcXVpcmVkU3RkaW5UZXh0LFxuICB5YW1sRHVtcCxcbn0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG5jb25zdCBSRVZJRVdfU05JUFBFVF9DT05URVhUX0xJTkVTID0gMjtcblxuaW50ZXJmYWNlIENvbW1pdFJlZiB7XG4gIG9pZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUmV2aWV3Q29tbWVudE5vZGUge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWl0PzogQ29tbWl0UmVmIHwgbnVsbDtcbiAgb3JpZ2luYWxDb21taXQ/OiBDb21taXRSZWYgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn1cblxuaW50ZXJmYWNlIFJldmlld1RocmVhZE5vZGUge1xuICBpZDogc3RyaW5nO1xuICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICBpc091dGRhdGVkPzogYm9vbGVhbiB8IG51bGw7XG4gIHBhdGg/OiBzdHJpbmcgfCBudWxsO1xuICBsaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgb3JpZ2luYWxMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgc3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgb3JpZ2luYWxTdGFydExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBjb21tZW50czoge1xuICAgIG5vZGVzOiBSZXZpZXdDb21tZW50Tm9kZVtdO1xuICAgIHBhZ2VJbmZvOiB7XG4gICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbiAgfTtcbn1cblxuY29uc3QgUkVWSUVXX1RIUkVBRF9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld1RocmVhZHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgICAgaXNPdXRkYXRlZFxuICAgICAgICAgICAgcGF0aFxuICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgb3JpZ2luYWxMaW5lXG4gICAgICAgICAgICBzdGFydExpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhcnRMaW5lXG4gICAgICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwKSB7XG4gICAgICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxMaW5lXG4gICAgICAgICAgICAgICAgc3RhcnRMaW5lXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgICAgICBjb21taXQgeyBvaWQgfVxuICAgICAgICAgICAgICAgIG9yaWdpbmFsQ29tbWl0IHsgb2lkIH1cbiAgICAgICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX0NPTU1FTlRfUVVFUlkgPSBgXG4gIHF1ZXJ5KCR0aHJlYWRJZDogSUQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICBub2RlKGlkOiAkdGhyZWFkSWQpIHtcbiAgICAgIC4uLiBvbiBQdWxsUmVxdWVzdFJldmlld1RocmVhZCB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICBvcmlnaW5hbExpbmVcbiAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgIGNvbW1pdCB7IG9pZCB9XG4gICAgICAgICAgICBvcmlnaW5hbENvbW1pdCB7IG9pZCB9XG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IEZJTEVfVEVYVF9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJGV4cHJlc3Npb246IFN0cmluZyEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBvYmplY3QoZXhwcmVzc2lvbjogJGV4cHJlc3Npb24pIHtcbiAgICAgICAgLi4uIG9uIEJsb2Ige1xuICAgICAgICAgIGlzQmluYXJ5XG4gICAgICAgICAgdGV4dFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld1RocmVhZHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcGxpZXNGcm9tU3RkaW4oKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCdFcnJvcjogSlNPTiBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpO1xuICBjb25zdCBwYXlsb2FkID0gcGFyc2VSZXBseUlucHV0KGlucHV0KTtcbiAgY29uc3Qgbm9ybWFsaXplZFJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBbdGhyZWFkSWQsIGJvZHldIG9mIE9iamVjdC5lbnRyaWVzKHBheWxvYWQucmVwbGllcykpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnICYmIGJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZFJlcGxpZXNbdGhyZWFkSWRdID0gYm9keTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWRSZXBsaWVzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFxuICBxdWVyeTogc3RyaW5nLFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIsXG4gIG9uVGhyZWFkOiAodGhyZWFkOiBSZXZpZXdUaHJlYWROb2RlKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBncmFwaHFsPHtcbiAgICAgIGRhdGE/OiB7XG4gICAgICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgICAgICByZXZpZXdUaHJlYWRzPzoge1xuICAgICAgICAgICAgICBub2RlczogUmV2aWV3VGhyZWFkTm9kZVtdO1xuICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0+KHF1ZXJ5LCB7XG4gICAgICBvd25lcixcbiAgICAgIG5hbWUsXG4gICAgICBudW1iZXI6IE51bWJlcihwck51bWJlciksXG4gICAgICBjdXJzb3IsXG4gICAgfSk7XG4gICAgY29uc3QgcmV2aWV3VGhyZWFkcyA9IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5yZXZpZXdUaHJlYWRzO1xuXG4gICAgaWYgKCFyZXZpZXdUaHJlYWRzKSB7XG4gICAgICBleGl0V2l0aEVycm9yKFxuICAgICAgICAnQ291bGQgbm90IGZpbmQgcmV2aWV3VGhyZWFkcyBpbiBHcmFwaFFMIHJlc3BvbnNlLiBUaGUgcHVsbCByZXF1ZXN0IG1heSBub3QgZXhpc3Qgb3IgdGhlcmUgd2FzIGFuIEFQSSBlcnJvci4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGhyZWFkIG9mIHJldmlld1RocmVhZHMubm9kZXMpIHtcbiAgICAgIGF3YWl0IG9uVGhyZWFkKHRocmVhZCk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGN1cnNvciA9IHJldmlld1RocmVhZHMucGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGlkczogc3RyaW5nW10gPSBbXTtcbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfSURTX1FVRVJZLCBvd25lciwgbmFtZSwgcHJOdW1iZXIsICh0aHJlYWQpID0+IHtcbiAgICBpZiAoIXRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICBpZHMucHVzaCh0aHJlYWQuaWQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpZHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+W10+IHtcbiAgY29uc3QgdGhyZWFkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuICBjb25zdCBmaWxlVGV4dENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPj4oKTtcblxuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCBhc3luYyAodGhyZWFkKSA9PiB7XG4gICAgaWYgKHRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWVudHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRocmVhZC5jb21tZW50cy5ub2Rlcy5tYXAoKGNvbW1lbnQpID0+XG4gICAgICAgIG5vcm1hbGl6ZUNvbW1lbnQoY29tbWVudCwgdGhyZWFkLnBhdGggPz8gdW5kZWZpbmVkLCB0aHJlYWQuaXNPdXRkYXRlZCA/PyBmYWxzZSwgb3duZXIsIG5hbWUsIGZpbGVUZXh0Q2FjaGUpXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgcGFnZUluZm8gPSB0aHJlYWQuY29tbWVudHMucGFnZUluZm87XG4gICAgbGV0IGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAocGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICAgIGRhdGE/OiB7XG4gICAgICAgICAgbm9kZT86IHtcbiAgICAgICAgICAgIGNvbW1lbnRzPzoge1xuICAgICAgICAgICAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfT4oUkVWSUVXX0NPTU1FTlRfUVVFUlksIHsgdGhyZWFkSWQ6IHRocmVhZC5pZCwgY3Vyc29yIH0pO1xuICAgICAgY29uc3QgY29tbWVudENvbm5lY3Rpb24gPSByZXNwb25zZS5kYXRhPy5ub2RlPy5jb21tZW50cztcblxuICAgICAgaWYgKCFjb21tZW50Q29ubmVjdGlvbikge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCBjb21tZW50cyBpbiBHcmFwaFFMIHJlc3BvbnNlIGZvciB0aHJlYWQgJHt0aHJlYWQuaWR9LmApO1xuICAgICAgfVxuXG4gICAgICBjb21tZW50cy5wdXNoKFxuICAgICAgICAuLi4oYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgY29tbWVudENvbm5lY3Rpb24ubm9kZXMubWFwKChjb21tZW50KSA9PlxuICAgICAgICAgICAgbm9ybWFsaXplQ29tbWVudChjb21tZW50LCB0aHJlYWQucGF0aCA/PyB1bmRlZmluZWQsIHRocmVhZC5pc091dGRhdGVkID8/IGZhbHNlLCBvd25lciwgbmFtZSwgZmlsZVRleHRDYWNoZSlcbiAgICAgICAgICApXG4gICAgICAgICkpXG4gICAgICApO1xuICAgICAgcGFnZUluZm8gPSBjb21tZW50Q29ubmVjdGlvbi5wYWdlSW5mbztcbiAgICAgIGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhyZWFkcy5wdXNoKHtcbiAgICAgIGlkOiB0aHJlYWQuaWQsXG4gICAgICBpc1Jlc29sdmVkOiB0aHJlYWQuaXNSZXNvbHZlZCxcbiAgICAgIGlzT3V0ZGF0ZWQ6IHRocmVhZC5pc091dGRhdGVkLFxuICAgICAgcGF0aDogdGhyZWFkLnBhdGgsXG4gICAgICBsaW5lOiB0aHJlYWQubGluZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdGhyZWFkLm9yaWdpbmFsTGluZSxcbiAgICAgIHN0YXJ0TGluZTogdGhyZWFkLnN0YXJ0TGluZSxcbiAgICAgIG9yaWdpbmFsU3RhcnRMaW5lOiB0aHJlYWQub3JpZ2luYWxTdGFydExpbmUsXG4gICAgICBjb21tZW50cyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRocmVhZHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UHJSZXZpZXdUaHJlYWRzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMuLi4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgdW5yZXNvbHZlZF90aHJlYWRzOiBhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcbiAgY29uc3QgdW5yZXNvbHZlZElkcyA9IG5ldyBTZXQoYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpKTtcblxuICBwcm9ncmVzcyhgUmVwbHlpbmcgdG8gJHtPYmplY3Qua2V5cyhyZXBsaWVzKS5sZW5ndGh9IHJldmlldyB0aHJlYWRzLi4uYCk7XG5cbiAgY29uc3QgcmVzb2x2ZWRUaHJlYWRJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhyZXBsaWVzKTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgW3RocmVhZElkLCBib2R5XV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICBwcm9ncmVzcyhgUHJvY2Vzc2luZyAke2luZGV4ICsgMX0vJHtlbnRyaWVzLmxlbmd0aH06ICR7dGhyZWFkSWR9YCk7XG4gICAgaWYgKCF1bnJlc29sdmVkSWRzLmhhcyh0aHJlYWRJZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICBkYXRhPzoge1xuICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkPzoge1xuICAgICAgICAgIHRocmVhZD86IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0+KFxuICAgICAgYFxuICAgICAgICBtdXRhdGlvbiAoJHRocmVhZElkOiBJRCEsICRib2R5OiBTdHJpbmchKSB7XG4gICAgICAgICAgYWRkUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRSZXBseShpbnB1dDogeyBwdWxsUmVxdWVzdFJldmlld1RocmVhZElkOiAkdGhyZWFkSWQsIGJvZHk6ICRib2R5IH0pIHtcbiAgICAgICAgICAgIGNvbW1lbnQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZChpbnB1dDogeyB0aHJlYWRJZDogJHRocmVhZElkIH0pIHtcbiAgICAgICAgICAgIHRocmVhZCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICB7IHRocmVhZElkLCBib2R5IH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlLmRhdGE/LnJlc29sdmVSZXZpZXdUaHJlYWQ/LnRocmVhZD8uaXNSZXNvbHZlZCkge1xuICAgICAgcmVzb2x2ZWRUaHJlYWRJZHMucHVzaCh0aHJlYWRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyZXNzKGBXYXJuaW5nOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aHJlYWQgJHt0aHJlYWRJZH0uYCk7XG4gICAgfVxuICB9XG5cbiAgcHJvZ3Jlc3MoJ0RvbmUuJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHJlc29sdmVkX3RocmVhZF9pZHM6IHJlc29sdmVkVGhyZWFkSWRzIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBub3JtYWxpemVDb21tZW50KFxuICBjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSxcbiAgcGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBpc1RocmVhZE91dGRhdGVkOiBib29sZWFuLFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIGZpbGVUZXh0Q2FjaGU6IE1hcDxzdHJpbmcsIFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPj5cbik6IFByb21pc2U8e1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgYXV0aG9yPzogc3RyaW5nO1xuICBzbmlwcGV0Pzogc3RyaW5nO1xufT4ge1xuICBjb25zdCB7IGF1dGhvciB9ID0gY29tbWVudDtcbiAgcmV0dXJuIHtcbiAgICBpZDogY29tbWVudC5pZCxcbiAgICB1cmw6IGNvbW1lbnQudXJsLFxuICAgIGJvZHk6IGNvbW1lbnQuYm9keSxcbiAgICBjcmVhdGVkQXQ6IGNvbW1lbnQuY3JlYXRlZEF0LFxuICAgIGF1dGhvcjogdHlwZW9mIGF1dGhvciA9PT0gJ3N0cmluZycgPyBhdXRob3IgOiAoYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQpLFxuICAgIHNuaXBwZXQ6IGF3YWl0IGJ1aWxkUmV2aWV3U25pcHBldChjb21tZW50LCBwYXRoLCBpc1RocmVhZE91dGRhdGVkLCBvd25lciwgbmFtZSwgZmlsZVRleHRDYWNoZSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVwbHlJbnB1dChpbnB1dDogc3RyaW5nKTogeyByZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiB9IHtcbiAgY29uc3QgZXJyb3JQcmVmaXggPSAnRXJyb3I6IEludmFsaWQgaW5wdXQgZm9ybWF0IG9uIHN0ZGluJztcblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIHVua25vd247XG4gICAgaWYgKCFpc1JlcGx5SW5wdXQocGFyc2VkKSkge1xuICAgICAgZXhpdFdpdGhFcnJvcihgJHtlcnJvclByZWZpeH06IGV4cGVjdGVkIGFuIG9iamVjdCB3aXRoIGEgc3RyaW5nLXZhbHVlZCBcXGByZXBsaWVzXFxgIG1hcGAsIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogSW52YWxpZCBKU09OIHByb3ZpZGVkIG9uIHN0ZGluOiAke2Vycm9yLm1lc3NhZ2V9YCwgMik7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzUmVwbHlJbnB1dCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcmVwbGllcyA9ICh2YWx1ZSBhcyB7IHJlcGxpZXM/OiB1bmtub3duIH0pLnJlcGxpZXM7XG4gIGlmICh0eXBlb2YgcmVwbGllcyAhPT0gJ29iamVjdCcgfHwgcmVwbGllcyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHJlcGxpZXMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVwbGllcykuZXZlcnkoKHJlcGx5KSA9PiByZXBseSA9PT0gbnVsbCB8fCByZXBseSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiByZXBseSA9PT0gJ3N0cmluZycpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBidWlsZFJldmlld1NuaXBwZXQoXG4gIGNvbW1lbnQ6IFJldmlld0NvbW1lbnROb2RlLFxuICBwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGlzVGhyZWFkT3V0ZGF0ZWQ6IGJvb2xlYW4sXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgZmlsZVRleHRDYWNoZTogTWFwPHN0cmluZywgUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+PlxuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFwYXRoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHByaW1hcnlMb2NhdGlvbiA9IGlzVGhyZWFkT3V0ZGF0ZWRcbiAgICA/IG9yaWdpbmFsQ29tbWVudExvY2F0aW9uKGNvbW1lbnQsIHBhdGgpXG4gICAgOiBjdXJyZW50Q29tbWVudExvY2F0aW9uKGNvbW1lbnQsIHBhdGgpO1xuICBjb25zdCBmYWxsYmFja0xvY2F0aW9uID0gaXNUaHJlYWRPdXRkYXRlZFxuICAgID8gY3VycmVudENvbW1lbnRMb2NhdGlvbihjb21tZW50LCBwYXRoKVxuICAgIDogb3JpZ2luYWxDb21tZW50TG9jYXRpb24oY29tbWVudCwgcGF0aCk7XG4gIGNvbnN0IGxvY2F0aW9uID0gcHJpbWFyeUxvY2F0aW9uID8/IGZhbGxiYWNrTG9jYXRpb247XG5cbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBmaWxlVGV4dCA9IGF3YWl0IGZldGNoRmlsZVRleHRBdEV4cHJlc3Npb24ob3duZXIsIG5hbWUsIGxvY2F0aW9uLmV4cHJlc3Npb24sIGZpbGVUZXh0Q2FjaGUpO1xuICBpZiAoZmlsZVRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gcmVuZGVyTGluZVNuaXBwZXQoZmlsZVRleHQsIGxvY2F0aW9uLnN0YXJ0TGluZSwgbG9jYXRpb24uZW5kTGluZSk7XG59XG5cbmZ1bmN0aW9uIGN1cnJlbnRDb21tZW50TG9jYXRpb24oXG4gIGNvbW1lbnQ6IFJldmlld0NvbW1lbnROb2RlLFxuICBwYXRoOiBzdHJpbmdcbik6IHsgZXhwcmVzc2lvbjogc3RyaW5nOyBzdGFydExpbmU6IG51bWJlcjsgZW5kTGluZTogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICByZXR1cm4gY29tbWVudExvY2F0aW9uKGNvbW1lbnQuY29tbWl0Py5vaWQsIHBhdGgsIGNvbW1lbnQuc3RhcnRMaW5lLCBjb21tZW50LmxpbmUpO1xufVxuXG5mdW5jdGlvbiBvcmlnaW5hbENvbW1lbnRMb2NhdGlvbihcbiAgY29tbWVudDogUmV2aWV3Q29tbWVudE5vZGUsXG4gIHBhdGg6IHN0cmluZ1xuKTogeyBleHByZXNzaW9uOiBzdHJpbmc7IHN0YXJ0TGluZTogbnVtYmVyOyBlbmRMaW5lOiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjb21tZW50TG9jYXRpb24oY29tbWVudC5vcmlnaW5hbENvbW1pdD8ub2lkLCBwYXRoLCBjb21tZW50Lm9yaWdpbmFsU3RhcnRMaW5lLCBjb21tZW50Lm9yaWdpbmFsTGluZSk7XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRMb2NhdGlvbihcbiAgb2lkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHBhdGg6IHN0cmluZyxcbiAgc3RhcnRMaW5lOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBlbmRMaW5lOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiB7IGV4cHJlc3Npb246IHN0cmluZzsgc3RhcnRMaW5lOiBudW1iZXI7IGVuZExpbmU6IG51bWJlciB9IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvaWQgfHwgIWVuZExpbmUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHByZXNzaW9uOiBgJHtvaWR9OiR7cGF0aH1gLFxuICAgIHN0YXJ0TGluZTogc3RhcnRMaW5lID8/IGVuZExpbmUsXG4gICAgZW5kTGluZSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hGaWxlVGV4dEF0RXhwcmVzc2lvbihcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBleHByZXNzaW9uOiBzdHJpbmcsXG4gIGZpbGVUZXh0Q2FjaGU6IE1hcDxzdHJpbmcsIFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPj5cbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGNhY2hlS2V5ID0gYCR7b3duZXJ9LyR7bmFtZX06JHtleHByZXNzaW9ufWA7XG4gIGxldCBwZW5kaW5nID0gZmlsZVRleHRDYWNoZS5nZXQoY2FjaGVLZXkpO1xuXG4gIGlmICghcGVuZGluZykge1xuICAgIHBlbmRpbmcgPSBmZXRjaEZpbGVUZXh0KG93bmVyLCBuYW1lLCBleHByZXNzaW9uKTtcbiAgICBmaWxlVGV4dENhY2hlLnNldChjYWNoZUtleSwgcGVuZGluZyk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgcGVuZGluZztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hGaWxlVGV4dChvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGV4cHJlc3Npb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgZGF0YT86IHtcbiAgICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICAgIG9iamVjdD86IHtcbiAgICAgICAgICBpc0JpbmFyeT86IGJvb2xlYW4gfCBudWxsO1xuICAgICAgICAgIHRleHQ/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICB9IHwgbnVsbDtcbiAgICAgIH07XG4gICAgfTtcbiAgfT4oRklMRV9URVhUX1FVRVJZLCB7IG93bmVyLCBuYW1lLCBleHByZXNzaW9uIH0pO1xuICBjb25zdCBibG9iID0gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ub2JqZWN0O1xuXG4gIGlmICghYmxvYiB8fCBibG9iLmlzQmluYXJ5IHx8IHR5cGVvZiBibG9iLnRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBibG9iLnRleHQ7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckxpbmVTbmlwcGV0KGZpbGVUZXh0OiBzdHJpbmcsIHN0YXJ0TGluZTogbnVtYmVyLCBlbmRMaW5lOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsaW5lcyA9IGZpbGVUZXh0LnNwbGl0KCdcXG4nKTtcbiAgLy8gUmVtb3ZlIG9ubHkgdGhlIHN5bnRoZXRpYyBlbXB0eSBzZWdtZW50IGNyZWF0ZWQgYnkgYSB0cmFpbGluZyBuZXdsaW5lIHdpdGhvdXQgdHJpbW1pbmcgbWVhbmluZ2Z1bCBzcGFjZXMuXG4gIGlmIChsaW5lcy5sZW5ndGggPiAwICYmIGxpbmVzLmF0KC0xKSA9PT0gJycpIHtcbiAgICBsaW5lcy5wb3AoKTtcbiAgfVxuXG4gIGlmIChsaW5lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgY2xhbXBlZFN0YXJ0TGluZSA9IGNsYW1wTGluZU51bWJlcihzdGFydExpbmUsIGxpbmVzLmxlbmd0aCk7XG4gIGNvbnN0IGNsYW1wZWRFbmRMaW5lID0gY2xhbXBMaW5lTnVtYmVyKGVuZExpbmUsIGxpbmVzLmxlbmd0aCk7XG4gIGNvbnN0IGZpcnN0TGluZSA9IE1hdGgubWF4KDEsIGNsYW1wZWRTdGFydExpbmUgLSBSRVZJRVdfU05JUFBFVF9DT05URVhUX0xJTkVTKTtcbiAgY29uc3QgbGFzdExpbmUgPSBNYXRoLm1pbihsaW5lcy5sZW5ndGgsIGNsYW1wZWRFbmRMaW5lICsgUkVWSUVXX1NOSVBQRVRfQ09OVEVYVF9MSU5FUyk7XG4gIGNvbnN0IGxpbmVOdW1iZXJXaWR0aCA9IFN0cmluZyhsYXN0TGluZSkubGVuZ3RoO1xuICBjb25zdCBzbmlwcGV0TGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChsZXQgbGluZU51bWJlciA9IGZpcnN0TGluZTsgbGluZU51bWJlciA8PSBsYXN0TGluZTsgbGluZU51bWJlciArPSAxKSB7XG4gICAgY29uc3QgbWFya2VyID0gbGluZU51bWJlciA+PSBjbGFtcGVkU3RhcnRMaW5lICYmIGxpbmVOdW1iZXIgPD0gY2xhbXBlZEVuZExpbmUgPyAnPicgOiAnICc7XG4gICAgc25pcHBldExpbmVzLnB1c2goXG4gICAgICBgJHttYXJrZXJ9ICR7U3RyaW5nKGxpbmVOdW1iZXIpLnBhZFN0YXJ0KGxpbmVOdW1iZXJXaWR0aCwgJyAnKX0gfCAke2xpbmVzW2xpbmVOdW1iZXIgLSAxXSA/PyAnJ31gXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzbmlwcGV0TGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wTGluZU51bWJlcihsaW5lTnVtYmVyOiBudW1iZXIsIG1heExpbmVOdW1iZXI6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChsaW5lTnVtYmVyLCAxKSwgbWF4TGluZU51bWJlcik7XG59XG4iLCJpbXBvcnQgeyBmZXRjaElzc3VlTWVzc2FnZXMgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUGxhblByb21wdChpc3N1ZU51bWJlcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaXNzdWVZYW1sID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlTnVtYmVyKTtcblxuICByZXR1cm4gYFxuUGxhbiBhIEdpdEh1YiBpc3N1ZSBieSBnYXRoZXJpbmcgY29udGV4dCwgd3JpdGluZyBhIHNwZWNpZmljYXRpb24gZm9yIHNvZnR3YXJlIGVuZ2luZWVycywgYW5kIHBvc3Rpbmcgb3IgdXBkYXRpbmcgdGhhdCBzcGVjaWZpY2F0aW9uIGJhY2sgdG8gdGhlIGlzc3VlLlxuVGhlIHRhcmdldCBpc3N1ZSBudW1iZXIgaXMgIyR7aXNzdWVOdW1iZXJ9LiBIZXJlIGlzIHRoZSBmZXRjaGVkIGlzc3VlIGNvbnRleHQgYXMgWUFNTDpcbn5+fn55YW1sXG4ke2lzc3VlWWFtbC50cmltKCl9XG5+fn5+XG5cbkZvbGxvdyB0aGlzIHdvcmtmbG93OlxuMS4gUmVhZCB0aGUgYWJvdmUgaXNzdWUgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgY2FyZWZ1bGx5LlxuMi4gQ29sbGVjdCBlbm91Z2ggc3VwcG9ydGluZyBpbmZvcm1hdGlvbiBiZWZvcmUgd3JpdGluZyB0aGUgc3BlY2lmaWNhdGlvbjpcbiAgIC0gSW5zcGVjdCB0aGUgcmVsZXZhbnQgY29kZSwgc3Vycm91bmRpbmcgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIHJlY2VudCBkaWZmcywgYW5kIGFueSBvdGhlciBsb2NhbCBjb250ZXh0IG5lZWRlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuXG4gICAtIElmIGNvZGUgaW5zcGVjdGlvbiBpcyBlbm91Z2gsIHVzZSB0aGUgY3VycmVudCBjb2RlYmFzZSBhcyB0aGUgcHJpbWFyeSBldmlkZW5jZS5cbiAgIC0gSWYgdGhlIGlzc3VlIGRlcGVuZHMgb24gcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgICAgLSBDbGVhbiB1cCBhbnkgdGVtcG9yYXJ5IGZpbGVzIGFmdGVyIHRoZSBleHBlcmltZW50LlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBhIGxpYnJhcnksIEFQSSwgb3IgbGFuZ3VhZ2UgZmVhdHVyZSwgY29uZmlybSBpdCBhZ2FpbnN0IHRoZSBsYXRlc3Qgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvciBhbm90aGVyIHByaW1hcnkgc291cmNlIGluc3RlYWQgb2YgcmVseWluZyBvbiBtZW1vcnkuXG4zLiBXcml0ZSB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGlzc3VlIGNvbW1lbnQuXG4gICAtIFdyaXRlIHRoZSBiYWNrZ3JvdW5kIGJhc2VkIG9uIHRoZSBjb2xsZWN0ZWQgaW5mb3JtYXRpb24uXG4gICAtIERlZmluZSBhIGdvYWwgdGhhdCBjbGVhcmx5IGd1aWRlcyBvdXIgaW1wbGVtZW50YXRpb24gaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cbiAgIC0gV3JpdGUgYSBkZXRhaWxlZCBzcGVjaWZpY2F0aW9uIGluY29ycG9yYXRpbmcgdGhlIGV2aWRlbmNlIHlvdSBjb2xsZWN0ZWQuXG4gICAtIElmIG5lZWRlZCwgaW5jbHVkZSBjb2RlIHNuaXBwZXRzIHRoYXQgZXhwbGFpbiBob3cgdG8gdXNlIGxpYnJhcmllcyBvciBBUElzLCBhbG9uZyB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlaXIgZG9jdW1lbnRhdGlvbi5cbjQuIFBvc3QgdGhlIHNwZWNpZmljYXRpb24gYmFjayB0byBpc3N1ZSAjJHtpc3N1ZU51bWJlcn0sIHRoZW4gcHJpbnQgdGhlIGlzc3VlIFVSTC5cbiAgIC0gSWYgdGhlIGlzc3VlIGFscmVhZHkgaGFzIGEgc3BlY2lmaWNhdGlvbiwgdXBkYXRlIHRoZSBleGlzdGluZyBjb21tZW50IGluc3RlYWQgb2YgcG9zdGluZyBhIG5ldyBvbmUuXG5cbkZvcm1hdCB0aGUgaXNzdWUgY29tbWVudCBleGFjdGx5IGxpa2UgdGhpcywgYnV0IGRvIG5vdCBpbmNsdWRlIHRoZSBzdXJyb3VuZGluZyBcXGB+fn5+XFxgIGZlbmNlcyBpbiB0aGUgYWN0dWFsIGNvbW1lbnQ6XG5+fn5+XG4jIyBCYWNrZ3JvdW5kXG5cbltTdW1tYXJpemUgdGhlIGN1cnJlbnQgYmVoYXZpb3IgYW5kIGV4cGxhaW4gdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoaXMgaXNzdWVdXG5cbiMjIEdvYWxcblxuW0RlZmluZSB0aGUgZ29hbCB3ZSB3YW50IHRvIGFjaGlldmUgaW4gdGhpcyBpc3N1ZV1cblxuIyMgU3BlY2lmaWNhdGlvblxuXG5bRGV0YWlsZWQgc3BlY2lmaWNhdGlvbiBmb3Igc29mdHdhcmUgZW5naW5lZXJzXVxuXG4jIyBLZXkgVGVjaG5vbG9naWVzIChPTkxZIGlmIGV4dGVybmFsIHJlc291cmNlcyBhcmUgbmVlZGVkKVxuXG5bRGVzY3JpYmUgd2hhdCBsaWJyYXJpZXMgb3IgQVBJcyB3ZSBzaG91bGQgdXNlLCBpbmNsdWRpbmcgY29uY3JldGUgdmVyc2lvbnMgYW5kIGNvZGUgc25pcHBldHMuXVxuXG5+fn5+XG5gLnRyaW0oKTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBnaXQgbWVyZ2UtYmFzZSAke3NoZWxsUXVvdGUoYG9yaWdpbi8ke2Jhc2VCcmFuY2h9YCl9IEhFQUQgMj4vZGV2L251bGwgfHwgZ2l0IG1lcmdlLWJhc2UgJHtzaGVsbFF1b3RlKGJhc2VCcmFuY2gpfSBIRUFEYDtcbn1cblxuZnVuY3Rpb24gc2hlbGxRdW90ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAnJHt2YWx1ZS5yZXBsYWNlQWxsKFwiJ1wiLCBcIidcXFwiJ1xcXCInXCIpfSdgO1xufVxuIiwiaW1wb3J0IHsgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIH0gZnJvbSAnLi4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBjdXJyZW50QmFzZUJyYW5jaCB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQgeyBOT19DT05DRVJOX01FU1NBR0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcbmltcG9ydCB7IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCB9IGZyb20gJy4vYmFzZUJyYW5jaERpZmZDb21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmV2aWV3UHJvbXB0KGtub3duRmFjdHM/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiYXNlQnJhbmNoID0gYXdhaXQgY3VycmVudEJhc2VCcmFuY2goKTtcbiAgY29uc3QgbWVyZ2VCYXNlQ29tbWFuZCA9IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoKTtcbiAgY29uc3QgcHJDb250ZXh0ID0gYXdhaXQgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlKCk7XG4gIHJldHVybiBgXG5SZXZpZXcgdGhlIGN1cnJlbnQgJHtwckNvbnRleHQgPyAncHVsbCByZXF1ZXN0JyA6ICdicmFuY2gnfSBhZ2FpbnN0IGl0cyBiYXNlIGJyYW5jaCAke2Jhc2VCcmFuY2h9IHZpYSBcXGBnaXQgZGlmZiBcIiQoJHttZXJnZUJhc2VDb21tYW5kfSlcIlxcYC5cblVzZSB0aGUga25vd24gZmFjdHMsIGlmIHByb3ZpZGVkLCB0byBhdm9pZCByZXBlYXRpbmcgZmFjdCBjaGVja3MgYW5kIGZpbmRpbmdzLiBSZXVzZSBhIGtub3duIGZhY3Qgb25seSB3aGVuIHRoZSBzYW1lIGN1cnJlbnQtY29kZSBldmlkZW5jZSwgY29tbWFuZCByZXN1bHQsIG9yIHByaW1hcnktc291cmNlIGV2aWRlbmNlIHN0aWxsIGFwcGxpZXMuIElmIHRoZSBjdXJyZW50IGNvZGUgb3Igc291cmNlIGNvbnRleHQgbWF5IGhhdmUgY2hhbmdlZCBlbm91Z2ggdG8gaW52YWxpZGF0ZSBhIGtub3duIGZhY3QsIHJlZnJlc2ggb25seSB0aGF0IGFmZmVjdGVkIGZhY3QuXG5Gb3IgZWFjaCBmaW5kaW5nOlxuMS4gR2F0aGVyIHN1cHBvcnRpbmcgZXZpZGVuY2U6XG4gICAtIEluc3BlY3QgdGhlIHJlZmVyZW5jZWQgY29kZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgcmVjZW50IGRpZmZzIHdoZW4gdGhleSBhZmZlY3QgdGhlIGNsYWltLlxuICAgLSBJZiBjb2RlIGluc3BlY3Rpb24gaXMgZW5vdWdoLCB1c2UgdGhlIGN1cnJlbnQgY29kZWJhc2UgYXMgdGhlIHByaW1hcnkgZXZpZGVuY2UuXG4gICAtIElmIHRoZSBmaW5kaW5nIGlzIGFib3V0IHJ1bnRpbWUgYmVoYXZpb3IsIHJlcHJvZHVjZSBpdCB3aXRoIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgZXhwZXJpbWVudCwgc3VjaCBhcyBhIGZvY3VzZWQgY29tbWFuZCwgYSB0aW55IHNjcmlwdCwgYSB0ZW1wb3JhcnkgbG9jYWwgYXNzZXJ0aW9uLCBvciBhbm90aGVyIG5hcnJvdyBjaGVjayB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG4gICAtIElmIHRoZSBmaW5kaW5nIGRlcGVuZHMgb24gZnJhbWV3b3JrLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgb3IgbGFuZ3VhZ2UgYmVoYXZpb3IsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMi4gSnVkZ2Ugd2hldGhlciB0aGUgZmluZGluZyBpcyB2YWxpZDpcbiAgIC0gTWFyayBpdCB2YWxpZCBvbmx5IHdoZW4gdGhlIGF2YWlsYWJsZSBldmlkZW5jZSBzaG93cyB0aGUgcmVwb3J0ZWQgaXNzdWUgaXMgc3RpbGwgcmVhbCBpbiB0aGUgY3VycmVudCBjb2RlYmFzZS5cbiAgIC0gT3RoZXJ3aXNlLCBtYXJrIGl0IG5vdCB2YWxpZC5cbjMuIENsZWFuIHVwIGFueSB0ZW1wb3JhcnkgZmlsZXMgY3JlYXRlZCBkdXJpbmcgdGhlIGV4cGVyaW1lbnQuXG40LiBQcm9wb3NlIGEgZml4IHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBjb2RlOlxuICAgLSBEZXNjcmliZSB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGNoYW5nZSB0aGF0IHdvdWxkIGFkZHJlc3MgdGhlIGZpbmRpbmcuXG4gICAtIEludmVzdGlnYXRlIHRoZSBsaWtlbHkgaW1wYWN0IG9mIHRoYXQgY2hhbmdlIGJ5IGluc3BlY3RpbmcgdGhlIGFmZmVjdGVkIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgYWRqYWNlbnQgYmVoYXZpb3IsIGFuZCBub3RlIGFueSBmb2xsb3ctdXAgY2hhbmdlcyBvciByaXNrcyB0aGUgZml4IHdvdWxkIG5lZWQgdG8gYWNjb3VudCBmb3IuXG5cblJlcG9ydCBvbmx5IG5ldyB2YWxpZCBmaW5kaW5ncyB0aGF0IGFyZSBub3QgYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBrbm93biBmYWN0cy4gRm9yIGVhY2ggZmluZGluZywgaW5jbHVkZSB0aGUgZXZpZGVuY2UsIHByb3Bvc2VkIGZpeCwgYW5kIGxpa2VseSBpbXBhY3QuIERvIG5vdCBtb2RpZnkgdGhlIGNvZGUuXG5XaGVuIHJlcG9ydGluZyB2YWxpZCBmaW5kaW5ncywgaW5jbHVkZSBhIFxcYCMjIFZlcmlmaWVkIEZhY3RzXFxgIHNlY3Rpb24gYWZ0ZXIgdGhlIGZpbmRpbmdzLiBJbmNsdWRlIG9ubHkgY29uY2lzZSwgcmV2aWV3LXJlbGV2YW50IGZhY3RzOiB3aGF0IHdhcyB2ZXJpZmllZCwgd2h5IGl0IG1hdHRlcnMgdG8gdGhlIHJldmlldywgYW5kIGhvdyBpdCB3YXMgdmVyaWZpZWQuXG5JZiB0aGVyZSBhcmUgbm8gbmV3IHZhbGlkIGZpbmRpbmdzLCByZXNwb25kIGV4YWN0bHkgd2l0aDogXFxgJHtOT19DT05DRVJOX01FU1NBR0V9XFxgXG5cbiR7YnVpbGRLbm93bkZhY3RzSW5zdHJ1Y3Rpb25zKGtub3duRmFjdHMpfVxuXG4ke2J1aWxkUHJDb250ZXh0SW5zdHJ1Y3Rpb25zKHByQ29udGV4dCl9XG5gLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRLbm93bkZhY3RzSW5zdHJ1Y3Rpb25zKGtub3duRmFjdHM6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGNvbnN0IHRyaW1tZWRGYWN0cyA9IGtub3duRmFjdHM/LnRyaW0oKTtcbiAgcmV0dXJuIHRyaW1tZWRGYWN0c1xuICAgID8gYEtub3duIGZhY3RzOlxufn5+fm1hcmtkb3duXG4ke3RyaW1tZWRGYWN0c31cbn5+fn5cbmAudHJpbSgpXG4gICAgOiAnJztcbn1cblxuZnVuY3Rpb24gYnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMocHJDb250ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICByZXR1cm4gcHJDb250ZXh0XG4gICAgPyBgQ3VycmVudCBwdWxsIHJlcXVlc3QgY29udGV4dDpcbn5+fn55YW1sXG4ke3ByQ29udGV4dC50cmltKCl9XG5+fn5+XG5gLnRyaW0oKVxuICAgIDogJyc7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRTY3JlZW5zaG90UHJvbXB0KGluaXRpYWxVcmw6IHN0cmluZywgcGFnZU5hbWU6IHN0cmluZywgc2NyZWVuc2hvdERlc2NyaXB0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYW5pdGl6ZWREZXNjcmlwdGlvbiA9IHNjcmVlbnNob3REZXNjcmlwdGlvbi5yZXBsYWNlQWxsKCdcXG4nLCAnICcpLnJlcGxhY2VBbGwoJ1wiJywgXCInXCIpO1xuICByZXR1cm4gYFxuVXNlIFxcYHBsYXl3cmlnaHQtY2xpXFxgIHNraWxsIHRvIHRha2UgYSBzY3JlZW5zaG90IG9mIFwiJHtzYW5pdGl6ZWREZXNjcmlwdGlvbn1cIiBieSBuYXZpZ2F0aW5nIGZyb20gJHtpbml0aWFsVXJsfSB0byBcIiR7cGFnZU5hbWV9XCIgcGFnZS5cblxuRm9sbG93IHRoaXMgd29ya2Zsb3c6XG4xLiBPcGVuIHRoZSBpbml0aWFsIHBhZ2UgYXQgJHtpbml0aWFsVXJsfS5cbjIuIE5hdmlnYXRlIGZyb20gdGhhdCBpbml0aWFsIHBhZ2UgdW50aWwgeW91IHJlYWNoIHRoZSBwYWdlIGlkZW50aWZpZWQgYXMgJHtwYWdlTmFtZX0uXG4gICAtIElmIGNvZGUgZXJyb3JzLCBydW50aW1lIGZhaWx1cmVzLCBvciBicm9rZW4gVUkgZmxvd3MgcHJldmVudCBuYXZpZ2F0aW9uLCBpbnZlc3RpZ2F0ZSB0aGUgY2F1c2UgaW4gdGhlIGxvY2FsIGNvZGViYXNlLCBtYWtlIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgY29kZSBmaXgsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgcGFnZSBjYW4gbm93IGJlIHJlYWNoZWQgYmVmb3JlIGNvbnRpbnVpbmcuXG4gICAtIElmIHlvdSBjYW5ub3QgZml4IHRoZSBlcnJvcnMsIHJlcG9ydCBvbiB0aGUgZXJyb3JzIHRoZW4gc3RvcC5cbjMuIENhcHR1cmUgYSBzY3JlZW5zaG90IHRoYXQgZm9jdXNlcyBvbiB0aGlzIHRhcmdldDogXCIke3Nhbml0aXplZERlc2NyaXB0aW9ufVwiLlxuNC4gS2VlcCB0aGUgZ2VuZXJhdGVkIGltYWdlIGFydGlmYWN0IGFuZCByZXBvcnQgdGhlIHNjcmVlbnNob3QgZmlsZSBwYXRoIHBsdXMgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB3aGF0IHdhcyBjYXB0dXJlZC4gSWYgeW91IGhhZCB0byBmaXggY29kZSBmaXJzdCwgYWxzbyBzdW1tYXJpemUgdGhlIGZpeC5cbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IHsgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIH0gZnJvbSAnLi4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBjdXJyZW50QmFzZUJyYW5jaCB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQgeyBidWlsZE1lcmdlQmFzZUNvbW1hbmQgfSBmcm9tICcuL2Jhc2VCcmFuY2hEaWZmQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFNpbXBsaWZ5UHJvbXB0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJhc2VCcmFuY2ggPSBhd2FpdCBjdXJyZW50QmFzZUJyYW5jaCgpO1xuICBjb25zdCBtZXJnZUJhc2VDb21tYW5kID0gYnVpbGRNZXJnZUJhc2VDb21tYW5kKGJhc2VCcmFuY2gpO1xuICBjb25zdCBwckNvbnRleHQgPSBhd2FpdCBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUoKTtcbiAgcmV0dXJuIGBcblNpbXBsaWZ5IHRoZSBjdXJyZW50ICR7cHJDb250ZXh0ID8gJ3B1bGwgcmVxdWVzdCcgOiAnYnJhbmNoJ30gYWdhaW5zdCBpdHMgYmFzZSBicmFuY2ggdXNpbmcgXFxgZ2l0IGRpZmYgXCIkKCR7bWVyZ2VCYXNlQ29tbWFuZH0pXCJcXGAuXG5GaXJzdCwgaW5zcGVjdCB0aGUgZGlmZiBhbmQgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBlYWNoIGNoYW5nZWQgYXJlYS4gVGhpcyBpbmNsdWRlcyBuZWFyYnkgZnVuY3Rpb25zLCB0eXBlcywgY2FsbCBzaXRlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb25zLCBhbmQgYW55IG90aGVyIGZpbGVzIHRoYXQgaGVscCBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZSBpcyB0cnVseSBuZWNlc3NhcnkuXG5MZXZlcmFnZSB0aGlzIGNvbnRleHQgdG8gaWRlbnRpZnkgcmVkdW5kYW5jaWVzIHRoYXQgY2FuIGJlIHNhZmVseSByZW1vdmVkIG9yIHNpbXBsaWZpZWQuIExvb2sgZm9yIGR1cGxpY2F0ZSBsb2dpYywgcmVwZWF0ZWQgY29uZGl0aW9uYWxzLCB1bm5lY2Vzc2FyeSBhYnN0cmFjdGlvbnMsIG92ZXJsYXBwaW5nIGNvZGUgcGF0aHMsIGRlYWQgY29kZSwgb3IgZWRpdHMgbWFkZSBvYnNvbGV0ZSB1cG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuUHJpb3JpdGl6ZSBzaW1wbGlmaWNhdGlvbnMgdGhhdCByZWR1Y2UgdGhlIHJldmlld2VyJ3MgYnVyZGVuLCBzdWNoIGFzOlxuLSBSZW1vdmluZyByZWR1bmRhbnQgZWRpdHMgb3IgZGVhZCBjb2RlLlxuLSBFbGltaW5hdGluZyBvciBtZXJnaW5nIGR1cGxpY2F0ZWQgbG9naWMgZGlzY292ZXJlZCBieSBjb21wYXJpbmcgdGhlIGRpZmYgd2l0aCByZWxhdGVkIGNvZGUuXG4tIEZsYXR0ZW5pbmcgdW5uZWNlc3NhcmlseSBjb21wbGV4IGxvZ2ljIGludHJvZHVjZWQgaW4gdGhlIGRpZmYgKGUuZy4sIHVzaW5nIGVhcmx5IHJldHVybnMgdG8gcmVkdWNlIG5lc3RpbmcsIHNpbXBsaWZ5aW5nIGJvb2xlYW4gZXhwcmVzc2lvbnMsIG9yIHJlbW92aW5nIHJlZHVuZGFudCB3cmFwcGVyIGZ1bmN0aW9ucykuXG5cbkNvbW1pdCBhbmQgcHVzaCB5b3VyIGNoYW5nZXMuIEFmdGVyd2FyZCwgc3VtbWFyaXplIHRoZSByZWR1bmRhbmNpZXMgb3IgdW5uZWNlc3NhcnkgY29tcGxleGl0eSB5b3UgaGF2ZSByZW1vdmVkLlxuXG4ke3ByQ29udGV4dCA/IGBDdXJyZW50IHB1bGwgcmVxdWVzdCBjb250ZXh0Olxcbn5+fn55YW1sXFxuJHtwckNvbnRleHQudHJpbSgpfVxcbn5+fn5gIDogJyd9XG5gLnRyaW0oKTtcbn1cbiIsImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQnO1xuaW1wb3J0IHsgY3AsIG1rZHRlbXAsIHJlYWRGaWxlLCByZWFkZGlyLCBybSwgd3JpdGVGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuXG5jb25zdCBURVhUX0ZJTEVfRVhURU5TSU9OX1JFR0VYID0gL1xcLig/OltjbV0/W2p0XXN8anNvbnxtZHx5YT9tbCkkL2k7XG5cbmludGVyZmFjZSBQYWNrYWdlTWV0YWRhdGEge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxQYWNrZWRTa2lsbHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBhY2thZ2VSb290ID0gZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuLi8uLicsIGltcG9ydC5tZXRhLnVybCkpO1xuICBjb25zdCBwYWNrYWdlTWV0YWRhdGEgPSBhd2FpdCByZWFkUGFja2FnZU1ldGFkYXRhKHBhY2thZ2VSb290KTtcbiAgY29uc3QgaW5zdGFsbFNvdXJjZVJvb3QgPSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksICdhZ2VudC1za2lsbHMtaW5zdGFsbC0nKSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjcChqb2luKHBhY2thZ2VSb290LCAncGFja2FnZS5qc29uJyksIGpvaW4oaW5zdGFsbFNvdXJjZVJvb3QsICdwYWNrYWdlLmpzb24nKSk7XG4gICAgYXdhaXQgY3Aoam9pbihwYWNrYWdlUm9vdCwgJ3NraWxscycpLCBqb2luKGluc3RhbGxTb3VyY2VSb290LCAnc2tpbGxzJyksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHJlcGxhY2VMYXRlc3RTcGVjaWZpZXJXaXRoUGFja2FnZVZlcnNpb24oaW5zdGFsbFNvdXJjZVJvb3QsIHBhY2thZ2VNZXRhZGF0YSk7XG5cbiAgICBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFxuICAgICAgW1xuICAgICAgICAnYnVueCcsXG4gICAgICAgICdza2lsbHNAbGF0ZXN0JyxcbiAgICAgICAgJ2FkZCcsXG4gICAgICAgIGluc3RhbGxTb3VyY2VSb290LFxuICAgICAgICAnLS1nbG9iYWwnLFxuICAgICAgICAnLS15ZXMnLFxuICAgICAgICAnLS1za2lsbCcsXG4gICAgICAgICcqJyxcbiAgICAgICAgJy0tYWdlbnQnLFxuICAgICAgICAnY2xhdWRlLWNvZGUnLFxuICAgICAgICAnLS1hZ2VudCcsXG4gICAgICAgICdjb2RleCcsXG4gICAgICAgICctLWFnZW50JyxcbiAgICAgICAgJ2dlbWluaS1jbGknLFxuICAgICAgXSxcbiAgICAgIHtcbiAgICAgICAgd2FpdE1lc3NhZ2U6ICdJbnN0YWxsaW5nIHBhY2thZ2VkIHNraWxscyBnbG9iYWxseS4nLFxuICAgICAgfVxuICAgICk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcm0oaW5zdGFsbFNvdXJjZVJvb3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUGFja2FnZU1ldGFkYXRhKHBhY2thZ2VSb290OiBzdHJpbmcpOiBQcm9taXNlPFBhY2thZ2VNZXRhZGF0YT4ge1xuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBqb2luKHBhY2thZ2VSb290LCAncGFja2FnZS5qc29uJyk7XG4gIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYWNrYWdlSnNvblBhdGgsICd1dGY4JykpIGFzIFBhY2thZ2VNZXRhZGF0YTtcbiAgYXNzZXJ0Lm9rKHBhY2thZ2VKc29uLm5hbWUgJiYgcGFja2FnZUpzb24udmVyc2lvbiwgYEZhaWxlZCB0byByZWFkIG5hbWUgb3IgdmVyc2lvbiBmcm9tICR7cGFja2FnZUpzb25QYXRofWApO1xuICByZXR1cm4gcGFja2FnZUpzb247XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VMYXRlc3RTcGVjaWZpZXJXaXRoUGFja2FnZVZlcnNpb24ocm9vdDogc3RyaW5nLCBwYWNrYWdlTWV0YWRhdGE6IFBhY2thZ2VNZXRhZGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBsYXRlc3RJbnN0YWxsU3BlY2lmaWVyID0gYCR7cGFja2FnZU1ldGFkYXRhLm5hbWV9QGxhdGVzdGA7XG4gIGNvbnN0IHZlcnNpb25lZEluc3RhbGxTcGVjaWZpZXIgPSBgJHtwYWNrYWdlTWV0YWRhdGEubmFtZX1AJHtwYWNrYWdlTWV0YWRhdGEudmVyc2lvbn1gO1xuICBhd2FpdCByZXBsYWNlSW5GaWxlcyhyb290LCAoY29udGVudCkgPT4gY29udGVudC5yZXBsYWNlQWxsKGxhdGVzdEluc3RhbGxTcGVjaWZpZXIsIHZlcnNpb25lZEluc3RhbGxTcGVjaWZpZXIpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUluRmlsZXMocGF0aDogc3RyaW5nLCByZXBsYWNlQ29udGVudDogKGNvbnRlbnQ6IHN0cmluZykgPT4gc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkZGlyKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlLCB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuXG4gIC8vIEtlZXAgaW5zdGFsbC10aW1lIGZpbGUgZGVzY3JpcHRvcnMgYm91bmRlZCB3aGlsZSBzdGFnaW5nIHRoZSBsb2NhbCBza2lsbCBmaWxlcy5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgaWYgKCFlbnRyeS5pc0ZpbGUoKSB8fCAhVEVYVF9GSUxFX0VYVEVOU0lPTl9SRUdFWC50ZXN0KGVudHJ5Lm5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyeVBhdGggPSBqb2luKGVudHJ5LnBhcmVudFBhdGgsIGVudHJ5Lm5hbWUpO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShlbnRyeVBhdGgsICd1dGY4Jyk7XG4gICAgY29uc3QgcmVwbGFjZWRDb250ZW50ID0gcmVwbGFjZUNvbnRlbnQoY29udGVudCk7XG4gICAgaWYgKHJlcGxhY2VkQ29udGVudCAhPT0gY29udGVudCkge1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKGVudHJ5UGF0aCwgcmVwbGFjZWRDb250ZW50KTtcbiAgICB9XG4gIH1cbn1cbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IHN0ZGluIGFzIHByb2Nlc3NTdGRpbiB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBjb250YWluc05vQ29uY2VyblNlbnRlbmNlLCBydW5BZ2VudENvbW1hbmQsIHJ1bkFsbEFnZW50Q29tbWFuZHMgfSBmcm9tICcuL2FnZW50L2FnZW50Q29tbWFuZHMuanMnO1xuaW1wb3J0IHsgdXBkYXRlQnVuRGVwZW5kZW5jaWVzIH0gZnJvbSAnLi9kZXBzL3VwZGF0ZUJ1bkRlcGVuZGVuY2llcy5qcyc7XG5pbXBvcnQge1xuICBjaGVja1ByQ2ksXG4gIGZldGNoSXNzdWVNZXNzYWdlcyxcbiAgZmV0Y2hQck1lc3NhZ2VzLFxuICBsaXN0UHJSZXZpZXdUaHJlYWRzLFxuICBub3JtYWxpemVJc3N1ZU51bWJlcixcbiAgb3BlblByLFxuICByZWFkUmVwbGllc0Zyb21TdGRpbixcbiAgcmVhZFJlcXVpcmVkU3RkaW5UZXh0LFxuICByZWFkU3RkaW5UZXh0LFxuICByZXNvbHZlUHJSZXZpZXdUaHJlYWRzLFxuICB1cGRhdGVQcixcbn0gZnJvbSAnLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGJ1aWxkUGxhblByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9wbGFuUHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkUmV2aWV3UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3Jldmlld1Byb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFNjcmVlbnNob3RQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvc2NyZWVuc2hvdFByb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFNpbXBsaWZ5UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3NpbXBsaWZ5UHJvbXB0LmpzJztcbmltcG9ydCB7IGluc3RhbGxQYWNrZWRTa2lsbHMgfSBmcm9tICcuL3NraWxscy9pbnN0YWxsU2tpbGxzLmpzJztcblxudHlwZSBSZXZpZXdBZ2VudE1vZGUgPSAnYWxsJyB8ICdjb2RleCcgfCAnY2xhdWRlJyB8ICdnZW1pbmknO1xuXG5pbnRlcmZhY2UgUmV2aWV3Q29tbWFuZE9wdGlvbnMge1xuICBhZ2VudDogUmV2aWV3QWdlbnRNb2RlO1xufVxuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbS5uYW1lKCdhZ2VudC1za2lsbHMnKS5kZXNjcmlwdGlvbignQ0xJIGNvbW1hbmRzIGZvciB0aGUgc2tpbGxzIGluIHRoaXMgcmVwb3NpdG9yeScpLnNob3dIZWxwQWZ0ZXJFcnJvcigpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdpbnN0YWxsLXNraWxscycpXG4gIC5kZXNjcmlwdGlvbignSW5zdGFsbCBhbGwgcGFja2FnZWQgc2tpbGxzIGdsb2JhbGx5IGZvciBDbGF1ZGUgQ29kZSwgQ29kZXgsIGFuZCBHZW1pbmkgQ0xJJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBpbnN0YWxsUGFja2VkU2tpbGxzKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ0RvbmVcXG4nKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwZGF0ZS1idW4tZGVwcycpXG4gIC5kZXNjcmlwdGlvbignVXBkYXRlIGFsbCBCdW4gZGVwZW5kZW5jaWVzIGluIHRoZSByb290IHBhY2thZ2UgYW5kIHdvcmtzcGFjZSBwYWNrYWdlcycpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgdXBkYXRlQnVuRGVwZW5kZW5jaWVzKCk7XG4gIH0pO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ2FnZW50JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gdGhlIHNlbGVjdGVkIGFnZW50IHdpdGggdGhlIHNwZWNpZmllZCBwcm9tcHQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhbiBhZ2VudCcsXG4gIGNob2ljZXM6IFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBhcmd1bWVudE5hbWU6ICc8cHJvbXB0PicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdQcm9tcHQgdG8gcGFzcyB0byB0aGUgYWdlbnQnLFxuICBydW46IChhZ2VudCwgcHJvbXB0KSA9PiBydW5Qcm9tcHRBZ2VudENvbW1hbmQoYWdlbnQsIHByb21wdCksXG59KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgncmV2aWV3JylcbiAgLmRlc2NyaXB0aW9uKCdSdW4gcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JylcbiAgLmFkZE9wdGlvbihcbiAgICBuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCAnVXNlIGEgcmV2aWV3IGFnZW50JylcbiAgICAgIC5jaG9pY2VzKFsnYWxsJywgJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSlcbiAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KClcbiAgKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IFJldmlld0NvbW1hbmRPcHRpb25zKSA9PiB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgcnVuUmV2aWV3Q29tbWFuZChvcHRpb25zLmFnZW50KSk7XG4gIH0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jb2RleCcsICdSdW4gQ29kZXggcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT4gcnVuUmV2aWV3Q29tbWFuZCgnY29kZXgnKSk7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+IHJ1blJldmlld0NvbW1hbmQoJ2NsYXVkZScpKTtcbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PiBydW5SZXZpZXdDb21tYW5kKCdnZW1pbmknKSk7XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blJldmlld0NvbW1hbmQobW9kZTogUmV2aWV3QWdlbnRNb2RlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJldmlvdXNWZXJpZmllZEZhY3RzID0gYXdhaXQgcmVhZFJldmlld1ZlcmlmaWVkRmFjdHMoKTtcbiAgY29uc3QgcHJvbXB0ID0gYnVpbGRSZXZpZXdQcm9tcHQocHJldmlvdXNWZXJpZmllZEZhY3RzKTtcbiAgcmV0dXJuIG1vZGUgPT09ICdhbGwnXG4gICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKHByb21wdCwge1xuICAgICAgICBhbGxBZ2VudHNMYWJlbDogJ3JldmlldyBhZ2VudHMnLFxuICAgICAgICBtYXBPdXRwdXQ6IChfYWdlbnQsIG91dHB1dCkgPT4gKGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0KSA/IHVuZGVmaW5lZCA6IG91dHB1dCksXG4gICAgICB9KVxuICAgIDogcnVuQWdlbnRDb21tYW5kKG1vZGUsIHByb21wdCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRSZXZpZXdWZXJpZmllZEZhY3RzKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGlmIChwcm9jZXNzU3RkaW4uaXNUVFkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICByZXR1cm4gaW5wdXQubGVuZ3RoID4gMCA/IGlucHV0IDogdW5kZWZpbmVkO1xufVxuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3BsYW4nLFxuICBkZXNjcmlwdGlvbjogJ1J1biBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUgd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHBsYW5uaW5nIGFnZW50JyxcbiAgY2hvaWNlczogWydhbGwnLCAnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAobW9kZSwgaXNzdWVSZWZlcmVuY2UpID0+XG4gICAgbW9kZSA9PT0gJ2FsbCdcbiAgICAgID8gcnVuQWxsQWdlbnRDb21tYW5kcyhidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSwge1xuICAgICAgICAgIGFsbEFnZW50c0xhYmVsOiAncGxhbm5pbmcgYWdlbnRzJyxcbiAgICAgICAgfSlcbiAgICAgIDogcnVuQWdlbnRDb21tYW5kKG1vZGUsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tY29kZXgnLCAnUnVuIENvZGV4IHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcbmFkZEFnZW50Q29tbWFuZCgncGxhbi1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3NjcmVlbnNob3QnKVxuICAuZGVzY3JpcHRpb24oJ1Rha2UgYSBzY3JlZW5zaG90IHdpdGggdGhlIHNlbGVjdGVkIGFnZW50IHZpYSBwbGF5d3JpZ2h0LWNsaScpXG4gIC5hcmd1bWVudCgnPGluaXRpYWwtdXJsPicsICdJbml0aWFsIFVSTCB0byBvcGVuIGJlZm9yZSBuYXZpZ2F0aW5nJylcbiAgLmFyZ3VtZW50KCc8cGFnZS1uYW1lPicsICdQYWdlIG5hbWUgdG8gbmF2aWdhdGUgdG8gZnJvbSB0aGUgaW5pdGlhbCBwYWdlJylcbiAgLmFyZ3VtZW50KCc8ZGVzY3JpcHRpb24+JywgJ0Rlc2NyaXB0aW9uIG9mIHRoZSBwYXJ0IHRvIGNhcHR1cmUgaW4gdGhlIHNjcmVlbnNob3QnKVxuICAuYWRkT3B0aW9uKFxuICAgIG5ldyBPcHRpb24oJy0tYWdlbnQgPGFnZW50PicsICdVc2UgYSBzY3JlZW5zaG90IGFnZW50JykuY2hvaWNlcyhbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSkubWFrZU9wdGlvbk1hbmRhdG9yeSgpXG4gIClcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKFxuICAgIGFzeW5jIChcbiAgICAgIGluaXRpYWxVcmw6IHN0cmluZyxcbiAgICAgIHBhZ2VOYW1lOiBzdHJpbmcsXG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgICAgb3B0aW9uczogeyBhZ2VudDogJ2NvZGV4JyB8ICdjbGF1ZGUnIHwgJ2dlbWluaScgfVxuICAgICkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoXG4gICAgICAgIGF3YWl0IHJ1bkFnZW50Q29tbWFuZChvcHRpb25zLmFnZW50LCBidWlsZFNjcmVlbnNob3RQcm9tcHQoaW5pdGlhbFVybCwgcGFnZU5hbWUsIGRlc2NyaXB0aW9uKSlcbiAgICAgICk7XG4gICAgfVxuICApO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3NpbXBsaWZ5JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHNpbXBsaWZ5IGFnZW50JyxcbiAgY2hvaWNlczogWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIHJ1bjogKGFnZW50KSA9PiBydW5BZ2VudENvbW1hbmQoYWdlbnQsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1jb2RleCcsICdSdW4gQ29kZXggUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdvcGVuLXByJylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBwdWxsIHJlcXVlc3QgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCcpXG4gIC5hcmd1bWVudCgnPHRpdGxlPicsICdQdWxsIHJlcXVlc3QgdGl0bGUnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKHRpdGxlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG9wZW5Qcih7IGJvZHk6IGJvZHkgfHwgdW5kZWZpbmVkLCB0aXRsZSB9KTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtvdXRwdXR9XFxuYCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd1cGRhdGUtcHInKVxuICAuZGVzY3JpcHRpb24oJ1VwZGF0ZSB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QgdGl0bGUgYW5kIGJvZHknKVxuICAuYXJndW1lbnQoJzx0aXRsZT4nLCAnUHVsbCByZXF1ZXN0IHRpdGxlJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICh0aXRsZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IFBSIGJvZHkgaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB1cGRhdGVQcih7IGJvZHksIHRpdGxlIH0pO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke291dHB1dH1cXG5gKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2NoZWNrLXByLWNpJylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IHRoZSBsYXRlc3QgdGVzdC1yZWxhdGVkIENJIHJlc3VsdHMgZm9yIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hlY2tQckNpKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUocmVzdWx0Lm91dHB1dCk7XG4gICAgcHJvY2Vzcy5leGl0KHJlc3VsdC5leGl0Q29kZSk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdmZXRjaC1pc3N1ZScpXG4gIC5kZXNjcmlwdGlvbignRmV0Y2ggYW4gaXNzdWUgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgYXMgWUFNTCcpXG4gIC5hcmd1bWVudCgnPGlzc3VlPicsICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoaXNzdWVSZWZlcmVuY2U6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZVJlZmVyZW5jZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLXByJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhIHB1bGwgcmVxdWVzdCBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MLCBleGNsdWRpbmcgaW5saW5lIGNvbW1lbnRzJylcbiAgLmFyZ3VtZW50KCdbcHJdJywgJ0dpdEh1YiBwdWxsIHJlcXVlc3QgbnVtYmVyIG9yIFVSTDsgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgYnJhbmNoIHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAocHJSZWZlcmVuY2U/OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmZXRjaFByTWVzc2FnZXMocHJSZWZlcmVuY2UpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdsaXN0LXByLXJldmlldy10aHJlYWRzJylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgZm9yIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgbGlzdFByUmV2aWV3VGhyZWFkcygpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdyZXNvbHZlLXByLXJldmlldy10aHJlYWRzJylcbiAgLmRlc2NyaXB0aW9uKCdSZXBseSB0byB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzIGFuZCByZXNvbHZlIHRoZW0nKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlcGxpZXMgPSBhd2FpdCByZWFkUmVwbGllc0Zyb21TdGRpbigpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHJlc29sdmVQclJldmlld1RocmVhZHMocmVwbGllcyk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbmF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwcm9jZXNzLmFyZ3YpO1xuXG5mdW5jdGlvbiBhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kPFRNb2RlIGV4dGVuZHMgc3RyaW5nPihjb25maWc6IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBvcHRpb25EZXNjcmlwdGlvbjogc3RyaW5nO1xuICBjaG9pY2VzOiBbVE1vZGUsIC4uLlRNb2RlW11dO1xuICBhcmd1bWVudE5hbWU/OiBzdHJpbmc7XG4gIGFyZ3VtZW50RGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJ1bjogKG1vZGU6IFRNb2RlLCBhcmd1bWVudDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG59KTogdm9pZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9ncmFtLmNvbW1hbmQoY29uZmlnLm5hbWUpLmRlc2NyaXB0aW9uKGNvbmZpZy5kZXNjcmlwdGlvbikuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpO1xuICBpZiAoY29uZmlnLmFyZ3VtZW50TmFtZSkge1xuICAgIGNvbW1hbmQuYXJndW1lbnQoY29uZmlnLmFyZ3VtZW50TmFtZSwgY29uZmlnLmFyZ3VtZW50RGVzY3JpcHRpb24pO1xuICB9XG5cbiAgY29tbWFuZFxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgY29uZmlnLm9wdGlvbkRlc2NyaXB0aW9uKS5jaG9pY2VzKGNvbmZpZy5jaG9pY2VzKS5tYWtlT3B0aW9uTWFuZGF0b3J5KCkpXG4gICAgLmFjdGlvbihhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICBjb25zdCBbYXJndW1lbnRPck9wdGlvbnMsIG1heWJlT3B0aW9uc10gPSBhcmdzIGFzIFtzdHJpbmcgfCB7IGFnZW50OiBUTW9kZSB9LCB7IGFnZW50OiBUTW9kZSB9IHwgdW5kZWZpbmVkXTtcbiAgICAgIGNvbnN0IGFyZ3VtZW50ID0gdHlwZW9mIGFyZ3VtZW50T3JPcHRpb25zID09PSAnc3RyaW5nJyA/IGFyZ3VtZW50T3JPcHRpb25zIDogJyc7XG4gICAgICBjb25zdCBvcHRpb25zID0gKHR5cGVvZiBhcmd1bWVudE9yT3B0aW9ucyA9PT0gJ3N0cmluZycgPyBtYXliZU9wdGlvbnMgOiBhcmd1bWVudE9yT3B0aW9ucykgYXMgeyBhZ2VudDogVE1vZGUgfTtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZy5ydW4ob3B0aW9ucy5hZ2VudCwgYXJndW1lbnQpKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkQWdlbnRDb21tYW5kKFxuICBuYW1lOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIGNvbmZpZ09yUnVuOlxuICAgIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPilcbiAgICB8IHtcbiAgICAgICAgYXJndW1lbnROYW1lOiBzdHJpbmc7XG4gICAgICAgIGFyZ3VtZW50RGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICAgIHJ1bjogKGFyZ3VtZW50OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgICAgIH1cbik6IHZvaWQge1xuICBjb25zdCBjb21tYW5kID0gcHJvZ3JhbS5jb21tYW5kKG5hbWUpLmRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKS5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSk7XG5cbiAgaWYgKHR5cGVvZiBjb25maWdPclJ1biA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbW1hbmQuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZ09yUnVuKCkpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbW1hbmQuYXJndW1lbnQoY29uZmlnT3JSdW4uYXJndW1lbnROYW1lLCBjb25maWdPclJ1bi5hcmd1bWVudERlc2NyaXB0aW9uKS5hY3Rpb24oYXN5bmMgKGFyZ3VtZW50OiBzdHJpbmcpID0+IHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWdPclJ1bi5ydW4oYXJndW1lbnQpKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blByb21wdEFnZW50Q29tbWFuZChhZ2VudDogJ2NvZGV4JyB8ICdjbGF1ZGUnIHwgJ2dlbWluaScsIHByb21wdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGV4dHJhY3RNYXJrZG93bkNvZGVCbG9jayhhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIGJ1aWxkQWdlbnRQcm9tcHQocHJvbXB0KSkpO1xufVxuXG5mdW5jdGlvbiBidWlsZEFnZW50UHJvbXB0KHByb21wdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3Byb21wdH1cblxuUmVwb3J0IG9uIHRoZSByZXN1bHQgd2l0aCBhIG1hcmtkb3duIGNvZGUgYmxvY2sgd2l0aCB0cmlwbGUgYmFja3RpY2tzLmA7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RNYXJrZG93bkNvZGVCbG9jayhvdXRwdXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGNvZGVCbG9ja01hdGNoZXMgPSBbLi4ub3V0cHV0Lm1hdGNoQWxsKC9gYGBbXlxcbmBdKlxcbj8oW1xcc1xcU10qPylgYGAvZyldO1xuICBjb25zdCBsYXN0Q29kZUJsb2NrQ29udGVudCA9IGNvZGVCbG9ja01hdGNoZXMuYXQoLTEpPy5bMV07XG4gIGlmICghbGFzdENvZGVCbG9ja0NvbnRlbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FnZW50IG91dHB1dCBkaWQgbm90IGNvbnRhaW4gYSBtYXJrZG93biBjb2RlIGJsb2NrIHdpdGggdHJpcGxlIGJhY2t0aWNrcy4nKTtcbiAgfVxuICByZXR1cm4gbGFzdENvZGVCbG9ja0NvbnRlbnQ7XG59XG4iXSwibmFtZXMiOlsiUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMiLCJhY3RpdmVQcm9jZXNzZXMiLCJTZXQiLCJjbGVhbnVwSGFuZGxlcnNJbnN0YWxsZWQiLCJydW5Db21tYW5kV2l0aFByb2dyZXNzIiwiX3giLCJfeDIiLCJfcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyIsImFwcGx5IiwidGhpcyIsImFyZ3VtZW50cyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yIiwibSIsIl9jYWxsZWUiLCJjb21tYW5kIiwib3B0aW9ucyIsIl9jb21tYW5kJCIsInByb2MiLCJwcm9jZXNzVGltZW91dCIsInN0b3BXYWl0UHJvZ3Jlc3MiLCJjb21tYW5kTG9nZ2VyIiwiX3lpZWxkJFByb21pc2UkYWxsIiwiX3lpZWxkJFByb21pc2UkYWxsMiIsInN0ZG91dCIsInN0ZGVyciIsImV4aXRDb2RlIiwib3V0cHV0IiwidyIsIl9jb250ZXh0IiwicCIsIm4iLCJzcGF3biIsInNsaWNlIiwiZGV0YWNoZWQiLCJzdGRpbyIsImNyZWF0ZVByb2Nlc3NUaW1lb3V0IiwidGltZW91dE1zIiwiY3JlYXRlV2FpdFByb2dyZXNzIiwid2FpdE1lc3NhZ2UiLCJ3YWl0SW50ZXJ2YWxTZWNvbmRzIiwiY3JlYXRlQ29tbWFuZExvZ2dlciIsImxvZ0ZpbGVQYXRoIiwidiIsIlByb21pc2UiLCJhbGwiLCJzdHJlYW1Ub1RleHQiLCJjaHVuayIsIndyaXRlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uY2UiLCJjb2RlIiwiX3NsaWNlZFRvQXJyYXkiLCJ0aW1lZE91dCIsIkVycm9yIiwidGltZW91dEVycm9yTWVzc2FnZSIsImNvbmNhdCIsImEiLCJqb2luIiwiY2xvc2UiLCJjbGVhciIsImYiLCJtZXNzYWdlIiwibWlsbGlzZWNvbmRzIiwiZm9ybWF0RHVyYXRpb24iLCJsZW5ndGgiLCJmb3JjZUtpbGxUaW1lciIsImFkZCIsIl9zdGVwMiIsIl9pdGVyYXRvcjIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9sb29wIiwic2lnbmFsIiwidmFsdWUiLCJwcm9jZXNzIiwiX3N0ZXAzIiwiX2l0ZXJhdG9yMyIsInMiLCJkb25lIiwia2lsbFByb2Nlc3MiLCJlcnIiLCJlIiwiZXhpdCIsInNpZ25hbE51bWJlciIsImluc3RhbGxDbGVhbnVwSGFuZGxlcnMiLCJ0aW1lb3V0Iiwic2V0VGltZW91dCIsInVucmVmIiwiY2xlYXJUaW1lb3V0IiwicGlkIiwia2lsbCIsIl91bnVzZWQiLCJfeDMiLCJfeDQiLCJfc3RyZWFtVG9UZXh0IiwiX2NhbGxlZTIiLCJzdHJlYW0iLCJvbkNodW5rIiwiY2h1bmtzIiwiZGVjb2RlciIsIl9pdGVyYXRvckFicnVwdENvbXBsZXRpb24iLCJfZGlkSXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJjaHVua1RleHQiLCJmaW5hbENodW5rIiwiX3QiLCJfY29udGV4dDIiLCJUZXh0RGVjb2RlciIsIl9hc3luY0l0ZXJhdG9yIiwibmV4dCIsImRlY29kZSIsIlVpbnQ4QXJyYXkiLCJwdXNoIiwid3JpdGVQcm9ncmVzcyIsImRvdENvdW50IiwidGltZXIiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJfeDUiLCJfY3JlYXRlQ29tbWFuZExvZ2dlciIsIl9jYWxsZWU2Iiwid2FybiIsIl90MiIsIl9jb250ZXh0NiIsIl9jbG9zZSIsIl9jYWxsZWUzIiwiX2NvbnRleHQzIiwiZXJyb3IiLCJTdHJpbmciLCJta2RpciIsImRpcm5hbWUiLCJyZWN1cnNpdmUiLCJjcmVhdGVXcml0ZVN0cmVhbSIsImZsYWdzIiwib24iLCJ3cml0YWJsZSIsIl9jbG9zZTIiLCJfY2FsbGVlNCIsIl9jb250ZXh0NCIsImVuZCIsIl9jbG9zZTMiLCJfY2FsbGVlNSIsIl9jb250ZXh0NSIsIk5PX0NPTkNFUk5fTUVTU0FHRSIsIkFHRU5UX05BTUVTIiwiQ09OVEFJTlNfTk9fQ09OQ0VSTl9TRU5URU5DRV9SRUdFWCIsIlJlZ0V4cCIsIkRFRkFVTFRfQUxMX0FHRU5UX0NPTU1BTkRfT1BUSU9OUyIsImFsbEFnZW50c0xhYmVsIiwicnVuQWxsQWdlbnRDb21tYW5kcyIsIl9ydW5BbGxBZ2VudENvbW1hbmRzIiwicHJvbXB0IiwicmVzb2x2ZWRQcm9tcHQiLCJhZ2VudE91dHB1dHNXaXRoU2tpcHBlZFJlc3VsdHMiLCJhZ2VudE91dHB1dHMiLCJ3YWl0TWVzc2FnZUZvciIsIm1hcCIsImFnZW50IiwiX29wdGlvbnMkbWFwT3V0cHV0IiwiX29wdGlvbnMiLCJ0cmltbWVkT3V0cHV0IiwibWFwcGVkT3V0cHV0IiwicnVuQWdlbnRDb21tYW5kIiwidHJpbSIsIm1hcE91dHB1dCIsImNhbGwiLCJ1bmRlZmluZWQiLCJmb3JtYXRBZ2VudFNlY3Rpb24iLCJzdW1tYXJpemVBZ2VudE91dHB1dCIsImFnZW50RmFpbHVyZU1lc3NhZ2UiLCJmaWx0ZXIiLCJfcnVuQWdlbnRDb21tYW5kIiwiX29wdGlvbnMkd2FpdE1lc3NhZ2UiLCJfdDMiLCJfdDQiLCJjcmVhdGVBZ2VudENvbW1hbmQiLCJhZ2VudExvZ0ZpbGVQYXRoIiwiZGlzcGxheUFnZW50TmFtZSIsImNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2UiLCJ0ZXN0IiwiYm9keSIsInRhcmdldCIsIm5vdyIsIkRhdGUiLCJfbWFwMiIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJ0d29EaWdpdHMiLCJtb250aCIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJ0b1N0cmluZyIsInBhZFN0YXJ0IiwiREVQRU5ERU5DWV9TRUNUSU9OUyIsIklHTk9SRURfRElSRUNUT1JJRVMiLCJVUERBVEVfQ09NTUFORCIsInVwZGF0ZUJ1bkRlcGVuZGVuY2llcyIsIl91cGRhdGVCdW5EZXBlbmRlbmNpZXMiLCJjd2QiLCJ3b3Jrc3BhY2VEaXJlY3RvcmllcyIsIl9pdGVyYXRvcjQiLCJfc3RlcDQiLCJkaXJlY3RvcnkiLCJmaW5kV29ya3NwYWNlRGlyZWN0b3JpZXMiLCJhc3NlcnROb0NhdGFsb2dEZXBlbmRlbmNpZXMiLCJ1cGRhdGVQYWNrYWdlIiwiX2ZpbmRXb3Jrc3BhY2VEaXJlY3RvcmllcyIsInBhdHRlcm5zIiwiZGlyZWN0b3JpZXMiLCJpbmNsdWRlZCIsImV4Y2x1ZGVkIiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsInBhdHRlcm4iLCJpc0V4Y2x1c2lvbiIsIm1hdGNoZXMiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2Iiwid29ya3NwYWNlUGF0dGVybnMiLCJyZWFkUGFja2FnZUpzb24iLCJsaXN0V29ya3NwYWNlQ2FuZGlkYXRlRGlyZWN0b3JpZXMiLCJzdGFydHNXaXRoIiwiZXhwYW5kV29ya3NwYWNlUGF0dGVybiIsIl90b0NvbnN1bWFibGVBcnJheSIsImhhcyIsInRvU29ydGVkIiwibGVmdCIsInJpZ2h0IiwibG9jYWxlQ29tcGFyZSIsIl9yZWYiLCJfd29ya3NwYWNlcyRwYWNrYWdlcyIsIl9yZWYkd29ya3NwYWNlcyIsIndvcmtzcGFjZXMiLCJBcnJheSIsImlzQXJyYXkiLCJwYWNrYWdlcyIsIl9saXN0V29ya3NwYWNlQ2FuZGlkYXRlRGlyZWN0b3JpZXMiLCJyb290cyIsIl9pdGVyYXRvcjciLCJfc3RlcDciLCJfc3RlcDckdmFsdWUiLCJtYXhEZXB0aCIsInJvb3QiLCJfaXRlcmF0b3I4IiwiX3N0ZXA4IiwiX3Q1Iiwid29ya3NwYWNlQ2FuZGlkYXRlUm9vdHMiLCJpc0RpcmVjdG9yeSIsImxpc3REaXJlY3RvcmllcyIsIk1hcCIsIl9pIiwiX2NhbmRpZGF0ZVJvb3RzIiwiY2FuZGlkYXRlUm9vdHMiLCJzZXQiLCJtZXJnZWRNYXhEZXB0aCIsImdldCIsImVudHJpZXMiLCJfcmVmMiIsIl9yZWYzIiwic29tZSIsIl9yZWY0IiwicGFyZW50TWF4RGVwdGgiLCJjaGlsZE1heERlcHRoIiwiX3JlZjUiLCJvdGhlclJvb3QiLCJvdGhlck1heERlcHRoIiwiaGFzUGFyZW50Um9vdCIsImJyYWNlRXhwYW5kIiwibm9ybWFsaXplV29ya3NwYWNlUGF0dGVybiIsImV4cGFuZGVkUGF0dGVybiIsIndvcmtzcGFjZVBhdHRlcm5NYXhEZXB0aCIsImNhbmRpZGF0ZVJvb3QiLCJNYXRoIiwibWF4Iiwic2VnbWVudHMiLCJzcGxpdCIsInNlZ21lbnQiLCJoYXNHbG9iTWFnaWMiLCJpbmNsdWRlcyIsInBhdGhEZXB0aCIsIl94NiIsIl9pc0RpcmVjdG9yeSIsImRpcmVjdG9yeVN0YXQiLCJzdGF0IiwiX3g3IiwiX3g4IiwiX3g5IiwiX2xpc3REaXJlY3RvcmllcyIsIl9pdGVyYXRvcjkiLCJfc3RlcDkiLCJlbnRyeSIsImNoaWxkRGlyZWN0b3J5IiwiX3Q3IiwiX3Q4IiwiX3Q5IiwiX3QwIiwicmVhZGRpciIsIndpdGhGaWxlVHlwZXMiLCJuYW1lIiwic2VwIiwicGF0aCIsIl94MCIsIl94MSIsIl94MTAiLCJfZXhwYW5kV29ya3NwYWNlUGF0dGVybiIsIm1hdGNoZXIiLCJfaXRlcmF0b3IwIiwiX3N0ZXAwIiwiX3QxIiwiX3QxMCIsImdsb2JQYXR0ZXJuTWF0Y2hlciIsImhhc1BhY2thZ2VKc29uIiwibm9ybWFsaXplZCIsIm5vcm1hbGl6ZVBhdGgiLCJyZXBsYWNlIiwibWluaW1hdGNoIiwiZG90IiwiX3gxMSIsIl94MTIiLCJfaGFzUGFja2FnZUpzb24iLCJfY2FsbGVlNyIsInBhY2thZ2VKc29uU3RhdCIsIl9jb250ZXh0NyIsImlzRmlsZSIsIl94MTMiLCJfeDE0IiwiX2Fzc2VydE5vQ2F0YWxvZ0RlcGVuZGVuY2llcyIsIl9jYWxsZWU4IiwiY2F0YWxvZ0RlcGVuZGVuY2llcyIsIl9pMyIsIl9hcnIiLCJwYWNrYWdlSnNvbiIsIl9pdGVyYXRvcjEiLCJfc3RlcDEiLCJkZXBlbmRlbmN5IiwiX2NvbnRleHQ4IiwiY2F0YWxvZ0RlcGVuZGVuY3lOYW1lcyIsIl94MTUiLCJfcmVhZFBhY2thZ2VKc29uIiwiX2NhbGxlZTkiLCJwYWNrYWdlSnNvblBhdGgiLCJfdDEyIiwiX3QxMyIsIl9jb250ZXh0OSIsIkpTT04iLCJyZWFkRmlsZSIsInBhcnNlIiwibmFtZXMiLCJkZXBlbmRlbmNpZXMiLCJfaTIiLCJfT2JqZWN0JGVudHJpZXMiLCJPYmplY3QiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJfeDE2IiwiX3gxNyIsIl91cGRhdGVQYWNrYWdlIiwiX2NhbGxlZTAiLCJsYWJlbCIsIl9jb250ZXh0MCIsInJ1bkNvbW1hbmQiLCJfeDE4IiwiX3gxOSIsIl9ydW5Db21tYW5kIiwiX2NhbGxlZTEiLCJfY29udGV4dDEiLCJyZWxhdGl2ZSIsInlhbWxTdHJpbmdpZnlPcHRpb25zIiwiYmxvY2tRdW90ZSIsImxpbmVXaWR0aCIsInByb2dyZXNzIiwicHJvY2Vzc1N0ZGVyciIsImV4aXRXaXRoRXJyb3IiLCJyZWFkU3RkaW5UZXh0IiwiX3JlYWRTdGRpblRleHQiLCJwcm9jZXNzU3RkaW4iLCJpc1RUWSIsInJlYWRSZXF1aXJlZFN0ZGluVGV4dCIsIl9yZWFkUmVxdWlyZWRTdGRpblRleHQiLCJlcnJvck1lc3NhZ2UiLCJpbnB1dCIsIl9vcHRpb25zJGFsbG93ZWRFeGl0QyIsImFsbG93ZWRFeGl0Q29kZXMiLCJfcmV0IiwiYXR0ZW1wdCIsIl9jb21tYW5kJDIiLCJmYWlsdXJlTWVzc2FnZSIsInJldHJ5Iiwic3RkaW5EYXRhIiwic3RkaW4iLCJpc1RyYW5zaWVudEdoRmFpbHVyZSIsIkdIX1JFVFJZX01BWF9BVFRFTVBUUyIsInNsZWVwIiwiZCIsIl9yZWdlbmVyYXRvclZhbHVlcyIsImdoIiwiX2doIiwiYXJncyIsImdoQWxsb3dFeGl0Q29kZXMiLCJfZ2hBbGxvd0V4aXRDb2RlcyIsImN1cnJlbnRSZXBvUGFydHMiLCJfY3VycmVudFJlcG9QYXJ0cyIsIm5hbWVXaXRoT3duZXJPdXRwdXQiLCJuYW1lV2l0aE93bmVyIiwiX25hbWVXaXRoT3duZXIkc3BsaXQiLCJfbmFtZVdpdGhPd25lciRzcGxpdDIiLCJvd25lciIsImN1cnJlbnRQck51bWJlciIsIl9jdXJyZW50UHJOdW1iZXIiLCJwck51bWJlciIsImdyYXBocWwiLCJfZ3JhcGhxbCIsInF1ZXJ5IiwidmFycyIsImtleSIsInJlc3BvbnNlIiwiZXJyb3JNZXNzYWdlcyIsImVycm9ycyIsIl9lcnJvciRtZXNzYWdlIiwieWFtbER1bXAiLCJkYXRhIiwic3RyaW5naWZ5WWFtbCIsImRlZXBDb3B5Iiwic3RydWN0dXJlZENsb25lIiwic3Bhd25TeW5jU2FmZSIsIl9yZXN1bHQkc3RhdHVzIiwiX3Jlc3VsdCRzdGRvdXQiLCJfcmVzdWx0JHN0ZGVyciIsInJlc3VsdCIsInNwYXduU3luYyIsImVuY29kaW5nIiwic3RhdHVzIiwiVEVTVF9SRUxBVEVEX1BBVFRFUk4iLCJXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMiLCJGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4iLCJydGtBdmFpbGFibGUiLCJub29wIiwibGF0ZXN0UHJDaVJlc3VsdHMiLCJfbGF0ZXN0UHJDaVJlc3VsdHMiLCJfc3VtbWFyeSRwYXNzIiwiX3N1bW1hcnkkZmFpbCIsIl9zdW1tYXJ5JHBlbmRpbmciLCJfc3VtbWFyeSRza2lwcGluZyIsIl9zdW1tYXJ5JGNhbmNlbCIsImNoZWNrcyIsInJhdyIsInN1bW1hcnkiLCJfY2hlY2skYnVja2V0MiIsIl9zdW1tYXJ5JGJ1Y2tldCIsImNoZWNrIiwiYnVja2V0IiwiU3ludGF4RXJyb3IiLCJ0b3RhbCIsInBhc3MiLCJmYWlsIiwicGVuZGluZyIsInNraXBwaW5nIiwiY2FuY2VsIiwid2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsIl93YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwic2xlZXBGbiIsImxhdGVzdENpUmVzdWx0c0ZuIiwid3JpdGVQcm9ncmVzc0ZuIiwiYXR0ZW1wdHMiLCJjaVJlc3VsdHMiLCJjbGFzc2lmaWVkUmVzdWx0cyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDIiLCJmYWlsZWRSZXN1bHRzIiwicnVubmluZ1Jlc3VsdHMiLCJzbGVlcFNlY29uZHMiLCJjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyIsImZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZCIsImtleXMiLCJsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdyIsIndvcmtmbG93S2V5Iiwid29ya2Zsb3ciLCJmcm9tRW50cmllcyIsImxhdGVzdEF0dGVtcHRDaGVja3MiLCJncm91cHMiLCJ3b3JrZmxvd0F0dGVtcHRLZXkiLCJncm91cCIsImxhdGVzdEdyb3VwIiwidmFsdWVzIiwiY3VycmVudEdyb3VwIiwibGF0ZXN0R3JvdXBUaW1lc3RhbXAiLCJsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyIsImZpcnN0Q2hlY2siLCJsYXRlc3RDaGVjayIsIl9sYXRlc3RBdHRlbXB0Q2hlY2tzIiwibGF0ZXN0Q2hlY2tUaW1lc3RhbXAiLCJjbGFzc2lmaWNhdGlvbiIsIndvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24iLCJ0ZXN0UmVsYXRlZENoZWNrIiwid29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsiLCJfbGluayRtYXRjaCIsImxpbmsiLCJtYXRjaCIsIndvcmtmbG93UnVuIiwiX3dvcmtmbG93UnVuIiwicnVuSWQiLCJydW5Kc29uIiwiYnVja2V0cyIsIl9jaGVjayRidWNrZXQiLCJfY2hlY2skc3RhcnRlZEF0IiwidGltZXN0YW1wIiwiY29tcGxldGVkQXQiLCJzdGFydGVkQXQiLCJfc2xlZXBTZWNvbmRzIiwic2Vjb25kcyIsImNoZWNrUHJDaSIsIl9jaGVja1ByQ2kiLCJsYXRlc3RDb21taXRzIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nMiIsIndhaXRBdHRlbXB0cyIsIndhaXRUaW1lZE91dCIsImNsYXNzaWZpZWRMYXRlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QzIiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0NCIsInBheWxvYWQiLCJsYXRlc3RQckNvbW1pdFN1bW1hcmllcyIsIndhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrcyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0IiwiX3JlZjYiLCJjb21wYWN0V29ya2Zsb3ciLCJjb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJfb2JqZWN0U3ByZWFkIiwiYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMiLCJmYWlsZWRXb3JrZmxvd0xvZyIsImZhaWxlZF93b3JrZmxvd3MiLCJ0ZXN0X3dvcmtmbG93X291dHB1dCIsIl9yZWY3IiwiX3JlZjgiLCJydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MiLCJzdWNjZXNzZnVsQ2lPdXRwdXQiLCJsYXRlc3QiLCJfbGF0ZXN0UHJDb21taXRTdW1tYXJpZXMiLCJfcmVzcG9uc2UkZGF0YSRyZXBvc2kiLCJfcmVzcG9uc2UkZGF0YSIsIl95aWVsZCRjdXJyZW50UmVwb1BhciIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjIiLCJudW1iZXIiLCJOdW1iZXIiLCJyZXBvc2l0b3J5IiwicHVsbFJlcXVlc3QiLCJjb21taXRzIiwibm9kZXMiLCJmbGF0TWFwIiwibm9kZSIsIl9ub2RlJGNvbW1pdCIsIl9ub2RlJGNvbW1pdDIiLCJfbm9kZSRjb21taXQzIiwiZGF0ZSIsInN0cmluZ09yVW5kZWZpbmVkIiwiY29tbWl0IiwiY29tbWl0dGVkRGF0ZSIsImhhc2giLCJhYmJyZXZpYXRlZE9pZCIsInRpdGxlIiwibWVzc2FnZUhlYWRsaW5lIiwidG9SZXZlcnNlZCIsImZvcm1hdExhdGVzdENvbW1pdFNlY3Rpb24iLCJfY29tcGFjdFdvcmtmbG93UmVzdWx0IiwiX3N0cmluZ09yVW5kZWZpbmVkIiwicnVuIiwiZmFpbGVkSm9iIiwiZmFpbGVkV29ya2Zsb3dSdW5Kb2IiLCJqb2IiLCJqb2JfdXJsIiwidXJsIiwiZmFpbGVkX3N0ZXAiLCJmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lIiwicnVuX2lkIiwicnVuX3VybCIsImJyYW5jaCIsImhlYWRCcmFuY2giLCJzaGEiLCJoZWFkU2hhIiwiY29uY2x1c2lvbiIsIl9mYWlsZWRXb3JrZmxvd0xvZyIsImxvZyIsImZhaWxlZF9sb2ciLCJyZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyIsInNhbml0aXplZElucHV0Iiwic2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyIsInN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyIsImxpbmUiLCJqb2JOYW1lIiwiX3J1biRqb2JzJGZpbmQiLCJqb2JzIiwiZmluZCIsIl9qb2Ikc3RlcHMkZmluZCRuYW1lIiwiX2pvYiRzdGVwcyRmaW5kIiwiX2pvYiRzdGVwcyRmaW5kMiIsInN0ZXBzIiwic3RlcCIsImN1cnJlbnRCYXNlQnJhbmNoIiwiX2N1cnJlbnRCYXNlQnJhbmNoIiwiX3lpZWxkJGN1cnJlbnRQdWxsUmVxIiwiY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCIsImN1cnJlbnREZWZhdWx0QnJhbmNoIiwiX2N1cnJlbnREZWZhdWx0QnJhbmNoIiwiZGVmYXVsdEJyYW5jaCIsInJlcXVpcmVOb25FbXB0eSIsIl9jdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoIiwiYmFzZUJyYW5jaE91dHB1dCIsImJhc2VCcmFuY2giLCJpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmciLCJub3JtYWxpemVJc3N1ZU51bWJlciIsInJlZmVyZW5jZSIsImV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIiLCJub3JtYWxpemVQck51bWJlciIsImZldGNoSXNzdWVNZXNzYWdlcyIsIl9mZXRjaElzc3VlTWVzc2FnZXMiLCJpc3N1ZU51bWJlciIsImlzc3VlIiwiaXNzdWVNZXNzYWdlcyIsImZldGNoUHJNZXNzYWdlcyIsIl9mZXRjaFByTWVzc2FnZXMiLCJyZXNvbHZlZFByTnVtYmVyIiwiY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzIiwicHVsbF9yZXF1ZXN0IiwiZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIiwiX2ZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSIsInByTnVtYmVyT3V0cHV0IiwiX2N1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjMiLCJfeWllbGQkY3VycmVudFJlcG9QYXI0IiwicHJNZXNzYWdlcyIsInJlZmVyZW5jZVRleHQiLCJraW5kU2VnbWVudCIsIl9pc3N1ZU1lc3NhZ2VzIiwibWVzc2FnZXMiLCJmZXRjaE1ldGFkYXRhIiwibm91biIsInNlbGVjdE1ldGFkYXRhIiwicGFnaW5hdGVNZXNzYWdlcyIsInNlbGVjdENvbm5lY3Rpb24iLCJfcmVzcG9uc2UkZGF0YTIiLCJjb21tZW50cyIsIm1hcE5vZGUiLCJjb21tZW50TWVzc2FnZSIsIl9wck1lc3NhZ2VzIiwiaXNzdWVDb21tZW50cyIsInJldmlld3MiLCJfcmVzcG9uc2UkZGF0YTMiLCJwcklzc3VlQ29tbWVudHMiLCJwclJldmlld3MiLCJjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCIsImxlZnRDcmVhdGVkQXQiLCJjcmVhdGVkQXQiLCJyaWdodENyZWF0ZWRBdCIsIl9wcklzc3VlQ29tbWVudHMiLCJfcmVzcG9uc2UkZGF0YTQiLCJfcHJSZXZpZXdzIiwiX3Jlc3BvbnNlJGRhdGE1IiwicmV2aWV3TWVzc2FnZSIsIl9wYWdpbmF0ZU1lc3NhZ2VzIiwiY29uZmlnIiwiY3Vyc29yIiwiX2Nvbm5lY3Rpb24kcGFnZUluZm8kIiwiY29ubmVjdGlvbiIsImhhc01lc3NhZ2VCb2R5IiwicGFnZUluZm8iLCJoYXNOZXh0UGFnZSIsImVuZEN1cnNvciIsIl9mZXRjaE1ldGFkYXRhIiwiX21ldGFkYXRhJGF1dGhvciRsb2dpIiwiX21ldGFkYXRhJGF1dGhvciIsIl9tZXRhZGF0YSRib2R5IiwibWV0YWRhdGEiLCJhdXRob3IiLCJsb2dpbiIsImNvbW1lbnQiLCJfY29tbWVudCRhdXRob3IkbG9naW4iLCJfY29tbWVudCRhdXRob3IiLCJ0eXBlIiwicmV2aWV3IiwiX3JldmlldyRhdXRob3IkbG9naW4iLCJfcmV2aWV3JGF1dGhvciIsIl9yZXZpZXckc3RhdGUiLCJfcmV2aWV3JHN1Ym1pdHRlZEF0IiwiX3JldmlldyRib2R5Iiwic3RhdGUiLCJzdWJtaXR0ZWRBdCIsIm9wZW5QciIsIl9vcGVuUHIiLCJfdGVtcCIsImhlYWRPdXRwdXQiLCJoZWFkIiwiYmFzZU91dHB1dCIsImJhc2UiLCJjcmVhdGVBcmdzIiwidXBkYXRlUHIiLCJfdXBkYXRlUHIiLCJlZGl0UHIiLCJfZWRpdFByIiwiZWRpdEFyZ3MiLCJyZWFkUmVwbGllc0Zyb21TdGRpbiIsIl9yZWFkUmVwbGllc0Zyb21TdGRpbiIsIm5vcm1hbGl6ZWRSZXBsaWVzIiwidGhyZWFkSWQiLCJwYXJzZVJlcGx5SW5wdXQiLCJyZXBsaWVzIiwicGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwiX3BhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIm9uVGhyZWFkIiwiX3Jldmlld1RocmVhZHMkcGFnZUluIiwicmV2aWV3VGhyZWFkcyIsInRocmVhZCIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsImlkcyIsImlzUmVzb2x2ZWQiLCJpZCIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzIiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRzIiwidGhyZWFkcyIsImZpbGVUZXh0Q2FjaGUiLCJfcGFnZUluZm8kZW5kQ3Vyc29yIiwiX3BhZ2VJbmZvJGVuZEN1cnNvcjIiLCJjb21tZW50Q29ubmVjdGlvbiIsIl90aHJlYWQkcGF0aCIsIl90aHJlYWQkaXNPdXRkYXRlZCIsIm5vcm1hbGl6ZUNvbW1lbnQiLCJpc091dGRhdGVkIiwiX3RocmVhZCRwYXRoMiIsIl90aHJlYWQkaXNPdXRkYXRlZDIiLCJvcmlnaW5hbExpbmUiLCJzdGFydExpbmUiLCJvcmlnaW5hbFN0YXJ0TGluZSIsImxpc3RQclJldmlld1RocmVhZHMiLCJfbGlzdFByUmV2aWV3VGhyZWFkcyIsIl90NiIsInVucmVzb2x2ZWRfdGhyZWFkcyIsInJlc29sdmVQclJldmlld1RocmVhZHMiLCJfcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyIsInVucmVzb2x2ZWRJZHMiLCJyZXNvbHZlZFRocmVhZElkcyIsIl9zdGVwMiR2YWx1ZSIsImluZGV4IiwiX3N0ZXAyJHZhbHVlJCIsInJlc29sdmVSZXZpZXdUaHJlYWQiLCJyZXNvbHZlZF90aHJlYWRfaWRzIiwiX25vcm1hbGl6ZUNvbW1lbnQiLCJpc1RocmVhZE91dGRhdGVkIiwiX2F1dGhvciRsb2dpbiIsIl90MTEiLCJidWlsZFJldmlld1NuaXBwZXQiLCJzbmlwcGV0IiwicGFyc2VkIiwiX3R5cGVvZiIsImV2ZXJ5IiwicmVwbHkiLCJpc1JlcGx5SW5wdXQiLCJfeDIwIiwiX3gyMSIsIl94MjIiLCJfYnVpbGRSZXZpZXdTbmlwcGV0IiwicHJpbWFyeUxvY2F0aW9uIiwiZmFsbGJhY2tMb2NhdGlvbiIsImxvY2F0aW9uIiwiZmlsZVRleHQiLCJvcmlnaW5hbENvbW1lbnRMb2NhdGlvbiIsImN1cnJlbnRDb21tZW50TG9jYXRpb24iLCJmZXRjaEZpbGVUZXh0QXRFeHByZXNzaW9uIiwiZXhwcmVzc2lvbiIsInJlbmRlckxpbmVTbmlwcGV0IiwiZW5kTGluZSIsIl9jb21tZW50JGNvbW1pdCIsImNvbW1lbnRMb2NhdGlvbiIsIm9pZCIsIl9jb21tZW50JG9yaWdpbmFsQ29tbSIsIm9yaWdpbmFsQ29tbWl0IiwiX3gyMyIsIl94MjQiLCJfeDI1IiwiX3gyNiIsIl9mZXRjaEZpbGVUZXh0QXRFeHByZXNzaW9uIiwiY2FjaGVLZXkiLCJmZXRjaEZpbGVUZXh0IiwiX3gyNyIsIl94MjgiLCJfeDI5IiwiX2ZldGNoRmlsZVRleHQiLCJibG9iIiwib2JqZWN0IiwiaXNCaW5hcnkiLCJ0ZXh0IiwibGluZXMiLCJhdCIsInBvcCIsImNsYW1wZWRTdGFydExpbmUiLCJjbGFtcExpbmVOdW1iZXIiLCJjbGFtcGVkRW5kTGluZSIsImZpcnN0TGluZSIsImxhc3RMaW5lIiwibWluIiwibGluZU51bWJlcldpZHRoIiwic25pcHBldExpbmVzIiwibGluZU51bWJlciIsIl9saW5lcyIsIm1hcmtlciIsIm1heExpbmVOdW1iZXIiLCJidWlsZFBsYW5Qcm9tcHQiLCJfYnVpbGRQbGFuUHJvbXB0IiwiaXNzdWVZYW1sIiwiYnVpbGRNZXJnZUJhc2VDb21tYW5kIiwic2hlbGxRdW90ZSIsInJlcGxhY2VBbGwiLCJidWlsZFJldmlld1Byb21wdCIsIl9idWlsZFJldmlld1Byb21wdCIsImtub3duRmFjdHMiLCJtZXJnZUJhc2VDb21tYW5kIiwicHJDb250ZXh0IiwiYnVpbGRLbm93bkZhY3RzSW5zdHJ1Y3Rpb25zIiwiYnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMiLCJ0cmltbWVkRmFjdHMiLCJidWlsZFNjcmVlbnNob3RQcm9tcHQiLCJpbml0aWFsVXJsIiwicGFnZU5hbWUiLCJzY3JlZW5zaG90RGVzY3JpcHRpb24iLCJzYW5pdGl6ZWREZXNjcmlwdGlvbiIsImJ1aWxkU2ltcGxpZnlQcm9tcHQiLCJfYnVpbGRTaW1wbGlmeVByb21wdCIsIlRFWFRfRklMRV9FWFRFTlNJT05fUkVHRVgiLCJpbnN0YWxsUGFja2VkU2tpbGxzIiwiX2luc3RhbGxQYWNrZWRTa2lsbHMiLCJwYWNrYWdlUm9vdCIsInBhY2thZ2VNZXRhZGF0YSIsImluc3RhbGxTb3VyY2VSb290IiwiZmlsZVVSTFRvUGF0aCIsIlVSTCIsInJlYWRQYWNrYWdlTWV0YWRhdGEiLCJta2R0ZW1wIiwidG1wZGlyIiwiY3AiLCJyZXBsYWNlTGF0ZXN0U3BlY2lmaWVyV2l0aFBhY2thZ2VWZXJzaW9uIiwicm0iLCJmb3JjZSIsIl9yZWFkUGFja2FnZU1ldGFkYXRhIiwiYXNzZXJ0Iiwib2siLCJ2ZXJzaW9uIiwiX3JlcGxhY2VMYXRlc3RTcGVjaWZpZXJXaXRoUGFja2FnZVZlcnNpb24iLCJsYXRlc3RJbnN0YWxsU3BlY2lmaWVyIiwidmVyc2lvbmVkSW5zdGFsbFNwZWNpZmllciIsInJlcGxhY2VJbkZpbGVzIiwiY29udGVudCIsIl9yZXBsYWNlSW5GaWxlcyIsInJlcGxhY2VDb250ZW50IiwiZW50cnlQYXRoIiwicmVwbGFjZWRDb250ZW50IiwicGFyZW50UGF0aCIsIndyaXRlRmlsZSIsInByb2dyYW0iLCJDb21tYW5kIiwicnVuUmV2aWV3Q29tbWFuZCIsIl9ydW5SZXZpZXdDb21tYW5kIiwiX2NhbGxlZTEzIiwibW9kZSIsInByZXZpb3VzVmVyaWZpZWRGYWN0cyIsIl9jb250ZXh0MTMiLCJyZWFkUmV2aWV3VmVyaWZpZWRGYWN0cyIsIl9hZ2VudCIsIl9yZWFkUmV2aWV3VmVyaWZpZWRGYWN0cyIsIl9jYWxsZWUxNCIsIl9jb250ZXh0MTQiLCJhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kIiwiZGVzY3JpcHRpb24iLCJhbGxvd0V4Y2Vzc0FyZ3VtZW50cyIsImFyZ3VtZW50TmFtZSIsImFyZ3VtZW50IiwiYXJndW1lbnREZXNjcmlwdGlvbiIsImFkZE9wdGlvbiIsIk9wdGlvbiIsIm9wdGlvbkRlc2NyaXB0aW9uIiwiY2hvaWNlcyIsIm1ha2VPcHRpb25NYW5kYXRvcnkiLCJhY3Rpb24iLCJfY2FsbGVlMTAiLCJfbGVuIiwiX2tleSIsIl9yZWYxMiIsImFyZ3VtZW50T3JPcHRpb25zIiwibWF5YmVPcHRpb25zIiwiX2FyZ3MxMCIsIl9jb250ZXh0MTAiLCJhZGRBZ2VudENvbW1hbmQiLCJjb25maWdPclJ1biIsIl9jYWxsZWUxMiIsIl9jb250ZXh0MTIiLCJfY2FsbGVlMTEiLCJfY29udGV4dDExIiwiX3J1blByb21wdEFnZW50Q29tbWFuZCIsIl9jYWxsZWUxNSIsIl9jb250ZXh0MTUiLCJleHRyYWN0TWFya2Rvd25Db2RlQmxvY2siLCJidWlsZEFnZW50UHJvbXB0IiwiX2NvZGVCbG9ja01hdGNoZXMkYXQiLCJsYXN0Q29kZUJsb2NrQ29udGVudCIsIm1hdGNoQWxsIiwic2hvd0hlbHBBZnRlckVycm9yIiwicnVuUHJvbXB0QWdlbnRDb21tYW5kIiwiaXNzdWVSZWZlcmVuY2UiLCJwclJlZmVyZW5jZSIsInBhcnNlQXN5bmMiLCJhcmd2Il0sIm1hcHBpbmdzIjoiOzs7bXpIQW1CTyxJQUtEQSxFQUEwQixDQUFDLFNBQVUsVUFBVyxVQUNoREMsRUFBa0IsSUFBSUMsSUFDeEJDLEdBQTJCLEVBSS9CLFNBQXNCQyxFQUFzQkMsRUFBQUMsR0FBQSxPQUFBQyxFQUFBQyxNQUFBQyxLQUFBQyxVQUFBLENBa0MzQyxTQUFBSCxJQUFBLE9BQUFBLEVBQUFJLEVBQUFDLElBQUFDLEVBbENNLFNBQUFDLEVBQXNDQyxFQUFtQkMsR0FBMEIsSUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQSxPQUFBZixJQUFBZ0IsRUFBQSxTQUFBQyxHQUFBLGNBQUFBLEVBQUFDLEVBQUFELEVBQUFFLEdBQUEsS0FBQSxFQU1LLFlBTkwsSUFB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
|
|
4
|
+
var n,e,t="function"==typeof Symbol?Symbol:{},r=t.iterator||"@@iterator",a=t.toStringTag||"@@toStringTag";function i(t,r,a,i){var c=r&&r.prototype instanceof u?r:u,s=Object.create(c.prototype);return D(s,"_invoke",function(t,r,a){var i,u,c,s=0,l=a||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return i=e,u=0,c=n,p.n=t,o}};function d(t,r){for(u=t,c=r,e=0;!f&&s&&!a&&e<l.length;e++){var a,i=l[e],d=p.p,h=i[2];t>3?(a=h===r)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=n):i[0]<=d&&((a=t<2&&d<i[1])?(u=0,p.v=r,p.n=i[1]):d<h&&(a=t<3||i[0]>r||r>h)&&(i[4]=t,i[5]=r,p.n=h,u=0))}if(a||t>1)return o;throw f=!0,r}return function(a,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;){i||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,i){if(u||(a="next"),e=i[a]){if(!(e=e.call(i,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=i.return)&&e.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+a+"' method"),u=1);i=n}else if((e=(f=p.n<0)?c:t.call(r,p))!==o)break}catch(e){i=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(t,a,i),!0),s}var o={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][r]?e(e([][r]())):(D(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,D(n,a,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,D(f,"constructor",s),D(s,"constructor",c),c.displayName="GeneratorFunction",D(s,a,"GeneratorFunction"),D(f),D(f,a,"Generator"),D(f,r,function(){return this}),D(f,"toString",function(){return"[object Generator]"}),(T=function(){return{w:i,m:p}})()}function D(n,e,t,r){var a=Object.defineProperty;try{a({},"",{})}catch(n){a=0}D=function(n,e,t,r){function i(e,t){D(n,e,function(n){return this._invoke(e,t,n)})}e?a?a(n,e,{value:t,enumerable:!r,configurable:!r,writable:!r}):n[e]=t:(i("next",0),i("throw",1),i("return",2))},D(n,e,t,r)}function _(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 G(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,a,i,o,u=[],c=!0,s=!1;try{if(i=(t=t.call(n)).next,0===e){if(Object(t)!==t)return;c=!1}else for(;!(c=(r=i.call(t)).done)&&(u.push(r.value),u.length!==e);c=!0);}catch(n){s=!0,a=n}finally{try{if(!c&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(s)throw a}}return u}}(n,e)||U(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 M(n){return function(n){if(Array.isArray(n))return A(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||U(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 F(n){"@babel/helpers - typeof";return F="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},F(n)}function U(n,e){if(n){if("string"==typeof n)return A(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)?A(n,e):void 0}}var H=["SIGINT","SIGTERM","SIGHUP"],W=new Set,B=!1;function J(n,e){return Y.apply(this,arguments)}function Y(){return Y=P(T().m(function n(e,t){var r,i,o,u,c,s,l,f,p,d,h;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={}),i=a(null!=(r=e[0])?r:"",e.slice(1),{detached:!0,stdio:["ignore","pipe","pipe"]}),o=Q(i,t.timeoutMs),u=X(t.waitMessage,t.waitIntervalSeconds),n.n=1,nn(t.logFilePath);case 1:return c=n.v,n.p=2,n.n=3,Promise.all([Z(i.stdout,function(n){return c.write(n)}),Z(i.stderr,function(n){return c.write(n)}),new Promise(function(n,e){i.once("error",e),i.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(s=n.v,l=G(s,3),f=l[0],p=l[1],d=l[2],!o.timedOut()){n.n=4;break}throw new Error(K("".concat(f).concat(p),o.timeoutMs,e));case 4:if(0!==d){n.n=5;break}return n.a(2,f);case 5:throw h="".concat(f).concat(p),new Error(h||"Command failed: ".concat(e.join(" ")));case 6:return n.p=6,n.n=7,c.close();case 7:return o.clear(),u(),n.f(6);case 8:return n.a(2)}},n,null,[[2,,6,8]])})),Y.apply(this,arguments)}function K(n,e,t){var r="Command timed out after ".concat(function(n){if(n%36e5==0)return"".concat(n/36e5,"h");if(n%6e4==0)return"".concat(n/6e4,"m");if(n%1e3==0)return"".concat(n/1e3,"s");return"".concat(n,"ms")}(e),": ").concat(t.join(" "));return n.length>0?"".concat(n,"\n").concat(r):r}function Q(n,e){void 0===e&&(e=36e5);var t,r=!1;W.add(n),function(){if(B)return;B=!0;var n,e=q(H);try{var t=function(){var e=n.value;process.once(e,function(){var n,t=q(W);try{for(t.s();!(n=t.n()).done;){z(n.value,e)}}catch(n){t.e(n)}finally{t.f()}process.exit(128+function(n){switch(n){case"SIGINT":return 2;case"SIGTERM":return 15;case"SIGHUP":return 1}}(e))})};for(e.s();!(n=e.n()).done;)t()}catch(n){e.e(n)}finally{e.f()}}();var a=setTimeout(function(){r=!0,z(n,"SIGTERM"),(t=setTimeout(function(){return z(n,"SIGKILL")},5e3)).unref()},e);return a.unref(),{clear:function(){clearTimeout(a),t&&clearTimeout(t),W.delete(n)},timedOut:function(){return r},timeoutMs:e}}function z(n,e){if(n.pid&&n.pid>0)try{return void process.kill(-n.pid,e)}catch(n){}n.kill(e)}function Z(n,e){return V.apply(this,arguments)}function V(){return(V=P(T().m(function n(e,t){var r,a,i,o,u,c,s,l,f,p,d;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],a=new TextDecoder,i=!1,o=!1,n.p=2,c=$(e);case 3:return n.n=4,c.next();case 4:if(!(i=!(s=n.v).done)){n.n=6;break}l=s.value,f="string"==typeof l?l:a.decode(new Uint8Array(l),{stream:!0}),r.push(f),null==t||t(f);case 5:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,d=n.v,o=!0,u=d;case 8:if(n.p=8,n.p=9,!i||null==c.return){n.n=10;break}return n.n=10,c.return();case 10:if(n.p=10,!o){n.n=11;break}throw u;case 11:return n.f(10);case 12:return n.f(8);case 13:return(p=a.decode())&&(r.push(p),null==t||t(p)),n.a(2,r.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function X(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,a=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(a),t("\n")}}function nn(n){return en.apply(this,arguments)}function en(){return en=P(T().m(function n(e){var t,r,a;return T().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=P(T().m(function n(){return T().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,u(m(e),{recursive:!0});case 3:return(r=o(e,{flags:"w"})).on("error",t),n.a(2,{write:function(n){r.writable&&r.write(n)},close:function(){var n=P(T().m(function n(){return T().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,a=n.v,t(a),n.a(2,{write:function(){},close:function(){var n=P(T().m(function n(){return T().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),en.apply(this,arguments)}var tn="There is no concern.",rn=["codex","claude","gemini"],an=new RegExp("\\b".concat("there is no concern","\\b"),"i"),on={allAgentsLabel:"agents"};function un(n,e){return cn.apply(this,arguments)}function cn(){return(cn=P(T().m(function n(e,t){var r,a,i,o;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=on),n.n=1,e;case 1:return r=n.v,a=X(wn(t.allAgentsLabel)),n.p=2,n.n=3,Promise.all(rn.map(P(T().m(function n(e){var a,i,o,u,c;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,sn(e,r,{waitMessage:!1});case 1:if(o=n.v,u=o.trim(),c=null==(a=(i=t).mapOutput)?void 0:a.call(i,e,u),!t.mapOutput||void 0!==c){n.n=2;break}return n.a(2);case 2:return n.a(2,mn(e,null!=c?c:hn(e,u)));case 3:return n.p=3,n.v,n.a(2,mn(e,vn(e)))}},n,null,[[0,3]])}))));case 3:return i=n.v,o=i.filter(function(n){return void 0!==n}),n.a(2,o.join("\n\n"));case 4:return n.p=4,a(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function sn(n,e,t){return ln.apply(this,arguments)}function ln(){return(ln=P(T().m(function n(e,t,r){var a,i,o,u;return T().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r={}),i=J,o=fn,u=e,n.n=1,t;case 1:return n.a(2,i(o(u,n.v),{logFilePath:yn(e),waitMessage:null!=(a=r.waitMessage)?a:wn(pn(e))}))}},n)}))).apply(this,arguments)}function fn(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 pn(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function dn(n){return an.test(n)}function hn(n,e){return 0===e.length?vn(n):dn(e)?tn:e}function mn(n,e){return"## ".concat(pn(n),"\n\n").concat(e)}function vn(n){return"".concat(pn(n)," did not return a review result.")}function wn(n){return"Waiting for ".concat(n," to finish.")}function yn(n){return"logs/".concat(n,"-").concat((e=new Date,t=G([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(gn),5),r=t[0],a=t[1],i=t[2],o=t[3],u=t[4],"".concat(r).concat(a,"-").concat(i).concat(o).concat(u)),".log");var e,t,r,a,i,o,u}function gn(n){return n.toString().padStart(2,"0")}var bn=["dependencies","devDependencies","peerDependencies","optionalDependencies"],kn=new Set([".git","node_modules"]),xn=["bun","update","--latest"];function Sn(n){return jn.apply(this,arguments)}function jn(){return(jn=P(T().m(function n(e){var t,r,a,i,o;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===e&&(e=process.cwd()),n.n=1,In(e);case 1:return t=n.v,n.n=2,Yn(e,t);case 2:return n.n=3,Vn(e,"root");case 3:r=q(t),n.p=4,r.s();case 5:if((a=r.n()).done){n.n=7;break}return i=a.value,n.n=6,Vn(v(e,i),i);case 6:n.n=5;break;case 7:n.n=9;break;case 8:n.p=8,o=n.v,r.e(o);case 9:return n.p=9,r.f(),n.f(9);case 10:return n.a(2)}},n,null,[[4,8,9,10]])}))).apply(this,arguments)}function In(n){return On.apply(this,arguments)}function On(){return(On=P(T().m(function n(e){var t,r,a,i,o,u,c,s,l,f,p,d,h,m;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return h=An,n.n=1,Qn(e);case 1:return t=h(n.v),n.n=2,$n(e,t);case 2:r=n.v,a=new Set,i=new Set,o=q(t),n.p=3,o.s();case 4:if((u=o.n()).done){n.n=7;break}return c=u.value,s=c.startsWith("!"),n.n=5,Fn(e,r,s?c.slice(1):c);case 5:l=n.v,f=q(l);try{for(f.s();!(p=f.n()).done;)d=p.value,s?i.add(d):a.add(d)}catch(n){f.e(n)}finally{f.f()}case 6:n.n=4;break;case 7:n.n=9;break;case 8:n.p=8,m=n.v,o.e(m);case 9:return n.p=9,o.f(),n.f(9);case 10:return n.a(2,M(a).filter(function(n){return"."!==n&&!i.has(n)}).toSorted(function(n,e){return n.localeCompare(e)}))}},n,null,[[3,8,9,10]])}))).apply(this,arguments)}function An(n){var e,t=n.workspaces,r=void 0===t?[]:t;return Array.isArray(r)?r:null!=(e=r.packages)?e:[]}function $n(n,e){return Cn.apply(this,arguments)}function Cn(){return(Cn=P(T().m(function n(e,t){var r,a,i,o,u,c,s,l,f,p,d,h;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:r=new Set,a=Rn(t),i=q(a),n.p=1,i.s();case 2:if((o=i.n()).done){n.n=7;break}return u=o.value,c=u.maxDepth,s=u.root,n.n=3,Tn(e,s);case 3:if(n.v){n.n=4;break}return n.a(3,6);case 4:return d=q,n.n=5,_n(e,s,c);case 5:l=d(n.v);try{for(l.s();!(f=l.n()).done;)p=f.value,r.add(p)}catch(n){l.e(n)}finally{l.f()}case 6:n.n=2;break;case 7:n.n=9;break;case 8:n.p=8,h=n.v,i.e(h);case 9:return n.p=9,i.f(),n.f(9);case 10:return n.a(2,M(r))}},n,null,[[1,8,9,10]])}))).apply(this,arguments)}function Rn(n){var e,t=new Map,r=q(n);try{for(r.s();!(e=r.n()).done;){var a=e.value;if(!a.startsWith("!"))for(var i=0,o=Pn(a);i<o.length;i++){var u=o[i];t.set(u.root,t.has(u.root)?qn(t.get(u.root),u.maxDepth):u.maxDepth)}}}catch(n){r.e(n)}finally{r.f()}return M(t.entries()).map(function(n){var e=G(n,2),t=e[0];return{maxDepth:e[1],root:t}}).filter(function(n){return!function(n,e){return M(e.entries()).some(function(e){var t,r,a=G(e,2),i=a[0],o=a[1];return i!==n.root&&("."===i||n.root.startsWith("".concat(i,"/")))&&(t=o,r=n.maxDepth,void 0===t||void 0!==r&&t>=r)})}(n,t)}).toSorted(function(n,e){return n.root.localeCompare(e.root)})}function Pn(n){return b(Hn(n)).map(function(n){return{maxDepth:Nn(n),root:En(n)}})}function qn(n,e){return void 0===n||void 0===e?void 0:Math.max(n,e)}function En(n){var e,t=[],r=q(n.split("/"));try{for(r.s();!(e=r.n()).done;){var a=e.value;if(""===a||Ln(a))break;t.push(a)}}catch(n){r.e(n)}finally{r.f()}return 0===t.length?".":t.join("/")}function Ln(n){return/[*?[\]{}()!+]/.test(n)}function Nn(n){if(!n.split("/").includes("**"))return Mn(n)}function Tn(n,e){return Dn.apply(this,arguments)}function Dn(){return(Dn=P(T().m(function n(e,t){var r;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,s(v(e,t));case 1:return r=n.v,n.a(2,r.isDirectory());case 2:return n.p=2,n.v,n.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function _n(n,e,t){return Gn.apply(this,arguments)}function Gn(){return(Gn=P(T().m(function n(e,t,r){var a,i,o,u,c,s,f,p,d,h;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:if(void 0===t&&(t="."),a=[t],!(void 0!==r&&Mn(t)>=r)){n.n=1;break}return n.a(2,a);case 1:return n.n=2,l(v(e,t),{withFileTypes:!0});case 2:i=n.v,o=q(i),n.p=3,o.s();case 4:if((u=o.n()).done){n.n=9;break}if((c=u.value).isDirectory()&&!kn.has(c.name)){n.n=5;break}return n.a(3,8);case 5:if(s=v(t,c.name).split(y).join("/"),!(void 0!==r&&Mn(s)>r)){n.n=6;break}return n.a(3,8);case 6:return f=a.push,p=a,d=M,n.n=7,_n(e,s,r);case 7:f.apply.call(f,p,d(n.v));case 8:n.n=4;break;case 9:n.n=11;break;case 10:n.p=10,h=n.v,o.e(h);case 11:return n.p=11,o.f(),n.f(11);case 12:return n.a(2,a)}},n,null,[[3,10,11,12]])}))).apply(this,arguments)}function Mn(n){return"."===n?0:n.split("/").length}function Fn(n,e,t){return Un.apply(this,arguments)}function Un(){return(Un=P(T().m(function n(e,t,r){var a,i,o,u,c,s,l;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:a=Wn(Hn(r)),i=[],o=q(t),n.p=1,o.s();case 2:if((u=o.n()).done){n.n=6;break}if(c=u.value,!(s=a(c))){n.n=4;break}return n.n=3,Bn(e,c);case 3:s=n.v;case 4:if(!s){n.n=5;break}i.push(c);case 5:n.n=2;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,o.e(l);case 8:return n.p=8,o.f(),n.f(8);case 9:return n.a(2,i)}},n,null,[[1,7,8,9]])}))).apply(this,arguments)}function Hn(n){var e=function(n){var e=n.split(y).join("/");return""===e?".":e}(n).replace(/\/$/,"");return"."===e?e:e.startsWith("./")?e.slice(2):e}function Wn(n){return function(e){return g(e,n,{dot:!0})}}function Bn(n,e){return Jn.apply(this,arguments)}function Jn(){return(Jn=P(T().m(function n(e,t){var r;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,s(v(e,t,"package.json"));case 1:return r=n.v,n.a(2,r.isFile());case 2:return n.p=2,n.v,n.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function Yn(n,e){return Kn.apply(this,arguments)}function Kn(){return(Kn=P(T().m(function n(e,t){var r,a,i,o,u,c,s,l;return T().w(function(n){for(;;)switch(n.n){case 0:r=[],a=0,i=["."].concat(M(t));case 1:if(!(a<i.length)){n.n=4;break}return o=i[a],n.n=2,Qn("."===o?e:v(e,o));case 2:u=n.v,c=q(Zn(u));try{for(c.s();!(s=c.n()).done;)l=s.value,r.push("".concat("."===o?"root":o,": ").concat(l))}catch(n){c.e(n)}finally{c.f()}case 3:a++,n.n=1;break;case 4:if(0!==r.length){n.n=5;break}return n.a(2);case 5:throw new Error(["Cannot safely update Bun workspace dependencies with catalog references.","Update catalog versions in the root package.json, then run bun install.","Catalog-managed dependencies: ".concat(r.join(", "))].join("\n"));case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Qn(n){return zn.apply(this,arguments)}function zn(){return(zn=P(T().m(function n(e){var t,r,a;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return t=v(e,"package.json"),n.p=1,r=JSON,n.n=2,c(t,"utf8");case 2:return n.a(2,r.parse.call(r,n.v));case 3:throw n.p=3,a=n.v,new Error("Failed to read ".concat(t,": ").concat(String(a)));case 4:return n.a(2)}},n,null,[[1,3]])}))).apply(this,arguments)}function Zn(n){var e,t=[],r=q(bn);try{for(r.s();!(e=r.n()).done;){var a=n[e.value];if(a)for(var i=0,o=Object.entries(a);i<o.length;i++){var u=G(o[i],2),c=u[0];u[1].startsWith("catalog:")&&t.push(c)}}}catch(n){r.e(n)}finally{r.f()}return t}function Vn(n,e){return Xn.apply(this,arguments)}function Xn(){return(Xn=P(T().m(function n(e,t){return T().w(function(n){for(;;)switch(n.n){case 0:return process.stdout.write("\n# ".concat(t,"\n")),n.n=1,ne(xn,e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function ne(n,e){return ee.apply(this,arguments)}function ee(){return(ee=P(T().m(function n(e,t){var r;return T().w(function(n){for(;;)switch(n.n){case 0:return r=a(e[0],e.slice(1),{cwd:t,stdio:"inherit"}),n.n=1,new Promise(function(n,a){r.once("error",a),r.once("close",function(r){0!==r?a(new Error("Command failed in ".concat(w(process.cwd(),t)||".",": ").concat(e.join(" ")))):n()})});case 1:return n.a(2)}},n)}))).apply(this,arguments)}var te={blockQuote:"literal",lineWidth:0};function re(n){r.write("".concat(n,"\n"))}function ae(n,e){void 0===e&&(e=1),r.write("".concat(n,"\n")),process.exit(e)}function ie(){return oe.apply(this,arguments)}function oe(){return(oe=P(T().m(function n(){return T().w(function(n){for(;;)switch(n.n){case 0:if(!t.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,Z(t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function ue(n){return ce.apply(this,arguments)}function ce(){return(ce=P(T().m(function n(e){var t;return T().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,ie();case 1:if(!((t=n.v).length>0)){n.n=2;break}return n.a(2,t);case 2:ae(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function se(n,e){return le.apply(this,arguments)}function le(){return le=P(T().m(function n(e,t){var r,i,o,u,c;return T().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),i=null!=(r=t.allowedExitCodes)?r:[],o=T().m(function n(){var r,o,u,s,l,f,p,d,h,m,v;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return o=a(null!=(r=e[0])?r:"",e.slice(1),{detached:!0,stdio:["pipe","pipe","pipe"]}),s=!1,l=Q(o),n.p=1,void 0!==t.stdinData?o.stdin.end(t.stdinData):o.stdin.end(),n.n=2,Promise.all([Z(o.stdout),Z(o.stderr),new Promise(function(n,e){o.once("error",e),o.once("close",function(e){return n(null!=e?e:1)})})]);case 2:if(f=n.v,p=G(f,3),d=p[0],h=p[1],m=p[2],v="".concat(d).concat(h),!l.timedOut()){n.n=3;break}u=K(v,l.timeoutMs,e),n.n=5;break;case 3:if(0!==m&&!i.includes(m)){n.n=4;break}return n.a(2,{v:v});case 4:je(e,m,v)&&c<3?s=!0:u=v||"Command failed: ".concat(e.join(" "));case 5:return n.p=5,l.clear(),n.f(5);case 6:if(!s){n.n=8;break}return re("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=7,k(1e3*c);case 7:return n.a(2,0);case 8:u&&ae(u);case 9:return n.a(2)}},n,null,[[1,,5,6]])}),c=1;case 1:if(!(c<=3)){n.n=5;break}return n.d(_(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:ae("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),le.apply(this,arguments)}function fe(n,e){return pe.apply(this,arguments)}function pe(){return(pe=P(T().m(function n(e,t){return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,se(["gh"].concat(M(e)),{stdinData:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function de(n,e,t){return he.apply(this,arguments)}function he(){return(he=P(T().m(function n(e,t,r){return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,se(["gh"].concat(M(e)),{stdinData:r,allowedExitCodes:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function me(){return ve.apply(this,arguments)}function ve(){return(ve=P(T().m(function n(){var e,t,r,a,i,o;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fe(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v,t=e.trim(),r=t.split("/",2),a=G(r,2),i=a[0],o=a[1],i&&o||ae("Error: could not determine current repository"),n.a(2,[i,o])}},n)}))).apply(this,arguments)}function we(){return ye.apply(this,arguments)}function ye(){return(ye=P(T().m(function n(){var e;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fe(["pr","view","--json","number","--jq",".number"]);case 1:return e=n.v,n.a(2,e.trim())}},n)}))).apply(this,arguments)}function ge(n,e){return be.apply(this,arguments)}function be(){return(be=P(T().m(function n(e,t){var r,a,i,o,u,c,s,l,f;return T().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),r=["api","graphql","-F","query=@-"],a=0,i=Object.entries(t);case 1:if(!(a<i.length)){n.n=4;break}if(o=G(i[a],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:a++,n.n=1;break;case 4:return f=JSON,n.n=5,fe(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"),ae("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function ke(n){return S(n,te)}function xe(n){return structuredClone(n)}function Se(n,e){var t,r,a,o,u=i(null!=(t=n[0])?t:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(r=u.status)?r:u.error?1:0,output:"".concat(null!=(a=u.stdout)?a:"").concat(null!=(o=u.stderr)?o:"")}}function je(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)}var Ie=/\btest\b/i,Oe=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],Ae=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/,$e=0===Se(["rtk","--version"]).exitCode,Ce=function(){};function Re(n){return Pe.apply(this,arguments)}function Pe(){return(Pe=P(T().m(function n(e){var t,r,a,i,o,u,c,s,l,f,p,d,h,m,v,w;return T().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,de(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,!((w=n.v)instanceof SyntaxError)){n.n=4;break}c=[],n.n=5;break;case 4:throw w;case 5:l={},f=q(c);try{for(f.s();!(p=f.n()).done;)m=p.value,v=null!=(d=m.bucket)?d:"",l[v]=(null!=(h=l[v])?h:0)+1}catch(n){f.e(n)}finally{f.f()}return n.a(2,{summary:{total:c.length,pass:null!=(t=l.pass)?t:0,fail:null!=(r=l.fail)?r:0,pending:null!=(a=l.pending)?a:0,skipping:null!=(i=l.skipping)?i:0,cancel:null!=(o=l.cancel)?o:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function qe(n,e,t,r){return Ee.apply(this,arguments)}function Ee(){return(Ee=P(T().m(function n(e,t,a,i){var o,u,c,s,l,f,p,d;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=He),void 0===a&&(a=Re),void 0===i&&(i=function(n){return r.write(n)}),o=0,n.n=1,a(e);case 1:u=n.v,c=Ce,n.p=2;case 3:if(s=Le(u),l=Ne(s),f=G(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,[u,o,!1]);case 4:if(!(o>=100)){n.n=5;break}return n.a(2,[u,o,!0]);case 5:return 1===(o+=1)&&(c=X("Waiting for test-related workflows to finish.",36,i)),n.n=6,t(36);case 6:return n.n=7,a(e);case 7:u=n.v;case 8:n.n=3;break;case 9:return n.p=9,c(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function Le(n){var e,t={},r=q(n.checks);try{for(r.s();!(e=r.n()).done;){var a=e.value,i=a.workflow||a.name||"unknown_workflow";null!=t[i]||(t[i]=[]),t[i].push(a)}}catch(n){r.e(n)}finally{r.f()}return Object.fromEntries(Object.entries(t).map(function(n){var e=G(n,2),t=e[0],r=function(n){var e,t=new Map,r=q(n);try{for(r.s();!(e=r.n()).done;){var a=e.value,i=Ge(a),o=t.get(i);o?o.push(a):t.set(i,[a])}}catch(n){r.e(n)}finally{r.f()}var u,c=[],s=q(t.values());try{for(s.s();!(u=s.n()).done;){var l=u.value;0!==c.length?Ye(l)>Ye(c)&&(c=l):c=l}}catch(n){s.e(n)}finally{s.f()}return c}(e[1]),a=r[0];a||ae("Error: no checks found for workflow ".concat(t));for(var i=a,o=0,u=r;o<u.length;o++){var c=u[o];Fe(c)>Fe(i)&&(i=c)}return[t,{classification:Me(r),check:i,checks:r}]}))}function Ne(n){for(var e={},t={},r=0,a=Object.entries(n);r<a.length;r++){var i=G(a[r],2),o=i[0],u=i[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Ue(n)})&&(t[o]=u):e[o]=u}return[e,t]}function Te(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 De(n){return _e.apply(this,arguments)}function _e(){return(_e=P(T().m(function n(e){var t,a;return T().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,de(["run","view",e,"--json",Oe.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,!((a=n.v)instanceof SyntaxError)){n.n=5;break}return r.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(a.message,"\n")),n.a(2,void 0);case 5:throw a;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function Ge(n){var e=Te(n);return e?"run:".concat(e):"unknown_run"}function Me(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 Fe(n){var e,t=n.completedAt;return t&&"0001-01-01T00:00:00Z"!==t?t:null!=(e=n.startedAt)?e:""}function Ue(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&Ie.test(n)})}function He(n){return We.apply(this,arguments)}function We(){return(We=P(T().m(function n(e){return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,k(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Be(){return Je.apply(this,arguments)}function Je(){return(Je=P(T().m(function n(){var e,t,r,a,i,o,u,c,s,l,f,p,d;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,we();case 1:return e=n.v,n.n=2,Ke(e);case 2:return t=n.v,re("Fetching latest CI results..."),n.n=3,qe(e);case 3:if(r=n.v,a=G(r,3),i=a[0],o=a[1],u=a[2],c=Le(i),s=Ne(c),l=G(s,2),f=l[0],p=l[1],d={summary:xe(i.summary),waited_for_test_related_checks:o>0,test_related_check_wait_attempts:o,test_related_check_wait_timed_out:u,latestCommits:t},!(Object.keys(f).length>0)){n.n=5;break}return n.n=4,Promise.all(Object.entries(f).map(P(T().m(function n(e){var t,r,a,i,o,u,c;return T().w(function(n){for(;;)switch(n.n){case 0:return t=G(e,2),r=t[0],a=t[1],n.n=1,Ze(r,a);case 1:return i=n.v,o=N,u=N({},i),c=et,n.n=2,Xe(a.check);case 2:return n.a(2,o(u,c(n.v)))}},n)}))));case 4:return d.failed_workflows=n.v,n.a(2,{output:ke(d),exitCode:1});case 5:if(!(Object.keys(p).length>0)){n.n=7;break}return d.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=6,Promise.all(Object.entries(p).map(function(n){var e=G(n,2);return Ze(e[0],e[1])}));case 6:return d.running_test_related_workflows=n.v,n.a(2,{output:ke(d),exitCode:1});case 7:return n.a(2,{output:ze(t),exitCode:0})}},n)}))).apply(this,arguments)}function Ye(n){var e,t="",r=q(n);try{for(r.s();!(e=r.n()).done;){var a=Fe(e.value);a>t&&(t=a)}}catch(n){r.e(n)}finally{r.f()}return t}function Ke(n){return Qe.apply(this,arguments)}function Qe(){return(Qe=P(T().m(function n(e){var t,r,a,i,o,u,c;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,me();case 1:return a=n.v,i=G(a,2),o=i[0],u=i[1],n.n=2,ge("\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n commits(last: 3) {\n nodes {\n commit {\n committedDate\n abbreviatedOid\n messageHeadline\n }\n }\n }\n }\n }\n }\n",{owner:o,name:u,number:Number(e)});case 2:return c=n.v,n.a(2,(null!=(t=null==(r=c.data)||null==(r=r.repository)||null==(r=r.pullRequest)||null==(r=r.commits)?void 0:r.nodes)?t:[]).flatMap(function(n){var e,t,r,a=at(null==(e=n.commit)?void 0:e.committedDate),i=at(null==(t=n.commit)?void 0:t.abbreviatedOid),o=at(null==(r=n.commit)?void 0:r.messageHeadline);return a&&i&&o?[{date:a,hash:i,title:o}]:[]}).toReversed())}},n)}))).apply(this,arguments)}function ze(n){return"All CI workflows passed.\n".concat(function(n){if(0===n.length)return"Latest commits: unavailable.\n";return ke({latestCommits:n})}(n))}function Ze(n,e){return Ve.apply(this,arguments)}function Ve(){return(Ve=P(T().m(function n(e,t){var r,a,i,o;return T().w(function(n){for(;;)switch(n.n){case 0:return a=Te(t.check),n.n=1,De(a);case 1:return i=n.v,o=it(i,at(t.check.name)),n.a(2,{classification:t.classification,workflow:e,job:at(t.check.name),job_url:at(null==o?void 0:o.url),failed_step:ot(o),run_id:a,run_url:null!=(r=at(null==i?void 0:i.url))?r:at(t.check.link),branch:at(null==i?void 0:i.headBranch),sha:at(null==i?void 0:i.headSha),conclusion:at(null==i?void 0:i.conclusion)})}},n)}))).apply(this,arguments)}function Xe(n){return nt.apply(this,arguments)}function nt(){return(nt=P(T().m(function n(e){var t;return T().w(function(n){for(;;)switch(n.n){case 0:if(t=Te(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,de(["run","view",t,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function et(n){return{failed_log:tt(n)}}function tt(n){var e=rt(x(n));if(!$e)return e;var t=Se(["rtk","log"],e);return 0===t.exitCode&&t.output.trim().length>0?rt(t.output):e}function rt(n){return n.split("\n").map(function(n){return n.replace(Ae,"")}).join("\n").trim()}function at(n){return"string"==typeof n&&n.length>0?n:void 0}function it(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 ot(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 ut(){return ct.apply(this,arguments)}function ct(){return(ct=P(T().m(function n(){var e,t;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ft();case 1:if(null==(e=n.v)){n.n=2;break}t=e,n.n=4;break;case 2:return n.n=3,st();case 3:t=n.v;case 4:return n.a(2,t)}},n)}))).apply(this,arguments)}function st(){return lt.apply(this,arguments)}function lt(){return(lt=P(T().m(function n(){var e;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,J(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return e=n.v,n.a(2,ht(e.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function ft(){return pt.apply(this,arguments)}function pt(){return(pt=P(T().m(function n(){var e,t,r;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,J(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v,t=e.trim(),n.a(2,t.length>0?t:void 0);case 2:if(n.p=2,!dt(r=n.v)){n.n=3;break}return n.a(2,void 0);case 3:throw r;case 4:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function dt(n){return/no pull requests? found for branch/i.test(String(n))}function ht(n,e){if(n.length>0)return n;throw new Error(e)}function mt(n){return It(n,"issue")}function vt(n){return It(n,"pull request")}function wt(n){return yt.apply(this,arguments)}function yt(){return(yt=P(T().m(function n(e){var t,r,a,i,o;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,me();case 1:return t=n.v,r=G(t,2),a=r[0],i=r[1],n.n=2,Ot(a,i,mt(e));case 2:return o=n.v,re("Fetched issue #".concat(o.number," messages.")),n.a(2,ke({issue:o}))}},n)}))).apply(this,arguments)}function gt(n){return bt.apply(this,arguments)}function bt(){return(bt=P(T().m(function n(e){var t,r,a;return T().w(function(n){for(;;)switch(n.n){case 0:if(void 0!==e){n.n=2;break}return n.n=1,we();case 1:a=n.v,n.n=3;break;case 2:a=vt(e);case 3:return t=a,n.n=4,St(t);case 4:return r=n.v,re("Fetched pull request #".concat(r.number," messages.")),n.a(2,ke({pull_request:r}))}},n)}))).apply(this,arguments)}function kt(){return xt.apply(this,arguments)}function xt(){return(xt=P(T().m(function n(){var e,t,r;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,de(["pr","view","--json","number","--jq",".number"],[1]);case 1:if(e=n.v,t=e.trim(),!dt(e)&&/^\d+$/.test(t)){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,St(t);case 3:return r=n.v,n.a(2,ke({pull_request:r}))}},n)}))).apply(this,arguments)}function St(n){return jt.apply(this,arguments)}function jt(){return(jt=P(T().m(function n(e){var t,r,a,i;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,me();case 1:return t=n.v,r=G(t,2),a=r[0],i=r[1],n.n=2,$t(a,i,e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function It(n,e){var t=String(n).trim();if(0===t.length&&ae("Error: ".concat(e," reference is required"),2),/^\d+$/.test(t))return t;var r="issue"===e?"issues":"pull",a=t.match(new RegExp("^https?://(?:www\\.)?github\\.com/[^/]+/[^/]+/".concat(r,"/(\\d+)(?:/|$)")));if(null!=a&&a[1])return a[1];ae("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(t,'"'),2)}function Ot(n,e,t){return At.apply(this,arguments)}function At(){return(At=P(T().m(function n(e,t,r){var a,i;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Dt({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 a=n.v,n.n=2,Nt({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:Gt});case 2:return i=n.v,n.a(2,N(N({},a),{},{messages:i}))}},n)}))).apply(this,arguments)}function $t(n,e,t){return Ct.apply(this,arguments)}function Ct(){return(Ct=P(T().m(function n(e,t,r){var a,i,o,u,c;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Dt({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 a=n.v,n.n=2,Promise.all([Pt(e,t,r),Et(e,t,r)]);case 2:return i=n.v,o=G(i,2),u=o[0],c=o[1],n.a(2,N(N({},a),{},{messages:[].concat(M(u),M(c)).toSorted(Rt)}))}},n)}))).apply(this,arguments)}function Rt(n,e){var t="string"==typeof n.createdAt?n.createdAt:"",r="string"==typeof e.createdAt?e.createdAt:"";return t.localeCompare(r)}function Pt(n,e,t){return qt.apply(this,arguments)}function qt(){return(qt=P(T().m(function n(e,t,r){return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Nt({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:Gt});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Et(n,e,t){return Lt.apply(this,arguments)}function Lt(){return(Lt=P(T().m(function n(e,t,r){return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Nt({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:Mt});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Nt(n){return Tt.apply(this,arguments)}function Tt(){return(Tt=P(T().m(function n(e){var t,r,a,i,o;return T().w(function(n){for(;;)switch(n.n){case 0:r=[];case 1:return o=e,n.n=2,ge(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:t});case 2:if(i=o.selectConnection.call(o,n.v)){n.n=3;break}return n.a(2,r);case 3:if(r.push.apply(r,M(i.nodes.map(e.mapNode).filter(Ft))),i.pageInfo.hasNextPage){n.n=4;break}return n.a(2,r);case 4:t=null!=(a=i.pageInfo.endCursor)?a:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Dt(n){return _t.apply(this,arguments)}function _t(){return(_t=P(T().m(function n(e){var t,r,a,i,o;return T().w(function(n){for(;;)switch(n.n){case 0:return o=e,n.n=1,ge(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(i=o.selectMetadata.call(o,n.v))||ae("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:i.number,title:i.title,url:i.url,author:null!=(t=null==(r=i.author)?void 0:r.login)?t:void 0,body:null!=(a=i.body)?a:""})}},n)}))).apply(this,arguments)}function Gt(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 Mt(n){var e,t,r,a,i;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!=(a=n.submittedAt)?a:void 0,url:n.url,body:null!=(i=n.body)?i:""}}function Ft(n){return"string"==typeof n.body&&n.body.length>0}function Ut(n){return Ht.apply(this,arguments)}function Ht(){return(Ht=P(T().m(function n(e){var t,r,a,i,o,u,c,s,l,f;return T().w(function(n){for(;;)switch(n.n){case 0:return r=(t=void 0===e?{}:e).body,a=t.title,n.n=1,se(["git","branch","--show-current"]);case 1:return i=n.v,o=i.trim(),n.n=2,fe(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return u=n.v,c=u.trim(),o||ae("Error: could not determine current branch"),c||ae("Error: could not determine default branch"),o===c&&ae("Error: current branch is the default branch (".concat(c,")")),s=["pr","create","--base",c,"--head",o,"--fill"],a&&s.push("--title",a),r&&s.push("--body-file","-"),re("Creating pull request..."),n.n=3,fe(s,r);case 3:return l=ke,f=JSON,n.n=4,fe(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,l(f.parse.call(f,n.v)))}},n)}))).apply(this,arguments)}function Wt(n){return Bt.apply(this,arguments)}function Bt(){return(Bt=P(T().m(function n(e){var t,r,a;return T().w(function(n){for(;;)switch(n.n){case 0:return t=e.body,r=e.title,n.n=1,we();case 1:return a=n.v,re("Updating pull request #".concat(a,"...")),n.n=2,Jt(a,["--title",r,"--body-file","-"],t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Jt(n,e,t){return Yt.apply(this,arguments)}function Yt(){return(Yt=P(T().m(function n(e,t,r){var a,i;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fe(["pr","edit",e].concat(M(t)),r);case 1:return a=ke,i=JSON,n.n=2,fe(["pr","view",e,"--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author,body"]);case 2:return n.a(2,a(i.parse.call(i,n.v)))}},n)}))).apply(this,arguments)}function Kt(){return Qt.apply(this,arguments)}function Qt(){return(Qt=P(T().m(function n(){var e,t,r,a,i,o,u,c;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ue("Error: JSON input is required on stdin");case 1:for(e=n.v,t=cr(e),r={},a=0,i=Object.entries(t.replies);a<i.length;a++)o=G(i[a],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 zt(n,e,t,r,a){return Zt.apply(this,arguments)}function Zt(){return(Zt=P(T().m(function n(e,t,r,a,i){var o,u,c,s,l,f,p,d,h;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,ge(e,{owner:t,name:r,number:Number(a),cursor:o});case 1:s=n.v,(l=null==(u=s.data)||null==(u=u.repository)||null==(u=u.pullRequest)?void 0:u.reviewThreads)||ae("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),f=q(l.nodes),n.p=2,f.s();case 3:if((p=f.n()).done){n.n=5;break}return d=p.value,n.n=4,i(d);case 4:n.n=3;break;case 5:n.n=7;break;case 6:n.p=6,h=n.v,f.e(h);case 7:return n.p=7,f.f(),n.f(7);case 8:if(l.pageInfo.hasNextPage){n.n=9;break}return n.a(2);case 9:o=null!=(c=l.pageInfo.endCursor)?c:void 0;case 10:n.n=0;break;case 11:return n.a(2)}},n,null,[[2,6,7,8]])}))).apply(this,arguments)}function Vt(n,e,t){return Xt.apply(this,arguments)}function Xt(){return(Xt=P(T().m(function n(e,t,r){var a;return T().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,zt("\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||a.push(n.id)});case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function nr(n,e,t){return er.apply(this,arguments)}function er(){return(er=P(T().m(function n(e,t,r){var a,i;return T().w(function(n){for(;;)switch(n.n){case 0:return a=[],i=new Map,n.n=1,zt("\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 line\n originalLine\n startLine\n originalStartLine\n commit { oid }\n originalCommit { oid }\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,P(T().m(function n(r){var o,u,c,s,l,f,p,d,h,m,v;return T().w(function(n){for(;;)switch(n.n){case 0:if(!r.isResolved){n.n=1;break}return n.a(2);case 1:return n.n=2,Promise.all(r.comments.nodes.map(function(n){var a,o;return or(n,null!=(a=r.path)?a:void 0,null!=(o=r.isOutdated)&&o,e,t,i)}));case 2:u=n.v,c=r.comments.pageInfo,s=null!=(o=c.endCursor)?o:void 0;case 3:if(!c.hasNextPage){n.n=6;break}return n.n=4,ge("\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 line\n originalLine\n startLine\n originalStartLine\n commit { oid }\n originalCommit { oid }\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",{threadId:r.id,cursor:s});case 4:return p=n.v,(d=null==(l=p.data)||null==(l=l.node)?void 0:l.comments)||ae("Could not find comments in GraphQL response for thread ".concat(r.id,".")),h=u.push,m=u,v=M,n.n=5,Promise.all(d.nodes.map(function(n){var a,o;return or(n,null!=(a=r.path)?a:void 0,null!=(o=r.isOutdated)&&o,e,t,i)}));case 5:h.apply.call(h,m,v(n.v)),c=d.pageInfo,s=null!=(f=c.endCursor)?f:void 0,n.n=3;break;case 6:a.push({id:r.id,isResolved:r.isResolved,isOutdated:r.isOutdated,path:r.path,line:r.line,originalLine:r.originalLine,startLine:r.startLine,originalStartLine:r.originalStartLine,comments:u});case 7:return n.a(2)}},n)})));case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function tr(){return rr.apply(this,arguments)}function rr(){return(rr=P(T().m(function n(){var e,t,r,a,i,o,u;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,me();case 1:return e=n.v,t=G(e,2),r=t[0],a=t[1],n.n=2,we();case 2:return i=n.v,re("Fetching unresolved review threads..."),o=ke,n.n=3,nr(r,a,i);case 3:return u=n.v,n.a(2,o({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function ar(n){return ir.apply(this,arguments)}function ir(){return(ir=P(T().m(function n(e){var t,r,a,i,o,u,c,s,l,f,p,d,h,m,v,w,y,g,b,k;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,me();case 1:return t=n.v,r=G(t,2),a=r[0],i=r[1],n.n=2,we();case 2:return o=n.v,g=Set,n.n=3,Vt(a,i,o);case 3:b=n.v,u=new g(b),re("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=q(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(d=G(f.value,2),h=d[0],m=G(d[1],2),v=m[0],w=m[1],re("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,ge("\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:w});case 7:y=n.v,null!=(p=y.data)&&null!=(p=p.resolveReviewThread)&&null!=(p=p.thread)&&p.isResolved?c.push(v):re("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,k=n.v,l.e(k);case 11:return n.p=11,l.f(),n.f(11);case 12:return re("Done."),n.a(2,ke({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function or(n,e,t,r,a,i){return ur.apply(this,arguments)}function ur(){return(ur=P(T().m(function n(e,t,r,a,i,o){var u,c,s,l,f,p,d,h;return T().w(function(n){for(;;)switch(n.n){case 0:return c=e.author,s=e.id,l=e.url,f=e.body,p=e.createdAt,d="string"==typeof c?c:null!=(u=null==c?void 0:c.login)?u:void 0,n.n=1,sr(e,t,r,a,i,o);case 1:return h=n.v,n.a(2,{id:s,url:l,body:f,createdAt:p,author:d,snippet:h})}},n)}))).apply(this,arguments)}function cr(n){try{var e=JSON.parse(n);return function(n){if("object"!==F(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==F(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||ae("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&ae("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function sr(n,e,t,r,a,i){return lr.apply(this,arguments)}function lr(){return(lr=P(T().m(function n(e,t,r,a,i,o){var u,c,s,l;return T().w(function(n){for(;;)switch(n.n){case 0:if(t){n.n=1;break}return n.a(2,void 0);case 1:if(u=r?pr(e,t):fr(e,t),c=r?fr(e,t):pr(e,t),s=null!=u?u:c){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,hr(a,i,s.expression,o);case 3:if(void 0!==(l=n.v)){n.n=4;break}return n.a(2,void 0);case 4:return n.a(2,yr(l,s.startLine,s.endLine))}},n)}))).apply(this,arguments)}function fr(n,e){var t;return dr(null==(t=n.commit)?void 0:t.oid,e,n.startLine,n.line)}function pr(n,e){var t;return dr(null==(t=n.originalCommit)?void 0:t.oid,e,n.originalStartLine,n.originalLine)}function dr(n,e,t,r){if(n&&r)return{expression:"".concat(n,":").concat(e),startLine:null!=t?t:r,endLine:r}}function hr(n,e,t,r){return mr.apply(this,arguments)}function mr(){return(mr=P(T().m(function n(e,t,r,a){var i,o;return T().w(function(n){for(;;)switch(n.n){case 0:return i="".concat(e,"/").concat(t,":").concat(r),(o=a.get(i))||(o=vr(e,t,r),a.set(i,o)),n.n=1,o;case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function vr(n,e,t){return wr.apply(this,arguments)}function wr(){return(wr=P(T().m(function n(e,t,r){var a,i,o;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ge("\n query($owner: String!, $name: String!, $expression: String!) {\n repository(owner: $owner, name: $name) {\n object(expression: $expression) {\n ... on Blob {\n isBinary\n text\n }\n }\n }\n }\n",{owner:e,name:t,expression:r});case 1:if(i=n.v,(o=null==(a=i.data)||null==(a=a.repository)?void 0:a.object)&&!o.isBinary&&"string"==typeof o.text){n.n=2;break}return n.a(2,void 0);case 2:return n.a(2,o.text)}},n)}))).apply(this,arguments)}function yr(n,e,t){var r=n.split("\n");if(r.length>0&&""===r.at(-1)&&r.pop(),0!==r.length){for(var a=gr(e,r.length),i=gr(t,r.length),o=Math.max(1,a-2),u=Math.min(r.length,i+2),c=String(u).length,s=[],l=o;l<=u;l+=1){var f,p=l>=a&&l<=i?">":" ";s.push("".concat(p," ").concat(String(l).padStart(c," ")," | ").concat(null!=(f=r[l-1])?f:""))}return s.join("\n")}}function gr(n,e){return Math.min(Math.max(n,1),e)}function br(n){return kr.apply(this,arguments)}function kr(){return(kr=P(T().m(function n(e){var t;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,wt(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 xr(n){return"git merge-base ".concat(Sr("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(Sr(n)," HEAD")}function Sr(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function jr(n){return Ir.apply(this,arguments)}function Ir(){return(Ir=P(T().m(function n(e){var t,r,a;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ut();case 1:return t=n.v,r=xr(t),n.n=2,kt();case 2:return a=n.v,n.a(2,"\nReview the current ".concat(a?"pull request":"branch"," against its base branch ").concat(t,' via `git diff "$(').concat(r,')"`.\nUse the known facts, if provided, to avoid repeating fact checks and findings. Reuse a known fact only when the same current-code evidence, command result, or primary-source evidence still applies. If the current code or source context may have changed enough to invalidate a known fact, refresh only that affected fact.\nFor each finding:\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 - 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. Clean up any temporary files created during the experiment.\n4. 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 new valid findings that are not already covered by the known facts. For each finding, include the evidence, proposed fix, and likely impact. Do not modify the code.\nWhen reporting valid findings, include a `## Verified Facts` section after the findings. Include only concise, review-relevant facts: what was verified, why it matters to the review, and how it was verified.\nIf there are no new valid findings, respond exactly with: `').concat(tn,"`\n\n").concat(Or(e),"\n\n").concat(Ar(a),"\n").trim())}},n)}))).apply(this,arguments)}function Or(n){var e=null==n?void 0:n.trim();return e?"Known facts:\n~~~~markdown\n".concat(e,"\n~~~~\n").trim():""}function Ar(n){return n?"Current pull request context:\n~~~~yaml\n".concat(n.trim(),"\n~~~~\n").trim():""}function $r(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 Cr(){return Rr.apply(this,arguments)}function Rr(){return(Rr=P(T().m(function n(){var e,t,r;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ut();case 1:return e=n.v,t=xr(e),n.n=2,kt();case 2:return r=n.v,n.a(2,"\nSimplify the current ".concat(r?"pull request":"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\n").concat(r?"Current pull request context:\n~~~~yaml\n".concat(r.trim(),"\n~~~~"):"","\n").trim())}},n)}))).apply(this,arguments)}var Pr="@willbooster/agent-skills",qr=/\.(?:[cm]?[jt]s|json|md|ya?ml)$/i;function Er(){return Lr.apply(this,arguments)}function Lr(){return(Lr=P(T().m(function n(){var e,t;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,Nr();case 1:return e=n.v,n.n=2,d(v(I(),"agent-skills-install-"));case 2:return t=n.v,n.p=3,n.n=4,p(v(e.path,"package.json"),v(t,"package.json"));case 4:return n.n=5,p(v(e.path,"skills"),v(t,"skills"),{recursive:!0});case 5:return n.n=6,_r(t,e.metadata);case 6:return n.n=7,J(["bunx","skills@latest","add",t,"--global","--yes","--skill","*","--agent","claude-code","--agent","codex","--agent","gemini-cli"],{waitMessage:"Installing packaged skills globally."});case 7:return n.p=7,n.n=8,f(t,{recursive:!0,force:!0});case 8:return n.f(7);case 9:return n.a(2)}},n,null,[[3,,7,9]])}))).apply(this,arguments)}function Nr(){return Tr.apply(this,arguments)}function Tr(){return(Tr=P(T().m(function n(){var e,t,r,a,i,o;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:e=m(O(import.meta.url));case 1:return t=v(e,"package.json"),n.p=2,i=Dr,o=t,n.n=3,c(t,"utf8");case 3:if((r=i(o,n.v)).name!==Pr){n.n=4;break}return n.a(2,{metadata:r,path:e});case 4:n.n=6;break;case 5:n.p=5,n.v;case 6:a=m(e),j.notStrictEqual(e,a,"Failed to find ".concat(Pr," package root")),e=a,n.n=1;break;case 7:return n.a(2)}},n,null,[[2,5]])}))).apply(this,arguments)}function Dr(n,e){var t=JSON.parse(e);return j.ok(t.name&&t.version,"Failed to read name or version from ".concat(n)),t}function _r(n,e){return Gr.apply(this,arguments)}function Gr(){return(Gr=P(T().m(function n(e,t){var r,a;return T().w(function(n){for(;;)switch(n.n){case 0:return r="".concat(t.name,"@latest"),a="".concat(t.name,"@").concat(t.version),n.n=1,Mr(e,function(n){return n.replaceAll(r,a)});case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Mr(n,e){return Fr.apply(this,arguments)}function Fr(){return(Fr=P(T().m(function n(e,t){var r,a,i,o,u,s,f,p;return T().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,l(e,{recursive:!0,withFileTypes:!0});case 1:r=n.v,a=q(r),n.p=2,a.s();case 3:if((i=a.n()).done){n.n=7;break}if((o=i.value).isFile()&&qr.test(o.name)){n.n=4;break}return n.a(3,6);case 4:return u=v(o.parentPath,o.name),n.n=5,c(u,"utf8");case 5:if(s=n.v,(f=t(s))===s){n.n=6;break}return n.n=6,h(u,f);case 6:n.n=3;break;case 7:n.n=9;break;case 8:n.p=8,p=n.v,a.e(p);case 9:return n.p=9,a.f(),n.f(9);case 10:return n.a(2)}},n,null,[[2,8,9,10]])}))).apply(this,arguments)}var Ur=new n;function Hr(n){return Wr.apply(this,arguments)}function Wr(){return(Wr=P(T().m(function n(e){var t,r;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Br();case 1:return t=n.v,r=jr(t),n.a(2,"all"===e?un(r,{allAgentsLabel:"review agents",mapOutput:function(n,e){return dn(e)?void 0:e}}):sn(e,r))}},n)}))).apply(this,arguments)}function Br(){return Jr.apply(this,arguments)}function Jr(){return(Jr=P(T().m(function n(){var e;return T().w(function(n){for(;;)switch(n.n){case 0:if(!t.isTTY){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,ie();case 2:return e=n.v,n.a(2,e.length>0?e:void 0)}},n)}))).apply(this,arguments)}function Yr(n){var t=Ur.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(P(T().m(function e(){var t,r,a,i,o,u,c,s,l,f=arguments;return T().w(function(e){for(;;)switch(e.n){case 0:for(t=f.length,r=new Array(t),a=0;a<t;a++)r[a]=f[a];return i=G(r,2),o=i[0],u=i[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 Kr(n,e,t){var r=Ur.command(n).description(e).allowExcessArguments(!1);"function"!=typeof t?r.argument(t.argumentName,t.argumentDescription).action(P(T().m(function n(e){var r;return T().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(P(T().m(function n(){var e;return T().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)})))}function Qr(){return(Qr=P(T().m(function n(e,t){var r;return T().w(function(n){for(;;)switch(n.n){case 0:return r=Zr,n.n=1,sn(e,zr(t));case 1:return n.a(2,r(n.v))}},n)}))).apply(this,arguments)}function zr(n){return"".concat(n,"\n\nReport on the result with a markdown code block with triple backticks.")}function Zr(n){var e,t=null==(e=M(n.matchAll(/```[^\n`]*\n?([\s\S]*?)```/g)).at(-1))?void 0:e[1];if(!t)throw new Error("Agent output did not contain a markdown code block with triple backticks.");return t}Ur.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),Ur.command("install-skills").description("Install all packaged skills globally for Claude Code, Codex, and Gemini CLI").allowExcessArguments(!1).action(P(T().m(function n(){return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Er();case 1:process.stdout.write("Done\n");case 2:return n.a(2)}},n)}))),Ur.command("update-bun-deps").description("Update all Bun dependencies in the root package and workspace packages").allowExcessArguments(!1).action(P(T().m(function n(){return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Sn();case 1:return n.a(2)}},n)}))),Yr({name:"agent",description:"Run the selected agent with the specified prompt",optionDescription:"Use an agent",choices:["codex","claude","gemini"],argumentName:"<prompt>",argumentDescription:"Prompt to pass to the agent",run:function(n,e){return function(n,e){return Qr.apply(this,arguments)}(n,e)}}),Ur.command("review").description("Run review against the current branch with the selected agent").addOption(new e("--agent <agent>","Use a review agent").choices(["all","codex","claude","gemini"]).makeOptionMandatory()).allowExcessArguments(!1).action(P(T().m(function n(e){var t;return T().w(function(n){for(;;)switch(n.n){case 0:return t=process.stdout,n.n=1,Hr(e.agent);case 1:t.write.call(t,n.v);case 2:return n.a(2)}},n)}))),Kr("review-codex","Run Codex review against the current branch",function(){return Hr("codex")}),Kr("review-claude","Run Claude Code review against the current branch",function(){return Hr("claude")}),Kr("review-gemini","Run Gemini CLI review against the current branch",function(){return Hr("gemini")}),Yr({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?un(br(mt(e)),{allAgentsLabel:"planning agents"}):sn(n,br(mt(e)))}}),Kr("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return sn("codex",br(mt(n)))}}),Kr("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return sn("claude",br(mt(n)))}}),Kr("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return sn("gemini",br(mt(n)))}}),Ur.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(P(T().m(function n(e,t,r,a){var i;return T().w(function(n){for(;;)switch(n.n){case 0:return i=process.stdout,n.n=1,sn(a.agent,$r(e,t,r));case 1:i.write.call(i,n.v);case 2:return n.a(2)}},n)}))),Yr({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 sn(n,Cr())}}),Kr("simplify-codex","Run Codex PR simplification against the current branch",function(){return sn("codex",Cr())}),Kr("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return sn("claude",Cr())}),Kr("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return sn("gemini",Cr())}),Ur.command("open-pr").description("Create a pull request for the current branch").argument("<title>","Pull request title").allowExcessArguments(!1).action(P(T().m(function n(e){var t,r;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ie();case 1:return t=n.v,n.n=2,Ut({body:t||void 0,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),Ur.command("update-pr").description("Update the current pull request title and body").argument("<title>","Pull request title").allowExcessArguments(!1).action(P(T().m(function n(e){var t,r;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ue("Error: PR body input is required on stdin");case 1:return t=n.v,n.n=2,Wt({body:t,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),Ur.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(P(T().m(function n(){var e;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Be();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),Ur.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action(P(T().m(function n(e){var t;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,wt(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),Ur.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(P(T().m(function n(e){var t;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,gt(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),Ur.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(P(T().m(function n(){var e;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,tr();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),Ur.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(P(T().m(function n(){var e,t;return T().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Kt();case 1:return e=n.v,n.n=2,ar(e);case 2:t=n.v,process.stdout.write(t);case 3:return n.a(2)}},n)}))),await Ur.parseAsync(process.argv);
|
|
5
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy9kZXBzL3VwZGF0ZUJ1bkRlcGVuZGVuY2llcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3NoYXJlZC50cyIsIi4uL3NyYy9wci9jaS50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHRCcmFuY2gudHMiLCIuLi9zcmMvcHIvbWVzc2FnZXMudHMiLCIuLi9zcmMvcHIvcHVsbFJlcXVlc3QudHMiLCIuLi9zcmMvcHIvcmV2aWV3VGhyZWFkcy50cyIsIi4uL3NyYy9wcm9tcHRzL3BsYW5Qcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9iYXNlQnJhbmNoRGlmZkNvbW1hbmQudHMiLCIuLi9zcmMvcHJvbXB0cy9yZXZpZXdQcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvc2tpbGxzL2luc3RhbGxTa2lsbHMudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmludGVyZmFjZSBSdW5Db21tYW5kT3B0aW9ucyB7XG4gIGxvZ0ZpbGVQYXRoPzogc3RyaW5nO1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIHdhaXRNZXNzYWdlPzogc3RyaW5nIHwgZmFsc2U7XG4gIHdhaXRJbnRlcnZhbFNlY29uZHM/OiBudW1iZXI7XG59XG5cbnR5cGUgUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuZXhwb3J0IGludGVyZmFjZSBLaWxsYWJsZVByb2Nlc3Mge1xuICBraWxsOiAoc2lnbmFsPzogTm9kZUpTLlNpZ25hbHMpID0+IGJvb2xlYW47XG4gIHBpZD86IG51bWJlcjtcbn1cblxuLy8gVGhlIG9uZS1ob3VyIGJ1ZGdldCBrZWVwcyBhZ2VudHMgd2FpdGluZyBmb3IgbG9uZy1ydW5uaW5nIGNvbW1hbmRzIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSBwcm9jZXNzIHRvIHVzZSB0aGUgZnVsbCBob3VyLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gMzY7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVMgPSA2MCAqIDYwICogMTAwMDtcbmNvbnN0IERPVFNfUEVSX1BST0dSRVNTX1BFUkNFTlRfU1RFUCA9IDU7XG5jb25zdCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMgPSA1MDAwO1xuY29uc3QgTUFYX1BST0dSRVNTX1BFUkNFTlQgPSAxMDA7XG5jb25zdCBQUk9DRVNTX0NMRUFOVVBfU0lHTkFMUyA9IFsnU0lHSU5UJywgJ1NJR1RFUk0nLCAnU0lHSFVQJ10gYXMgY29uc3Q7XG5jb25zdCBhY3RpdmVQcm9jZXNzZXMgPSBuZXcgU2V0PEtpbGxhYmxlUHJvY2Vzcz4oKTtcbmxldCBjbGVhbnVwSGFuZGxlcnNJbnN0YWxsZWQgPSBmYWxzZTtcbi8vIEtlZXAgdGhlIENMSSB0ZXh0IGNvbmNpc2Ugc28gZG93bnN0cmVhbSBwcm9tcHRzIGNhbiBtYXRjaCBpdCBjb25zaXN0ZW50bHkuXG5leHBvcnQgY29uc3QgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HID0gJ1RoaXMgY2FuIHRha2UgdXAgdG8gMSBob3VyOyBkb3RzIGluZGljYXRlIHByb2dyZXNzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGRldGFjaGVkOiB0cnVlLFxuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG4gIGNvbnN0IHByb2Nlc3NUaW1lb3V0ID0gY3JlYXRlUHJvY2Vzc1RpbWVvdXQocHJvYywgb3B0aW9ucy50aW1lb3V0TXMpO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAocHJvY2Vzc1RpbWVvdXQudGltZWRPdXQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRpbWVvdXRFcnJvck1lc3NhZ2UoYCR7c3Rkb3V0fSR7c3RkZXJyfWAsIHByb2Nlc3NUaW1lb3V0LnRpbWVvdXRNcywgY29tbWFuZCkpO1xuICAgIH1cblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0ZG91dDtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjb21tYW5kTG9nZ2VyLmNsb3NlKCk7XG4gICAgcHJvY2Vzc1RpbWVvdXQuY2xlYXIoKTtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVvdXRFcnJvck1lc3NhZ2Uob3V0cHV0OiBzdHJpbmcsIHRpbWVvdXRNczogbnVtYmVyLCBjb21tYW5kOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBgQ29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIgJHtmb3JtYXREdXJhdGlvbih0aW1lb3V0TXMpfTogJHtjb21tYW5kLmpvaW4oJyAnKX1gO1xuICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IDAgPyBgJHtvdXRwdXR9XFxuJHttZXNzYWdlfWAgOiBtZXNzYWdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24obWlsbGlzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAobWlsbGlzZWNvbmRzICUgKDYwICogNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiA2MCAqIDEwMDApfWhgO1xuICB9XG4gIGlmIChtaWxsaXNlY29uZHMgJSAoNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiAxMDAwKX1tYDtcbiAgfVxuICBpZiAobWlsbGlzZWNvbmRzICUgMTAwMCA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAxMDAwfXNgO1xuICB9XG4gIHJldHVybiBgJHttaWxsaXNlY29uZHN9bXNgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvY2Vzc1RpbWVvdXQoXG4gIHByb2M6IEtpbGxhYmxlUHJvY2VzcyxcbiAgdGltZW91dE1zID0gREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVNcbik6IHsgY2xlYXI6ICgpID0+IHZvaWQ7IHRpbWVkT3V0OiAoKSA9PiBib29sZWFuOyB0aW1lb3V0TXM6IG51bWJlciB9IHtcbiAgbGV0IHRpbWVkT3V0ID0gZmFsc2U7XG4gIGxldCBmb3JjZUtpbGxUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGFjdGl2ZVByb2Nlc3Nlcy5hZGQocHJvYyk7XG4gIGluc3RhbGxDbGVhbnVwSGFuZGxlcnMoKTtcbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRpbWVkT3V0ID0gdHJ1ZTtcbiAgICBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHVEVSTScpO1xuICAgIGZvcmNlS2lsbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHS0lMTCcpLCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMpO1xuICAgIGZvcmNlS2lsbFRpbWVyLnVucmVmKCk7XG4gIH0sIHRpbWVvdXRNcyk7XG4gIHRpbWVvdXQudW5yZWYoKTtcblxuICByZXR1cm4ge1xuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoZm9yY2VLaWxsVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGZvcmNlS2lsbFRpbWVyKTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVByb2Nlc3Nlcy5kZWxldGUocHJvYyk7XG4gICAgfSxcbiAgICB0aW1lZE91dDogKCkgPT4gdGltZWRPdXQsXG4gICAgdGltZW91dE1zLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsQ2xlYW51cEhhbmRsZXJzKCk6IHZvaWQge1xuICBpZiAoY2xlYW51cEhhbmRsZXJzSW5zdGFsbGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNsZWFudXBIYW5kbGVyc0luc3RhbGxlZCA9IHRydWU7XG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpIHtcbiAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHByb2Mgb2YgYWN0aXZlUHJvY2Vzc2VzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzKHByb2MsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmV4aXQoMTI4ICsgc2lnbmFsTnVtYmVyKHNpZ25hbCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNpZ25hbE51bWJlcihzaWduYWw6ICh0eXBlb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpW251bWJlcl0pOiBudW1iZXIge1xuICBzd2l0Y2ggKHNpZ25hbCkge1xuICAgIGNhc2UgJ1NJR0lOVCc6IHtcbiAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBjYXNlICdTSUdURVJNJzoge1xuICAgICAgcmV0dXJuIDE1O1xuICAgIH1cbiAgICBjYXNlICdTSUdIVVAnOiB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24ga2lsbFByb2Nlc3MocHJvYzogS2lsbGFibGVQcm9jZXNzLCBzaWduYWw6IE5vZGVKUy5TaWduYWxzKTogdm9pZCB7XG4gIGlmIChwcm9jLnBpZCAmJiBwcm9jLnBpZCA+IDApIHtcbiAgICB0cnkge1xuICAgICAgcHJvY2Vzcy5raWxsKC1wcm9jLnBpZCwgc2lnbmFsKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZhbGwgYmFjayB0byBraWxsaW5nIHRoZSBkaXJlY3QgY2hpbGQgd2hlbiBwcm9jZXNzLWdyb3VwIHRlcm1pbmF0aW9uIGlzIHVuYXZhaWxhYmxlLlxuICAgIH1cbiAgfVxuICBwcm9jLmtpbGwoc2lnbmFsKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChcbiAgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvbkNodW5rPzogKGNodW5rOiBzdHJpbmcpID0+IHZvaWRcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY29uc3QgY2h1bmtUZXh0ID0gdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IGNodW5rIDogZGVjb2Rlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoY2h1bmspLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICBjaHVua3MucHVzaChjaHVua1RleHQpO1xuICAgIG9uQ2h1bms/LihjaHVua1RleHQpO1xuICB9XG4gIGNvbnN0IGZpbmFsQ2h1bmsgPSBkZWNvZGVyLmRlY29kZSgpO1xuICBpZiAoZmluYWxDaHVuaykge1xuICAgIGNodW5rcy5wdXNoKGZpbmFsQ2h1bmspO1xuICAgIG9uQ2h1bms/LihmaW5hbENodW5rKTtcbiAgfVxuICByZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2FpdFByb2dyZXNzKFxuICB3YWl0TWVzc2FnZTogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQsXG4gIHdhaXRJbnRlcnZhbFNlY29uZHMgPSBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgd3JpdGVQcm9ncmVzczogUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZSkgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUobWVzc2FnZSlcbik6ICgpID0+IHZvaWQge1xuICBpZiAoIXdhaXRNZXNzYWdlKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG5cbiAgbGV0IGRvdENvdW50ID0gMDtcbiAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgd3JpdGVQcm9ncmVzcygnLicpO1xuICAgIGRvdENvdW50ICs9IDE7XG4gICAgaWYgKGRvdENvdW50IDw9IE1BWF9QUk9HUkVTU19QRVJDRU5UICYmIGRvdENvdW50ICUgRE9UU19QRVJfUFJPR1JFU1NfUEVSQ0VOVF9TVEVQID09PSAwKSB7XG4gICAgICAvLyBUaGlzIHRyYWNrcyBlbGFwc2VkIHdhaXQgYnVkZ2V0LCBub3QgdGhlIGNoaWxkIHByb2Nlc3MgY29tcGxldGlvbiBwZXJjZW50YWdlLlxuICAgICAgd3JpdGVQcm9ncmVzcyhgICR7ZG90Q291bnR9JSBkb25lIGApO1xuICAgIH1cbiAgfSwgd2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuXG4gIHdyaXRlUHJvZ3Jlc3MoYCR7d2FpdE1lc3NhZ2V9ICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfTogYCk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICB3cml0ZVByb2dyZXNzKCdcXG4nKTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIENvbW1hbmRMb2dnZXIge1xuICB3cml0ZTogKGNodW5rOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsb3NlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDb21tYW5kTG9nZ2VyKGxvZ0ZpbGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPENvbW1hbmRMb2dnZXI+IHtcbiAgaWYgKCFsb2dGaWxlUGF0aCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKCkgPT4ge30sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT4ge30sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHdhcm4gPSAoZXJyb3I6IHVua25vd24pOiB2b2lkID0+IHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgV2FybmluZzogRmFpbGVkIHRvIHdyaXRlIGNvbW1hbmQgbG9nIHRvICR7bG9nRmlsZVBhdGh9OiAke1N0cmluZyhlcnJvcil9XFxuYCk7XG4gIH07XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBta2RpcihkaXJuYW1lKGxvZ0ZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgY29uc3Qgc3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW0obG9nRmlsZVBhdGgsIHsgZmxhZ3M6ICd3JyB9KTtcblxuICAgIHN0cmVhbS5vbignZXJyb3InLCB3YXJuKTtcblxuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKGNodW5rKSA9PiB7XG4gICAgICAgIGlmIChzdHJlYW0ud3JpdGFibGUpIHtcbiAgICAgICAgICBzdHJlYW0ud3JpdGUoY2h1bmspO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgc3RyZWFtLmVuZCgoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9KSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHdhcm4oZXJyb3IpO1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKCkgPT4ge30sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT4ge30sXG4gICAgfTtcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fUEhSQVNFID0gJ3RoZXJlIGlzIG5vIGNvbmNlcm4nO1xuZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fTUVTU0FHRSA9ICdUaGVyZSBpcyBubyBjb25jZXJuLic7XG4iLCJpbXBvcnQgeyBjcmVhdGVXYWl0UHJvZ3Jlc3MsIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHsgTk9fQ09OQ0VSTl9NRVNTQUdFLCBOT19DT05DRVJOX1BIUkFTRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuXG5leHBvcnQgY29uc3QgQUdFTlRfTkFNRVMgPSBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSBhcyBjb25zdDtcbmNvbnN0IENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVggPSBuZXcgUmVnRXhwKGBcXFxcYiR7Tk9fQ09OQ0VSTl9QSFJBU0V9XFxcXGJgLCAnaScpO1xuZXhwb3J0IHR5cGUgQWdlbnROYW1lID0gKHR5cGVvZiBBR0VOVF9OQU1FUylbbnVtYmVyXTtcblxuaW50ZXJmYWNlIEFnZW50Q29tbWFuZE9wdGlvbnMge1xuICB3YWl0TWVzc2FnZT86IHN0cmluZyB8IGZhbHNlO1xufVxuXG5pbnRlcmZhY2UgQWxsQWdlbnRDb21tYW5kT3B0aW9ucyB7XG4gIGFsbEFnZW50c0xhYmVsOiBzdHJpbmc7XG4gIG1hcE91dHB1dD86IChhZ2VudDogQWdlbnROYW1lLCBvdXRwdXQ6IHN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5jb25zdCBERUZBVUxUX0FMTF9BR0VOVF9DT01NQU5EX09QVElPTlM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7IGFsbEFnZW50c0xhYmVsOiAnYWdlbnRzJyB9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWxsQWdlbnRDb21tYW5kcyhcbiAgcHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4sXG4gIG9wdGlvbnM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSBERUZBVUxUX0FMTF9BR0VOVF9DT01NQU5EX09QVElPTlNcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc29sdmVkUHJvbXB0ID0gYXdhaXQgcHJvbXB0O1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKHdhaXRNZXNzYWdlRm9yKG9wdGlvbnMuYWxsQWdlbnRzTGFiZWwpKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGFnZW50T3V0cHV0c1dpdGhTa2lwcGVkUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgQUdFTlRfTkFNRVMubWFwKGFzeW5jIChhZ2VudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgcmVzb2x2ZWRQcm9tcHQsIHtcbiAgICAgICAgICAgIHdhaXRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCB0cmltbWVkT3V0cHV0ID0gb3V0cHV0LnRyaW0oKTtcbiAgICAgICAgICBjb25zdCBtYXBwZWRPdXRwdXQgPSBvcHRpb25zLm1hcE91dHB1dD8uKGFnZW50LCB0cmltbWVkT3V0cHV0KTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5tYXBPdXRwdXQgJiYgbWFwcGVkT3V0cHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdEFnZW50U2VjdGlvbihhZ2VudCwgbWFwcGVkT3V0cHV0ID8/IHN1bW1hcml6ZUFnZW50T3V0cHV0KGFnZW50LCB0cmltbWVkT3V0cHV0KSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBmb3JtYXRBZ2VudFNlY3Rpb24oYWdlbnQsIGFnZW50RmFpbHVyZU1lc3NhZ2UoYWdlbnQpKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIGNvbnN0IGFnZW50T3V0cHV0cyA9IGFnZW50T3V0cHV0c1dpdGhTa2lwcGVkUmVzdWx0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0ICE9PSB1bmRlZmluZWQpO1xuICAgIHJldHVybiBhZ2VudE91dHB1dHMuam9pbignXFxuXFxuJyk7XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZ2VudENvbW1hbmQoXG4gIGFnZW50OiBBZ2VudE5hbWUsXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBZ2VudENvbW1hbmRPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSwge1xuICAgIGxvZ0ZpbGVQYXRoOiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50KSxcbiAgICB3YWl0TWVzc2FnZTogb3B0aW9ucy53YWl0TWVzc2FnZSA/PyB3YWl0TWVzc2FnZUZvcihkaXNwbGF5QWdlbnROYW1lKGFnZW50KSksXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBZ2VudENvbW1hbmQoYWdlbnQ6IEFnZW50TmFtZSwgcHJvbXB0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6IHtcbiAgICAgIHJldHVybiBbJ25weCcsICctLXllcycsICdAb3BlbmFpL2NvZGV4QGxhdGVzdCcsICdleGVjJywgJy0tZGFuZ2Vyb3VzbHktYnlwYXNzLWFwcHJvdmFscy1hbmQtc2FuZGJveCcsIHByb21wdF07XG4gICAgfVxuICAgIGNhc2UgJ2NsYXVkZSc6IHtcbiAgICAgIHJldHVybiBbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdO1xuICAgIH1cbiAgICBjYXNlICdnZW1pbmknOiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAgICctcCcsXG4gICAgICAgIHByb21wdCxcbiAgICAgIF07XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5QWdlbnROYW1lKGFnZW50OiBBZ2VudE5hbWUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGFnZW50KSB7XG4gICAgY2FzZSAnY29kZXgnOiB7XG4gICAgICByZXR1cm4gJ0NvZGV4JztcbiAgICB9XG4gICAgY2FzZSAnY2xhdWRlJzoge1xuICAgICAgcmV0dXJuICdDbGF1ZGUgQ29kZSc7XG4gICAgfVxuICAgIGNhc2UgJ2dlbWluaSc6IHtcbiAgICAgIHJldHVybiAnR2VtaW5pIENMSSc7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYLnRlc3Qob3V0cHV0KTtcbn1cblxuZnVuY3Rpb24gc3VtbWFyaXplQWdlbnRPdXRwdXQoYWdlbnQ6IEFnZW50TmFtZSwgb3V0cHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAob3V0cHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBhZ2VudEZhaWx1cmVNZXNzYWdlKGFnZW50KTtcbiAgfVxuXG4gIGlmIChjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dCkpIHtcbiAgICByZXR1cm4gTk9fQ09OQ0VSTl9NRVNTQUdFO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0QWdlbnRTZWN0aW9uKGFnZW50OiBBZ2VudE5hbWUsIGJvZHk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgIyMgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX1cXG5cXG4ke2JvZHl9YDtcbn1cblxuZnVuY3Rpb24gYWdlbnRGYWlsdXJlTWVzc2FnZShhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2Rpc3BsYXlBZ2VudE5hbWUoYWdlbnQpfSBkaWQgbm90IHJldHVybiBhIHJldmlldyByZXN1bHQuYDtcbn1cblxuZnVuY3Rpb24gd2FpdE1lc3NhZ2VGb3IodGFyZ2V0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFdhaXRpbmcgZm9yICR7dGFyZ2V0fSB0byBmaW5pc2guYDtcbn1cblxuZnVuY3Rpb24gYWdlbnRMb2dGaWxlUGF0aChhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBsb2dzLyR7YWdlbnR9LSR7dGltZXN0YW1wRm9yTG9nRmlsZSgpfS5sb2dgO1xufVxuXG5mdW5jdGlvbiB0aW1lc3RhbXBGb3JMb2dGaWxlKCk6IHN0cmluZyB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IFttb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZF0gPSBbXG4gICAgbm93LmdldE1vbnRoKCkgKyAxLFxuICAgIG5vdy5nZXREYXRlKCksXG4gICAgbm93LmdldEhvdXJzKCksXG4gICAgbm93LmdldE1pbnV0ZXMoKSxcbiAgICBub3cuZ2V0U2Vjb25kcygpLFxuICBdLm1hcCh0d29EaWdpdHMpO1xuICByZXR1cm4gYCR7bW9udGh9JHtkYXl9LSR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xufVxuXG5mdW5jdGlvbiB0d29EaWdpdHModmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG59XG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyByZWFkZGlyLCByZWFkRmlsZSwgc3RhdCB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiwgcmVsYXRpdmUsIHNlcCB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBicmFjZUV4cGFuZCwgbWluaW1hdGNoIH0gZnJvbSAnbWluaW1hdGNoJztcblxuaW50ZXJmYWNlIFBhY2thZ2VKc29uIHtcbiAgZGVwZW5kZW5jaWVzPzogRGVwZW5kZW5jeU1hcDtcbiAgZGV2RGVwZW5kZW5jaWVzPzogRGVwZW5kZW5jeU1hcDtcbiAgb3B0aW9uYWxEZXBlbmRlbmNpZXM/OiBEZXBlbmRlbmN5TWFwO1xuICBwZWVyRGVwZW5kZW5jaWVzPzogRGVwZW5kZW5jeU1hcDtcbiAgd29ya3NwYWNlcz86IHN0cmluZ1tdIHwgeyBwYWNrYWdlcz86IHN0cmluZ1tdIH07XG59XG50eXBlIERlcGVuZGVuY3lNYXAgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuaW50ZXJmYWNlIFdvcmtzcGFjZUNhbmRpZGF0ZVJvb3Qge1xuICBtYXhEZXB0aD86IG51bWJlcjtcbiAgcm9vdDogc3RyaW5nO1xufVxuXG5jb25zdCBERVBFTkRFTkNZX1NFQ1RJT05TID0gWydkZXBlbmRlbmNpZXMnLCAnZGV2RGVwZW5kZW5jaWVzJywgJ3BlZXJEZXBlbmRlbmNpZXMnLCAnb3B0aW9uYWxEZXBlbmRlbmNpZXMnXSBhcyBjb25zdDtcbmNvbnN0IElHTk9SRURfRElSRUNUT1JJRVMgPSBuZXcgU2V0KFsnLmdpdCcsICdub2RlX21vZHVsZXMnXSk7XG5jb25zdCBVUERBVEVfQ09NTUFORCA9IFsnYnVuJywgJ3VwZGF0ZScsICctLWxhdGVzdCddIGFzIGNvbnN0O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlQnVuRGVwZW5kZW5jaWVzKGN3ZCA9IHByb2Nlc3MuY3dkKCkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgd29ya3NwYWNlRGlyZWN0b3JpZXMgPSBhd2FpdCBmaW5kV29ya3NwYWNlRGlyZWN0b3JpZXMoY3dkKTtcbiAgYXdhaXQgYXNzZXJ0Tm9DYXRhbG9nRGVwZW5kZW5jaWVzKGN3ZCwgd29ya3NwYWNlRGlyZWN0b3JpZXMpO1xuICBhd2FpdCB1cGRhdGVQYWNrYWdlKGN3ZCwgJ3Jvb3QnKTtcblxuICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiB3b3Jrc3BhY2VEaXJlY3Rvcmllcykge1xuICAgIGF3YWl0IHVwZGF0ZVBhY2thZ2Uoam9pbihjd2QsIGRpcmVjdG9yeSksIGRpcmVjdG9yeSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluZFdvcmtzcGFjZURpcmVjdG9yaWVzKGN3ZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBwYXR0ZXJucyA9IHdvcmtzcGFjZVBhdHRlcm5zKGF3YWl0IHJlYWRQYWNrYWdlSnNvbihjd2QpKTtcbiAgY29uc3QgZGlyZWN0b3JpZXMgPSBhd2FpdCBsaXN0V29ya3NwYWNlQ2FuZGlkYXRlRGlyZWN0b3JpZXMoY3dkLCBwYXR0ZXJucyk7XG4gIGNvbnN0IGluY2x1ZGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGV4Y2x1ZGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgY29uc3QgaXNFeGNsdXNpb24gPSBwYXR0ZXJuLnN0YXJ0c1dpdGgoJyEnKTtcbiAgICBjb25zdCBtYXRjaGVzID0gYXdhaXQgZXhwYW5kV29ya3NwYWNlUGF0dGVybihjd2QsIGRpcmVjdG9yaWVzLCBpc0V4Y2x1c2lvbiA/IHBhdHRlcm4uc2xpY2UoMSkgOiBwYXR0ZXJuKTtcbiAgICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBtYXRjaGVzKSB7XG4gICAgICBpZiAoaXNFeGNsdXNpb24pIHtcbiAgICAgICAgZXhjbHVkZWQuYWRkKGRpcmVjdG9yeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmNsdWRlZC5hZGQoZGlyZWN0b3J5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gWy4uLmluY2x1ZGVkXVxuICAgIC5maWx0ZXIoKGRpcmVjdG9yeSkgPT4gZGlyZWN0b3J5ICE9PSAnLicgJiYgIWV4Y2x1ZGVkLmhhcyhkaXJlY3RvcnkpKVxuICAgIC50b1NvcnRlZCgobGVmdCwgcmlnaHQpID0+IGxlZnQubG9jYWxlQ29tcGFyZShyaWdodCkpO1xufVxuXG5mdW5jdGlvbiB3b3Jrc3BhY2VQYXR0ZXJucyh7IHdvcmtzcGFjZXMgPSBbXSB9OiBQYWNrYWdlSnNvbik6IHN0cmluZ1tdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkod29ya3NwYWNlcykpIHtcbiAgICByZXR1cm4gd29ya3NwYWNlcztcbiAgfVxuICByZXR1cm4gd29ya3NwYWNlcy5wYWNrYWdlcyA/PyBbXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdFdvcmtzcGFjZUNhbmRpZGF0ZURpcmVjdG9yaWVzKGN3ZDogc3RyaW5nLCBwYXR0ZXJuczogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGRpcmVjdG9yaWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHJvb3RzID0gd29ya3NwYWNlQ2FuZGlkYXRlUm9vdHMocGF0dGVybnMpO1xuXG4gIGZvciAoY29uc3QgeyBtYXhEZXB0aCwgcm9vdCB9IG9mIHJvb3RzKSB7XG4gICAgaWYgKCEoYXdhaXQgaXNEaXJlY3RvcnkoY3dkLCByb290KSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBhd2FpdCBsaXN0RGlyZWN0b3JpZXMoY3dkLCByb290LCBtYXhEZXB0aCkpIHtcbiAgICAgIGRpcmVjdG9yaWVzLmFkZChkaXJlY3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbLi4uZGlyZWN0b3JpZXNdO1xufVxuXG5mdW5jdGlvbiB3b3Jrc3BhY2VDYW5kaWRhdGVSb290cyhwYXR0ZXJuczogc3RyaW5nW10pOiBXb3Jrc3BhY2VDYW5kaWRhdGVSb290W10ge1xuICBjb25zdCByb290cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgIGlmIChwYXR0ZXJuLnN0YXJ0c1dpdGgoJyEnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgcm9vdCBvZiBjYW5kaWRhdGVSb290cyhwYXR0ZXJuKSkge1xuICAgICAgcm9vdHMuc2V0KHJvb3Qucm9vdCwgcm9vdHMuaGFzKHJvb3Qucm9vdCkgPyBtZXJnZWRNYXhEZXB0aChyb290cy5nZXQocm9vdC5yb290KSwgcm9vdC5tYXhEZXB0aCkgOiByb290Lm1heERlcHRoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFsuLi5yb290cy5lbnRyaWVzKCldXG4gICAgLm1hcCgoW3Jvb3QsIG1heERlcHRoXSkgPT4gKHsgbWF4RGVwdGgsIHJvb3QgfSkpXG4gICAgLmZpbHRlcigocm9vdCkgPT4gIWhhc1BhcmVudFJvb3Qocm9vdCwgcm9vdHMpKVxuICAgIC50b1NvcnRlZCgobGVmdCwgcmlnaHQpID0+IGxlZnQucm9vdC5sb2NhbGVDb21wYXJlKHJpZ2h0LnJvb3QpKTtcbn1cblxuZnVuY3Rpb24gY2FuZGlkYXRlUm9vdHMocGF0dGVybjogc3RyaW5nKTogV29ya3NwYWNlQ2FuZGlkYXRlUm9vdFtdIHtcbiAgcmV0dXJuIGJyYWNlRXhwYW5kKG5vcm1hbGl6ZVdvcmtzcGFjZVBhdHRlcm4ocGF0dGVybikpLm1hcCgoZXhwYW5kZWRQYXR0ZXJuKSA9PiAoe1xuICAgIG1heERlcHRoOiB3b3Jrc3BhY2VQYXR0ZXJuTWF4RGVwdGgoZXhwYW5kZWRQYXR0ZXJuKSxcbiAgICByb290OiBjYW5kaWRhdGVSb290KGV4cGFuZGVkUGF0dGVybiksXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VkTWF4RGVwdGgobGVmdDogbnVtYmVyIHwgdW5kZWZpbmVkLCByaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGxlZnQgPT09IHVuZGVmaW5lZCB8fCByaWdodCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogTWF0aC5tYXgobGVmdCwgcmlnaHQpO1xufVxuXG5mdW5jdGlvbiBoYXNQYXJlbnRSb290KHJvb3Q6IFdvcmtzcGFjZUNhbmRpZGF0ZVJvb3QsIHJvb3RzOiBNYXA8c3RyaW5nLCBudW1iZXIgfCB1bmRlZmluZWQ+KTogYm9vbGVhbiB7XG4gIHJldHVybiBbLi4ucm9vdHMuZW50cmllcygpXS5zb21lKFxuICAgIChbb3RoZXJSb290LCBvdGhlck1heERlcHRoXSkgPT5cbiAgICAgIG90aGVyUm9vdCAhPT0gcm9vdC5yb290ICYmXG4gICAgICAob3RoZXJSb290ID09PSAnLicgfHwgcm9vdC5yb290LnN0YXJ0c1dpdGgoYCR7b3RoZXJSb290fS9gKSkgJiZcbiAgICAgIGNvdmVyc0RlcHRoKG90aGVyTWF4RGVwdGgsIHJvb3QubWF4RGVwdGgpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNvdmVyc0RlcHRoKHBhcmVudE1heERlcHRoOiBudW1iZXIgfCB1bmRlZmluZWQsIGNoaWxkTWF4RGVwdGg6IG51bWJlciB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcGFyZW50TWF4RGVwdGggPT09IHVuZGVmaW5lZCB8fCAoY2hpbGRNYXhEZXB0aCAhPT0gdW5kZWZpbmVkICYmIHBhcmVudE1heERlcHRoID49IGNoaWxkTWF4RGVwdGgpO1xufVxuXG5mdW5jdGlvbiBjYW5kaWRhdGVSb290KHBhdHRlcm46IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gW107XG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBwYXR0ZXJuLnNwbGl0KCcvJykpIHtcbiAgICBpZiAoc2VnbWVudCA9PT0gJycgfHwgaGFzR2xvYk1hZ2ljKHNlZ21lbnQpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgfVxuICByZXR1cm4gc2VnbWVudHMubGVuZ3RoID09PSAwID8gJy4nIDogc2VnbWVudHMuam9pbignLycpO1xufVxuXG5mdW5jdGlvbiBoYXNHbG9iTWFnaWMoc2VnbWVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvWyo/W1xcXXt9KCkhK10vLnRlc3Qoc2VnbWVudCk7XG59XG5cbmZ1bmN0aW9uIHdvcmtzcGFjZVBhdHRlcm5NYXhEZXB0aChwYXR0ZXJuOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBpZiAocGF0dGVybi5zcGxpdCgnLycpLmluY2x1ZGVzKCcqKicpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcGF0aERlcHRoKHBhdHRlcm4pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc0RpcmVjdG9yeShjd2Q6IHN0cmluZywgZGlyZWN0b3J5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJlY3RvcnlTdGF0ID0gYXdhaXQgc3RhdChqb2luKGN3ZCwgZGlyZWN0b3J5KSk7XG4gICAgcmV0dXJuIGRpcmVjdG9yeVN0YXQuaXNEaXJlY3RvcnkoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxpc3REaXJlY3Rvcmllcyhjd2Q6IHN0cmluZywgZGlyZWN0b3J5ID0gJy4nLCBtYXhEZXB0aD86IG51bWJlcik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgZGlyZWN0b3JpZXMgPSBbZGlyZWN0b3J5XTtcbiAgaWYgKG1heERlcHRoICE9PSB1bmRlZmluZWQgJiYgcGF0aERlcHRoKGRpcmVjdG9yeSkgPj0gbWF4RGVwdGgpIHtcbiAgICByZXR1cm4gZGlyZWN0b3JpZXM7XG4gIH1cblxuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihqb2luKGN3ZCwgZGlyZWN0b3J5KSwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGlmICghZW50cnkuaXNEaXJlY3RvcnkoKSB8fCBJR05PUkVEX0RJUkVDVE9SSUVTLmhhcyhlbnRyeS5uYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGREaXJlY3RvcnkgPSBqb2luKGRpcmVjdG9yeSwgZW50cnkubmFtZSkuc3BsaXQoc2VwKS5qb2luKCcvJyk7XG4gICAgaWYgKG1heERlcHRoICE9PSB1bmRlZmluZWQgJiYgcGF0aERlcHRoKGNoaWxkRGlyZWN0b3J5KSA+IG1heERlcHRoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZGlyZWN0b3JpZXMucHVzaCguLi4oYXdhaXQgbGlzdERpcmVjdG9yaWVzKGN3ZCwgY2hpbGREaXJlY3RvcnksIG1heERlcHRoKSkpO1xuICB9XG5cbiAgcmV0dXJuIGRpcmVjdG9yaWVzO1xufVxuXG5mdW5jdGlvbiBwYXRoRGVwdGgocGF0aDogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBhdGggPT09ICcuJyA/IDAgOiBwYXRoLnNwbGl0KCcvJykubGVuZ3RoO1xufVxuXG5hc3luYyBmdW5jdGlvbiBleHBhbmRXb3Jrc3BhY2VQYXR0ZXJuKGN3ZDogc3RyaW5nLCBkaXJlY3Rvcmllczogc3RyaW5nW10sIHBhdHRlcm46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgbWF0Y2hlciA9IGdsb2JQYXR0ZXJuTWF0Y2hlcihub3JtYWxpemVXb3Jrc3BhY2VQYXR0ZXJuKHBhdHRlcm4pKTtcbiAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuXG4gIGZvciAoY29uc3QgZGlyZWN0b3J5IG9mIGRpcmVjdG9yaWVzKSB7XG4gICAgaWYgKG1hdGNoZXIoZGlyZWN0b3J5KSAmJiAoYXdhaXQgaGFzUGFja2FnZUpzb24oY3dkLCBkaXJlY3RvcnkpKSkge1xuICAgICAgbWF0Y2hlcy5wdXNoKGRpcmVjdG9yeSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVdvcmtzcGFjZVBhdHRlcm4ocGF0dGVybjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVBhdGgocGF0dGVybikucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgaWYgKG5vcm1hbGl6ZWQgPT09ICcuJykge1xuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkLnN0YXJ0c1dpdGgoJy4vJykgPyBub3JtYWxpemVkLnNsaWNlKDIpIDogbm9ybWFsaXplZDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkID0gcGF0aC5zcGxpdChzZXApLmpvaW4oJy8nKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWQgPT09ICcnID8gJy4nIDogbm9ybWFsaXplZDtcbn1cblxuZnVuY3Rpb24gZ2xvYlBhdHRlcm5NYXRjaGVyKHBhdHRlcm46IHN0cmluZyk6IChkaXJlY3Rvcnk6IHN0cmluZykgPT4gYm9vbGVhbiB7XG4gIHJldHVybiAoZGlyZWN0b3J5KSA9PiBtaW5pbWF0Y2goZGlyZWN0b3J5LCBwYXR0ZXJuLCB7IGRvdDogdHJ1ZSB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFzUGFja2FnZUpzb24oY3dkOiBzdHJpbmcsIGRpcmVjdG9yeTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUpzb25TdGF0ID0gYXdhaXQgc3RhdChqb2luKGN3ZCwgZGlyZWN0b3J5LCAncGFja2FnZS5qc29uJykpO1xuICAgIHJldHVybiBwYWNrYWdlSnNvblN0YXQuaXNGaWxlKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBhc3NlcnROb0NhdGFsb2dEZXBlbmRlbmNpZXMoY3dkOiBzdHJpbmcsIHdvcmtzcGFjZURpcmVjdG9yaWVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjYXRhbG9nRGVwZW5kZW5jaWVzID0gW107XG4gIGZvciAoY29uc3QgZGlyZWN0b3J5IG9mIFsnLicsIC4uLndvcmtzcGFjZURpcmVjdG9yaWVzXSkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKGRpcmVjdG9yeSA9PT0gJy4nID8gY3dkIDogam9pbihjd2QsIGRpcmVjdG9yeSkpO1xuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBjYXRhbG9nRGVwZW5kZW5jeU5hbWVzKHBhY2thZ2VKc29uKSkge1xuICAgICAgY2F0YWxvZ0RlcGVuZGVuY2llcy5wdXNoKGAke2RpcmVjdG9yeSA9PT0gJy4nID8gJ3Jvb3QnIDogZGlyZWN0b3J5fTogJHtkZXBlbmRlbmN5fWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYXRhbG9nRGVwZW5kZW5jaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBbXG4gICAgICAnQ2Fubm90IHNhZmVseSB1cGRhdGUgQnVuIHdvcmtzcGFjZSBkZXBlbmRlbmNpZXMgd2l0aCBjYXRhbG9nIHJlZmVyZW5jZXMuJyxcbiAgICAgICdVcGRhdGUgY2F0YWxvZyB2ZXJzaW9ucyBpbiB0aGUgcm9vdCBwYWNrYWdlLmpzb24sIHRoZW4gcnVuIGJ1biBpbnN0YWxsLicsXG4gICAgICBgQ2F0YWxvZy1tYW5hZ2VkIGRlcGVuZGVuY2llczogJHtjYXRhbG9nRGVwZW5kZW5jaWVzLmpvaW4oJywgJyl9YCxcbiAgICBdLmpvaW4oJ1xcbicpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRQYWNrYWdlSnNvbihjd2Q6IHN0cmluZyk6IFByb21pc2U8UGFja2FnZUpzb24+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gam9pbihjd2QsICdwYWNrYWdlLmpzb24nKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYWNrYWdlSnNvblBhdGgsICd1dGY4JykpIGFzIFBhY2thZ2VKc29uO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJlYWQgJHtwYWNrYWdlSnNvblBhdGh9OiAke1N0cmluZyhlcnJvcil9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2F0YWxvZ0RlcGVuZGVuY3lOYW1lcyhwYWNrYWdlSnNvbjogUGFja2FnZUpzb24pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG5hbWVzID0gW107XG4gIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBERVBFTkRFTkNZX1NFQ1RJT05TKSB7XG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gcGFja2FnZUpzb25bc2VjdGlvbl07XG4gICAgaWYgKCFkZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2ZXJzaW9uXSBvZiBPYmplY3QuZW50cmllcyhkZXBlbmRlbmNpZXMpKSB7XG4gICAgICBpZiAodmVyc2lvbi5zdGFydHNXaXRoKCdjYXRhbG9nOicpKSB7XG4gICAgICAgIG5hbWVzLnB1c2gobmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlUGFja2FnZShjd2Q6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFxuIyAke2xhYmVsfVxcbmApO1xuICBhd2FpdCBydW5Db21tYW5kKFVQREFURV9DT01NQU5ELCBjd2QpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGNvbW1hbmQ6IHJlYWRvbmx5IFtzdHJpbmcsIC4uLnN0cmluZ1tdXSwgY3dkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0sIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBjd2QsXG4gICAgc3RkaW86ICdpbmhlcml0JyxcbiAgfSk7XG5cbiAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgIHByb2Mub25jZSgnY2xvc2UnLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKGNvZGUgPT09IDApIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZWplY3QobmV3IEVycm9yKGBDb21tYW5kIGZhaWxlZCBpbiAke3JlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGN3ZCkgfHwgJy4nfTogJHtjb21tYW5kLmpvaW4oJyAnKX1gKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiLyoqXG4gKiBgYmxvY2tRdW90ZTogJ2xpdGVyYWwnYDogVXNlcyBhIHBpcGUgKGBwcm9wOiB8YCkgdG8gcmVwcmVzZW50IG11bHRpbGluZSBzdHJpbmdzLlxuICogYGxpbmVXaWR0aDogMGA6IERpc2FibGVzIGxpbmUgd3JhcHBpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCB5YW1sU3RyaW5naWZ5T3B0aW9ucyA9IHsgYmxvY2tRdW90ZTogJ2xpdGVyYWwnLCBsaW5lV2lkdGg6IDAgfSBhcyBjb25zdDtcbiIsImltcG9ydCB7IHNwYXduLCBzcGF3blN5bmMgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgc3RkZXJyIGFzIHByb2Nlc3NTdGRlcnIsIHN0ZGluIGFzIHByb2Nlc3NTdGRpbiB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNsZWVwIH0gZnJvbSAnbm9kZTp0aW1lcnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeVlhbWwgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IGNyZWF0ZVByb2Nlc3NUaW1lb3V0LCBzdHJlYW1Ub1RleHQsIHRpbWVvdXRFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHsgeWFtbFN0cmluZ2lmeU9wdGlvbnMgfSBmcm9tICcuLi95YW1sLmpzJztcblxuZXhwb3J0IHR5cGUgSnNvbk9iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFOb2RlIHtcbiAgbnVtYmVyOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUluZm8ge1xuICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4ge1xuICBub2RlczogVE5vZGVbXTtcbiAgcGFnZUluZm86IFBhZ2VJbmZvO1xufVxuXG5pbnRlcmZhY2UgUnVuQ29tbWFuZE9wdGlvbnMge1xuICBzdGRpbkRhdGE/OiBzdHJpbmc7XG4gIGFsbG93ZWRFeGl0Q29kZXM/OiBudW1iZXJbXTtcbn1cblxuY29uc3QgR0hfUkVUUllfTUFYX0FUVEVNUFRTID0gMztcbmNvbnN0IEdIX1JFVFJZX0JBU0VfREVMQVlfTVMgPSAxMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvZ3Jlc3MobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4aXRXaXRoRXJyb3IobWVzc2FnZTogc3RyaW5nLCBjb2RlID0gMSk6IG5ldmVyIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xuICBwcm9jZXNzLmV4aXQoY29kZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU3RkaW5UZXh0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChwcm9jZXNzU3RkaW4uaXNUVFkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHN0cmVhbVRvVGV4dChwcm9jZXNzU3RkaW4pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcXVpcmVkU3RkaW5UZXh0KGVycm9yTWVzc2FnZSA9ICdFcnJvcjogaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaW5wdXQgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gIGlmIChpbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIGV4aXRXaXRoRXJyb3IoZXJyb3JNZXNzYWdlLCAyKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBhbGxvd2VkRXhpdENvZGVzID0gb3B0aW9ucy5hbGxvd2VkRXhpdENvZGVzID8/IFtdO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IEdIX1JFVFJZX01BWF9BVFRFTVBUUzsgYXR0ZW1wdCArPSAxKSB7XG4gICAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICB9KTtcbiAgICBsZXQgZmFpbHVyZU1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgcmV0cnkgPSBmYWxzZTtcbiAgICBjb25zdCBwcm9jZXNzVGltZW91dCA9IGNyZWF0ZVByb2Nlc3NUaW1lb3V0KHByb2MpO1xuICAgIHRyeSB7XG4gICAgICBpZiAob3B0aW9ucy5zdGRpbkRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9jLnN0ZGluLmVuZChvcHRpb25zLnN0ZGluRGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jLnN0ZGluLmVuZCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3Rkb3V0KSxcbiAgICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyKSxcbiAgICAgICAgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgcHJvYy5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgICB9KSxcbiAgICAgIF0pO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG5cbiAgICAgIGlmIChwcm9jZXNzVGltZW91dC50aW1lZE91dCgpKSB7XG4gICAgICAgIGZhaWx1cmVNZXNzYWdlID0gdGltZW91dEVycm9yTWVzc2FnZShvdXRwdXQsIHByb2Nlc3NUaW1lb3V0LnRpbWVvdXRNcywgY29tbWFuZCk7XG4gICAgICB9IGVsc2UgaWYgKGV4aXRDb2RlID09PSAwIHx8IGFsbG93ZWRFeGl0Q29kZXMuaW5jbHVkZXMoZXhpdENvZGUpKSB7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICB9IGVsc2UgaWYgKGlzVHJhbnNpZW50R2hGYWlsdXJlKGNvbW1hbmQsIGV4aXRDb2RlLCBvdXRwdXQpICYmIGF0dGVtcHQgPCBHSF9SRVRSWV9NQVhfQVRURU1QVFMpIHtcbiAgICAgICAgcmV0cnkgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFpbHVyZU1lc3NhZ2UgPSBvdXRwdXQgfHwgYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmQuam9pbignICcpfWA7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHByb2Nlc3NUaW1lb3V0LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHJldHJ5KSB7XG4gICAgICBwcm9ncmVzcyhgVHJhbnNpZW50IEdpdEh1YiBDTEkgZmFpbHVyZTsgcmV0cnlpbmcuLi4gKGF0dGVtcHQgJHthdHRlbXB0fSBvZiAke0dIX1JFVFJZX01BWF9BVFRFTVBUUyAtIDF9KWApO1xuICAgICAgYXdhaXQgc2xlZXAoR0hfUkVUUllfQkFTRV9ERUxBWV9NUyAqIGF0dGVtcHQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChmYWlsdXJlTWVzc2FnZSkge1xuICAgICAgZXhpdFdpdGhFcnJvcihmYWlsdXJlTWVzc2FnZSk7XG4gICAgfVxuICB9XG4gIGV4aXRXaXRoRXJyb3IoYENvbW1hbmQgZmFpbGVkIGFmdGVyICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTfSBhdHRlbXB0czogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoKGFyZ3M6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2hBbGxvd0V4aXRDb2RlcyhcbiAgYXJnczogc3RyaW5nW10sXG4gIGFsbG93ZWRFeGl0Q29kZXM6IG51bWJlcltdLFxuICBzdGRpbkRhdGE/OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEsIGFsbG93ZWRFeGl0Q29kZXMgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UmVwb1BhcnRzKCk6IFByb21pc2U8W3N0cmluZywgc3RyaW5nXT4ge1xuICBjb25zdCBuYW1lV2l0aE93bmVyT3V0cHV0ID0gYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ25hbWVXaXRoT3duZXInLCAnLS1qcScsICcubmFtZVdpdGhPd25lciddKTtcbiAgY29uc3QgbmFtZVdpdGhPd25lciA9IG5hbWVXaXRoT3duZXJPdXRwdXQudHJpbSgpO1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gbmFtZVdpdGhPd25lci5zcGxpdCgnLycsIDIpO1xuICBpZiAoIW93bmVyIHx8ICFuYW1lKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCByZXBvc2l0b3J5Jyk7XG4gIH1cbiAgcmV0dXJuIFtvd25lciwgbmFtZV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UHJOdW1iZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5udW1iZXInXSk7XG4gIHJldHVybiBwck51bWJlci50cmltKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBncmFwaHFsPFQgZXh0ZW5kcyBKc29uT2JqZWN0PihcbiAgcXVlcnk6IHN0cmluZyxcbiAgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkPiA9IHt9XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgYXJncyA9IFsnYXBpJywgJ2dyYXBocWwnLCAnLUYnLCAncXVlcnk9QC0nXTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFycykpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy1GJywgYCR7a2V5fT0ke3ZhbHVlfWApO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGF3YWl0IGdoKGFyZ3MsIHF1ZXJ5KSkgYXMgSnNvbk9iamVjdCAmIHsgZXJyb3JzPzogQXJyYXk8eyBtZXNzYWdlPzogc3RyaW5nIH0+IH07XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlIGFzIFQ7XG4gIH1cblxuICBjb25zdCBlcnJvck1lc3NhZ2VzID0gcmVzcG9uc2UuZXJyb3JzLm1hcCgoZXJyb3IpID0+IGVycm9yLm1lc3NhZ2UgPz8gJ1Vua25vd24gR3JhcGhRTCBlcnJvcicpLmpvaW4oJ1xcbicpO1xuICBleGl0V2l0aEVycm9yKGBHcmFwaFFMIEFQSSBlcnJvcjpcXG4ke2Vycm9yTWVzc2FnZXN9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5YW1sRHVtcChkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmluZ2lmeVlhbWwoZGF0YSwgeWFtbFN0cmluZ2lmeU9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcENvcHk8VD4oZGF0YTogVCk6IFQge1xuICByZXR1cm4gc3RydWN0dXJlZENsb25lKGRhdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEF2YWlsYWJsZShjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNwYXduU3luY1NhZmUoW2NvbW1hbmQsICctLXZlcnNpb24nXSkuZXhpdENvZGUgPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGF3blN5bmNTYWZlKGNvbW1hbmQ6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiB7IGV4aXRDb2RlOiBudW1iZXI7IG91dHB1dDogc3RyaW5nIH0ge1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgaW5wdXQ6IHN0ZGluRGF0YSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBleGl0Q29kZTogcmVzdWx0LnN0YXR1cyA/PyAocmVzdWx0LmVycm9yID8gMSA6IDApLFxuICAgIG91dHB1dDogYCR7cmVzdWx0LnN0ZG91dCA/PyAnJ30ke3Jlc3VsdC5zdGRlcnIgPz8gJyd9YCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZDogc3RyaW5nW10sIGV4aXRDb2RlOiBudW1iZXIsIG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChjb21tYW5kWzBdICE9PSAnZ2gnIHx8IGV4aXRDb2RlID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIC8oSFRUUCA1MFswMjM0XVxcYnxXZSBoYWQgaXNzdWVzIHByb2R1Y2luZyB0aGUgcmVzcG9uc2UgdG8geW91ciByZXF1ZXN0KS9pLnRlc3Qob3V0cHV0KTtcbn1cbiIsImltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2xlZXAgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgeyBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgY3JlYXRlV2FpdFByb2dyZXNzLCBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5pbXBvcnQge1xuICBjb21tYW5kQXZhaWxhYmxlLFxuICBjdXJyZW50UHJOdW1iZXIsXG4gIGN1cnJlbnRSZXBvUGFydHMsXG4gIGRlZXBDb3B5LFxuICBleGl0V2l0aEVycm9yLFxuICBnaEFsbG93RXhpdENvZGVzLFxuICBncmFwaHFsLFxuICBwcm9ncmVzcyxcbiAgc3Bhd25TeW5jU2FmZSxcbiAgeWFtbER1bXAsXG59IGZyb20gJy4vc2hhcmVkLmpzJztcblxuZXhwb3J0IGNvbnN0IFRFU1RfUkVMQVRFRF9QQVRURVJOID0gL1xcYnRlc3RcXGIvaTtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyA9IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTO1xuLy8gT25lIGh1bmRyZWQgMzYtc2Vjb25kIGNoZWNrcyBwcmVzZXJ2ZXMgdGhlIG1heGltdW0gb25lLWhvdXIgQ0kgd2FpdCBidWRnZXQuXG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUyA9IDEwMDtcbmNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9NRVNTQUdFID0gJ1dhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG5leHBvcnQgY29uc3QgWkVST19USU1FU1RBTVAgPSAnMDAwMS0wMS0wMVQwMDowMDowMFonO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyA9IFtcbiAgJ2F0dGVtcHQnLFxuICAnY29uY2x1c2lvbicsXG4gICdjcmVhdGVkQXQnLFxuICAnZGF0YWJhc2VJZCcsXG4gICdkaXNwbGF5VGl0bGUnLFxuICAnZXZlbnQnLFxuICAnaGVhZEJyYW5jaCcsXG4gICdoZWFkU2hhJyxcbiAgJ2pvYnMnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrIHtcbiAgYnVja2V0Pzogc3RyaW5nO1xuICBjb21wbGV0ZWRBdD86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGV2ZW50Pzogc3RyaW5nO1xuICBsaW5rPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGFydGVkQXQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xuICB3b3JrZmxvdz86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaVJlc3VsdHMge1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYXNzOiBudW1iZXI7XG4gICAgZmFpbDogbnVtYmVyO1xuICAgIHBlbmRpbmc6IG51bWJlcjtcbiAgICBza2lwcGluZzogbnVtYmVyO1xuICAgIGNhbmNlbDogbnVtYmVyO1xuICB9O1xuICBjaGVja3M6IENoZWNrW107XG59XG5cbmV4cG9ydCB0eXBlIFdvcmtmbG93Q2xhc3NpZmljYXRpb24gPSAnZmFpbGVkJyB8ICdydW5uaW5nJyB8ICdzdWNjZXNzZnVsJztcblxuZXhwb3J0IGludGVyZmFjZSBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQge1xuICBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbjtcbiAgY2hlY2s6IENoZWNrO1xuICBjaGVja3M6IENoZWNrW107XG59XG5cbmludGVyZmFjZSBDb21wYWN0V29ya2Zsb3dSdW4ge1xuICBicmFuY2g/OiBzdHJpbmc7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGZhaWxlZF9zdGVwPzogc3RyaW5nO1xuICBqb2I/OiBzdHJpbmc7XG4gIGpvYl91cmw/OiBzdHJpbmc7XG4gIHJ1bl9pZD86IHN0cmluZztcbiAgcnVuX3VybD86IHN0cmluZztcbiAgc2hhPzogc3RyaW5nO1xuICB3b3JrZmxvdz86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93UnVuU3RlcCB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG51bWJlcj86IG51bWJlcjtcbiAgc3RhdHVzPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgV29ya2Zsb3dSdW5Kb2Ige1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBkYXRhYmFzZUlkPzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIHN0ZXBzPzogV29ya2Zsb3dSdW5TdGVwW107XG4gIHVybD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93UnVuRGV0YWlscyB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGhlYWRCcmFuY2g/OiBzdHJpbmc7XG4gIGhlYWRTaGE/OiBzdHJpbmc7XG4gIGpvYnM/OiBXb3JrZmxvd1J1bkpvYltdO1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQckNvbW1pdE5vZGUge1xuICBjb21taXQ/OiB7XG4gICAgY29tbWl0dGVkRGF0ZT86IHN0cmluZztcbiAgICBhYmJyZXZpYXRlZE9pZD86IHN0cmluZztcbiAgICBtZXNzYWdlSGVhZGxpbmU/OiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBQckNvbW1pdHNSZXNwb25zZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgIGNvbW1pdHM/OiB7XG4gICAgICAgICAgbm9kZXM/OiBQckNvbW1pdE5vZGVbXTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXRlc3RDb21taXRTdW1tYXJ5IHtcbiAgZGF0ZTogc3RyaW5nO1xuICBoYXNoOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG59XG5cbmNvbnN0IEZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiA9IC9eLio/XFx0VU5LTk9XTiBTVEVQXFx0XFxkezR9LVxcZHsyfS1cXGR7Mn1UW15aXStaXFxzKi87XG5jb25zdCBydGtBdmFpbGFibGUgPSBjb21tYW5kQXZhaWxhYmxlKCdydGsnKTtcbmNvbnN0IG5vb3AgPSAoKTogdm9pZCA9PiB7fTtcbmNvbnN0IFBSX0NPTU1JVFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWl0cyhsYXN0OiAzKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgY29tbWl0IHtcbiAgICAgICAgICAgICAgY29tbWl0dGVkRGF0ZVxuICAgICAgICAgICAgICBhYmJyZXZpYXRlZE9pZFxuICAgICAgICAgICAgICBtZXNzYWdlSGVhZGxpbmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXRlc3RQckNpUmVzdWx0cyhwck51bWJlcj86IHN0cmluZyk6IFByb21pc2U8Q2lSZXN1bHRzPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ3ByJywgJ2NoZWNrcyddO1xuICBpZiAocHJOdW1iZXIpIHtcbiAgICBhcmdzLnB1c2gocHJOdW1iZXIpO1xuICB9XG4gIGFyZ3MucHVzaCgnLS1qc29uJywgJ2J1Y2tldCxjb21wbGV0ZWRBdCxkZXNjcmlwdGlvbixldmVudCxsaW5rLG5hbWUsc3RhcnRlZEF0LHN0YXRlLHdvcmtmbG93Jyk7XG5cbiAgbGV0IGNoZWNrczogQ2hlY2tbXSA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoYXJncywgWzhdKTtcbiAgICBjaGVja3MgPSByYXcudHJpbSgpLmxlbmd0aCA+IDAgPyAoSlNPTi5wYXJzZShyYXcpIGFzIENoZWNrW10pIDogW107XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIGNoZWNrcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdW1tYXJ5OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gIGZvciAoY29uc3QgY2hlY2sgb2YgY2hlY2tzKSB7XG4gICAgY29uc3QgYnVja2V0ID0gY2hlY2suYnVja2V0ID8/ICcnO1xuICAgIHN1bW1hcnlbYnVja2V0XSA9IChzdW1tYXJ5W2J1Y2tldF0gPz8gMCkgKyAxO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdW1tYXJ5OiB7XG4gICAgICB0b3RhbDogY2hlY2tzLmxlbmd0aCxcbiAgICAgIHBhc3M6IHN1bW1hcnkucGFzcyA/PyAwLFxuICAgICAgZmFpbDogc3VtbWFyeS5mYWlsID8/IDAsXG4gICAgICBwZW5kaW5nOiBzdW1tYXJ5LnBlbmRpbmcgPz8gMCxcbiAgICAgIHNraXBwaW5nOiBzdW1tYXJ5LnNraXBwaW5nID8/IDAsXG4gICAgICBjYW5jZWw6IHN1bW1hcnkuY2FuY2VsID8/IDAsXG4gICAgfSxcbiAgICBjaGVja3MsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKFxuICBwck51bWJlcjogc3RyaW5nLFxuICBzbGVlcEZuOiAoc2Vjb25kczogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+ID0gc2xlZXBTZWNvbmRzLFxuICBsYXRlc3RDaVJlc3VsdHNGbjogKHByTnVtYmVyPzogc3RyaW5nKSA9PiBDaVJlc3VsdHMgfCBQcm9taXNlPENpUmVzdWx0cz4gPSBsYXRlc3RQckNpUmVzdWx0cyxcbiAgd3JpdGVQcm9ncmVzc0ZuOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkID0gKG1lc3NhZ2UpID0+IHByb2Nlc3NTdGRlcnIud3JpdGUobWVzc2FnZSlcbik6IFByb21pc2U8W0NpUmVzdWx0cywgbnVtYmVyLCBib29sZWFuXT4ge1xuICBsZXQgYXR0ZW1wdHMgPSAwO1xuICBsZXQgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICBsZXQgc3RvcFdhaXRQcm9ncmVzcyA9IG5vb3A7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCBjbGFzc2lmaWVkUmVzdWx0cyA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gICAgICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRSZXN1bHRzKTtcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDAgfHwgT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIGZhbHNlXTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRlbXB0cyA+PSBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTKSB7XG4gICAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgdHJ1ZV07XG4gICAgICB9XG5cbiAgICAgIGF0dGVtcHRzICs9IDE7XG4gICAgICBpZiAoYXR0ZW1wdHMgPT09IDEpIHtcbiAgICAgICAgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyhcbiAgICAgICAgICBURVNUX0NIRUNLX1dBSVRfTUVTU0FHRSxcbiAgICAgICAgICBURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgICAgICAgICB3cml0ZVByb2dyZXNzRm5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHNsZWVwRm4oVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMpO1xuICAgICAgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0czogQ2lSZXN1bHRzKTogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiB7XG4gIGNvbnN0IGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93OiBSZWNvcmQ8c3RyaW5nLCBDaGVja1tdPiA9IHt9O1xuICBmb3IgKGNvbnN0IGNoZWNrIG9mIGNpUmVzdWx0cy5jaGVja3MpIHtcbiAgICBjb25zdCB3b3JrZmxvd0tleSA9IGNoZWNrLndvcmtmbG93IHx8IGNoZWNrLm5hbWUgfHwgJ3Vua25vd25fd29ya2Zsb3cnO1xuICAgIGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93W3dvcmtmbG93S2V5XSA/Pz0gW107XG4gICAgbGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3dbd29ya2Zsb3dLZXldLnB1c2goY2hlY2spO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdykubWFwKChbd29ya2Zsb3dLZXksIGNoZWNrc10pID0+IHtcbiAgICAgIGNvbnN0IGxhdGVzdEF0dGVtcHRDaGVja3MgPSBsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyhjaGVja3MpO1xuICAgICAgY29uc3QgZmlyc3RDaGVjayA9IGxhdGVzdEF0dGVtcHRDaGVja3NbMF07XG4gICAgICBpZiAoIWZpcnN0Q2hlY2spIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IG5vIGNoZWNrcyBmb3VuZCBmb3Igd29ya2Zsb3cgJHt3b3JrZmxvd0tleX1gKTtcbiAgICAgIH1cbiAgICAgIGxldCBsYXRlc3RDaGVjayA9IGZpcnN0Q2hlY2s7XG4gICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIGxhdGVzdEF0dGVtcHRDaGVja3MpIHtcbiAgICAgICAgaWYgKGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKSA+IGxhdGVzdENoZWNrVGltZXN0YW1wKGxhdGVzdENoZWNrKSkge1xuICAgICAgICAgIGxhdGVzdENoZWNrID0gY2hlY2s7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgd29ya2Zsb3dLZXksXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2lmaWNhdGlvbjogd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihsYXRlc3RBdHRlbXB0Q2hlY2tzKSxcbiAgICAgICAgICBjaGVjazogbGF0ZXN0Q2hlY2ssXG4gICAgICAgICAgY2hlY2tzOiBsYXRlc3RBdHRlbXB0Q2hlY2tzLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKFxuICBjbGFzc2lmaWVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PlxuKTogW1JlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4sIFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5dIHtcbiAgY29uc3QgZmFpbGVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuICBjb25zdCBydW5uaW5nUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuXG4gIGZvciAoY29uc3QgW3dvcmtmbG93S2V5LCByZXN1bHRdIG9mIE9iamVjdC5lbnRyaWVzKGNsYXNzaWZpZWRSZXN1bHRzKSkge1xuICAgIGlmIChyZXN1bHQuY2xhc3NpZmljYXRpb24gPT09ICdmYWlsZWQnKSB7XG4gICAgICBmYWlsZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA9IHJlc3VsdDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAncnVubmluZycgJiYgcmVzdWx0LmNoZWNrcy5zb21lKChjaGVjaykgPT4gdGVzdFJlbGF0ZWRDaGVjayhjaGVjaykpKSB7XG4gICAgICBydW5uaW5nUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjazogQ2hlY2sgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsaW5rID0gY2hlY2s/Lmxpbms7XG4gIGlmICghbGluaykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGxpbmsubWF0Y2goL1xcL2FjdGlvbnNcXC9ydW5zXFwvKFxcZCspLyk/LlsxXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdvcmtmbG93UnVuKHJ1bklkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkPiB7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcnVuSnNvbiA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1qc29uJywgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTLmpvaW4oJywnKV0sIFsxXSk7XG4gIGlmIChydW5Kc29uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShydW5Kc29uKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgcHJvY2Vzc1N0ZGVyci53cml0ZShgV2FybmluZzogQ291bGQgbm90IHBhcnNlIEpTT04gZm9yIHdvcmtmbG93IHJ1biAke3J1bklkfTogJHtlcnJvci5tZXNzYWdlfVxcbmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrczogQ2hlY2tbXSk6IENoZWNrW10ge1xuICBjb25zdCBncm91cHMgPSBuZXcgTWFwPHN0cmluZywgQ2hlY2tbXT4oKTtcbiAgZm9yIChjb25zdCBjaGVjayBvZiBjaGVja3MpIHtcbiAgICBjb25zdCBrZXkgPSB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2spO1xuICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBzLmdldChrZXkpO1xuICAgIGlmIChncm91cCkge1xuICAgICAgZ3JvdXAucHVzaChjaGVjayk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZ3JvdXBzLnNldChrZXksIFtjaGVja10pO1xuICB9XG5cbiAgbGV0IGxhdGVzdEdyb3VwOiBDaGVja1tdID0gW107XG4gIGZvciAoY29uc3QgY3VycmVudEdyb3VwIG9mIGdyb3Vwcy52YWx1ZXMoKSkge1xuICAgIGlmIChsYXRlc3RHcm91cC5sZW5ndGggPT09IDApIHtcbiAgICAgIGxhdGVzdEdyb3VwID0gY3VycmVudEdyb3VwO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGxhdGVzdEdyb3VwVGltZXN0YW1wKGN1cnJlbnRHcm91cCkgPiBsYXRlc3RHcm91cFRpbWVzdGFtcChsYXRlc3RHcm91cCkpIHtcbiAgICAgIGxhdGVzdEdyb3VwID0gY3VycmVudEdyb3VwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGF0ZXN0R3JvdXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIHJldHVybiBydW5JZCA/IGBydW46JHtydW5JZH1gIDogJ3Vua25vd25fcnVuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24oY2hlY2tzOiBDaGVja1tdKTogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB7XG4gIGNvbnN0IGJ1Y2tldHMgPSBjaGVja3MubWFwKChjaGVjaykgPT4gY2hlY2suYnVja2V0ID8/ICcnKTtcbiAgaWYgKGJ1Y2tldHMuc29tZSgoYnVja2V0KSA9PiAhWydwYXNzJywgJ3NraXBwaW5nJywgJ3BlbmRpbmcnXS5pbmNsdWRlcyhidWNrZXQpKSkge1xuICAgIHJldHVybiAnZmFpbGVkJztcbiAgfVxuICBpZiAoYnVja2V0cy5pbmNsdWRlcygncGVuZGluZycpKSB7XG4gICAgcmV0dXJuICdydW5uaW5nJztcbiAgfVxuICByZXR1cm4gJ3N1Y2Nlc3NmdWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgdGltZXN0YW1wID0gY2hlY2suY29tcGxldGVkQXQ7XG4gIGlmICghdGltZXN0YW1wIHx8IHRpbWVzdGFtcCA9PT0gWkVST19USU1FU1RBTVApIHtcbiAgICByZXR1cm4gY2hlY2suc3RhcnRlZEF0ID8/ICcnO1xuICB9XG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0UmVsYXRlZENoZWNrKGNoZWNrOiBDaGVjayk6IGJvb2xlYW4ge1xuICByZXR1cm4gW2NoZWNrLm5hbWUsIGNoZWNrLndvcmtmbG93XS5zb21lKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBURVNUX1JFTEFURURfUEFUVEVSTi50ZXN0KHZhbHVlKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcFNlY29uZHMoc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNsZWVwKHNlY29uZHMgKiAxMDAwKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrUHJDaSgpOiBQcm9taXNlPHsgb3V0cHV0OiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfT4ge1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuICBjb25zdCBsYXRlc3RDb21taXRzID0gYXdhaXQgbGF0ZXN0UHJDb21taXRTdW1tYXJpZXMocHJOdW1iZXIpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyBsYXRlc3QgQ0kgcmVzdWx0cy4uLicpO1xuICBjb25zdCBbY2lSZXN1bHRzLCB3YWl0QXR0ZW1wdHMsIHdhaXRUaW1lZE91dF0gPSBhd2FpdCB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKHByTnVtYmVyKTtcbiAgY29uc3QgY2xhc3NpZmllZExhdGVzdCA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZExhdGVzdCk7XG5cbiAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgc3VtbWFyeTogZGVlcENvcHkoY2lSZXN1bHRzLnN1bW1hcnkpLFxuICAgIHdhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrczogd2FpdEF0dGVtcHRzID4gMCxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0czogd2FpdEF0dGVtcHRzLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dDogd2FpdFRpbWVkT3V0LFxuICAgIGxhdGVzdENvbW1pdHMsXG4gIH07XG5cbiAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLmZhaWxlZF93b3JrZmxvd3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKGZhaWxlZFJlc3VsdHMpLm1hcChhc3luYyAoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBhY3RXb3JrZmxvdyA9IGF3YWl0IGNvbXBhY3RXb3JrZmxvd1Jlc3VsdCh3b3JrZmxvd0tleSwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb21wYWN0V29ya2Zsb3csXG4gICAgICAgICAgLi4uYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMoYXdhaXQgZmFpbGVkV29ya2Zsb3dMb2cocmVzdWx0LmNoZWNrKSksXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykubGVuZ3RoID4gMCkge1xuICAgIHBheWxvYWQudGVzdF93b3JrZmxvd19vdXRwdXQgPSAnVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG4gICAgcGF5bG9hZC5ydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJ1bm5pbmdSZXN1bHRzKS5tYXAoKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4gY29tcGFjdFdvcmtmbG93UmVzdWx0KHdvcmtmbG93S2V5LCByZXN1bHQpKVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIHJldHVybiB7IG91dHB1dDogc3VjY2Vzc2Z1bENpT3V0cHV0KGxhdGVzdENvbW1pdHMpLCBleGl0Q29kZTogMCB9O1xufVxuXG5mdW5jdGlvbiBsYXRlc3RHcm91cFRpbWVzdGFtcChjaGVja3M6IENoZWNrW10pOiBzdHJpbmcge1xuICBsZXQgbGF0ZXN0ID0gJyc7XG4gIGZvciAoY29uc3QgY2hlY2sgb2YgY2hlY2tzKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spO1xuICAgIGlmICh0aW1lc3RhbXAgPiBsYXRlc3QpIHtcbiAgICAgIGxhdGVzdCA9IHRpbWVzdGFtcDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxhdGVzdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGF0ZXN0UHJDb21taXRTdW1tYXJpZXMocHJOdW1iZXI6IHN0cmluZyk6IFByb21pc2U8TGF0ZXN0Q29tbWl0U3VtbWFyeVtdPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDxQckNvbW1pdHNSZXNwb25zZT4oUFJfQ09NTUlUU19RVUVSWSwge1xuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBOdW1iZXIocHJOdW1iZXIpLFxuICB9KTtcblxuICByZXR1cm4gKHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5jb21taXRzPy5ub2RlcyA/PyBbXSlcbiAgICAuZmxhdE1hcCgobm9kZSkgPT4ge1xuICAgICAgY29uc3QgZGF0ZSA9IHN0cmluZ09yVW5kZWZpbmVkKG5vZGUuY29tbWl0Py5jb21taXR0ZWREYXRlKTtcbiAgICAgIGNvbnN0IGhhc2ggPSBzdHJpbmdPclVuZGVmaW5lZChub2RlLmNvbW1pdD8uYWJicmV2aWF0ZWRPaWQpO1xuICAgICAgY29uc3QgdGl0bGUgPSBzdHJpbmdPclVuZGVmaW5lZChub2RlLmNvbW1pdD8ubWVzc2FnZUhlYWRsaW5lKTtcbiAgICAgIHJldHVybiBkYXRlICYmIGhhc2ggJiYgdGl0bGUgPyBbeyBkYXRlLCBoYXNoLCB0aXRsZSB9XSA6IFtdO1xuICAgIH0pXG4gICAgLnRvUmV2ZXJzZWQoKTtcbn1cblxuZnVuY3Rpb24gc3VjY2Vzc2Z1bENpT3V0cHV0KGxhdGVzdENvbW1pdHM6IExhdGVzdENvbW1pdFN1bW1hcnlbXSk6IHN0cmluZyB7XG4gIHJldHVybiBgQWxsIENJIHdvcmtmbG93cyBwYXNzZWQuXG4ke2Zvcm1hdExhdGVzdENvbW1pdFNlY3Rpb24obGF0ZXN0Q29tbWl0cyl9YDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TGF0ZXN0Q29tbWl0U2VjdGlvbihsYXRlc3RDb21taXRzOiBMYXRlc3RDb21taXRTdW1tYXJ5W10pOiBzdHJpbmcge1xuICBpZiAobGF0ZXN0Q29tbWl0cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ0xhdGVzdCBjb21taXRzOiB1bmF2YWlsYWJsZS5cXG4nO1xuICB9XG5cbiAgcmV0dXJuIHlhbWxEdW1wKHsgbGF0ZXN0Q29tbWl0cyB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcGFjdFdvcmtmbG93UmVzdWx0KFxuICB3b3JrZmxvd0tleTogc3RyaW5nLFxuICByZXN1bHQ6IENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdFxuKTogUHJvbWlzZTx7IGNsYXNzaWZpY2F0aW9uOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uIH0gJiBDb21wYWN0V29ya2Zsb3dSdW4+IHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhyZXN1bHQuY2hlY2spO1xuICBjb25zdCBydW4gPSAoYXdhaXQgd29ya2Zsb3dSdW4ocnVuSWQpKSBhcyBXb3JrZmxvd1J1bkRldGFpbHMgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGZhaWxlZEpvYiA9IGZhaWxlZFdvcmtmbG93UnVuSm9iKHJ1biwgc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLm5hbWUpKTtcbiAgcmV0dXJuIHtcbiAgICBjbGFzc2lmaWNhdGlvbjogcmVzdWx0LmNsYXNzaWZpY2F0aW9uLFxuICAgIHdvcmtmbG93OiB3b3JrZmxvd0tleSxcbiAgICBqb2I6IHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5uYW1lKSxcbiAgICBqb2JfdXJsOiBzdHJpbmdPclVuZGVmaW5lZChmYWlsZWRKb2I/LnVybCksXG4gICAgZmFpbGVkX3N0ZXA6IGZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUoZmFpbGVkSm9iKSxcbiAgICBydW5faWQ6IHJ1bklkLFxuICAgIHJ1bl91cmw6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8udXJsKSA/PyBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2subGluayksXG4gICAgYnJhbmNoOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmhlYWRCcmFuY2gpLFxuICAgIHNoYTogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5oZWFkU2hhKSxcbiAgICBjb25jbHVzaW9uOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmNvbmNsdXNpb24pLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmYWlsZWRXb3JrZmxvd0xvZyhjaGVjazogQ2hlY2spOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrKTtcbiAgaWYgKCFydW5JZCkge1xuICAgIHJldHVybiAnRmFpbGVkIGxhdGVzdCByZXN1bHQgaGFzIG5vIEdpdEh1YiBBY3Rpb25zIHJ1biBsaW5rLic7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1sb2ctZmFpbGVkJ10sIFsxXSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzKGxvZzogc3RyaW5nKToge1xuICBmYWlsZWRfbG9nOiBzdHJpbmc7XG59IHtcbiAgcmV0dXJuIHtcbiAgICBmYWlsZWRfbG9nOiByZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyhsb2cpLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyhsb2c6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNhbml0aXplZElucHV0ID0gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMobG9nKSk7XG4gIGlmICghcnRrQXZhaWxhYmxlKSB7XG4gICAgcmV0dXJuIHNhbml0aXplZElucHV0O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jU2FmZShbJ3J0aycsICdsb2cnXSwgc2FuaXRpemVkSW5wdXQpO1xuICByZXR1cm4gcmVzdWx0LmV4aXRDb2RlID09PSAwICYmIHJlc3VsdC5vdXRwdXQudHJpbSgpLmxlbmd0aCA+IDBcbiAgICA/IHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2cocmVzdWx0Lm91dHB1dClcbiAgICA6IHNhbml0aXplZElucHV0O1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKGxvZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGxvZ1xuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnJlcGxhY2UoRkFJTEVEX0xPR19MSU5FX1BSRUZJWF9QQVRURVJOLCAnJykpXG4gICAgLmpvaW4oJ1xcbicpXG4gICAgLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nT3JVbmRlZmluZWQodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93UnVuSm9iKFxuICBydW46IFdvcmtmbG93UnVuRGV0YWlscyB8IHVuZGVmaW5lZCxcbiAgam9iTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBXb3JrZmxvd1J1bkpvYiB8IHVuZGVmaW5lZCB7XG4gIGlmICghcnVuPy5qb2JzIHx8IHJ1bi5qb2JzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLm5hbWUgPT09IGpvYk5hbWUpID8/XG4gICAgcnVuLmpvYnMuZmluZCgoam9iKSA9PiBqb2IuY29uY2x1c2lvbiA9PT0gJ2ZhaWx1cmUnKSA/P1xuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCcpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUoam9iOiBXb3JrZmxvd1J1bkpvYiB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICgham9iPy5zdGVwcyB8fCBqb2Iuc3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgam9iLnN0ZXBzLmZpbmQoKHN0ZXApID0+IHN0ZXAuY29uY2x1c2lvbiA9PT0gJ2ZhaWx1cmUnKT8ubmFtZSA/P1xuICAgIGpvYi5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCcpPy5uYW1lXG4gICk7XG59XG4iLCJpbXBvcnQgeyBydW5Db21tYW5kV2l0aFByb2dyZXNzIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRCYXNlQnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCgpKSA/PyAoYXdhaXQgY3VycmVudERlZmF1bHRCcmFuY2goKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50RGVmYXVsdEJyYW5jaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkZWZhdWx0QnJhbmNoID0gYXdhaXQgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhbXG4gICAgJ2doJyxcbiAgICAncmVwbycsXG4gICAgJ3ZpZXcnLFxuICAgICctLWpzb24nLFxuICAgICdkZWZhdWx0QnJhbmNoUmVmJyxcbiAgICAnLS10ZW1wbGF0ZScsXG4gICAgJ3t7LmRlZmF1bHRCcmFuY2hSZWYubmFtZX19JyxcbiAgXSk7XG4gIHJldHVybiByZXF1aXJlTm9uRW1wdHkoZGVmYXVsdEJyYW5jaC50cmltKCksICdFcnJvcjogY291bGQgbm90IGRldGVybWluZSB0aGUgZGVmYXVsdCBicmFuY2gnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGJhc2VCcmFuY2hPdXRwdXQgPSBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFtcbiAgICAgICdnaCcsXG4gICAgICAncHInLFxuICAgICAgJ3ZpZXcnLFxuICAgICAgJy0tanNvbicsXG4gICAgICAnYmFzZVJlZk5hbWUnLFxuICAgICAgJy0tdGVtcGxhdGUnLFxuICAgICAgJ3t7LmJhc2VSZWZOYW1lfX0nLFxuICAgIF0pO1xuICAgIGNvbnN0IGJhc2VCcmFuY2ggPSBiYXNlQnJhbmNoT3V0cHV0LnRyaW0oKTtcbiAgICByZXR1cm4gYmFzZUJyYW5jaC5sZW5ndGggPiAwID8gYmFzZUJyYW5jaCA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKGVycm9yKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gL25vIHB1bGwgcmVxdWVzdHM/IGZvdW5kIGZvciBicmFuY2gvaS50ZXN0KFN0cmluZyhlcnJvcikpO1xufVxuXG5mdW5jdGlvbiByZXF1aXJlTm9uRW1wdHkodmFsdWU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuIiwiaW1wb3J0IHsgaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7XG4gIGN1cnJlbnRQck51bWJlcixcbiAgY3VycmVudFJlcG9QYXJ0cyxcbiAgZXhpdFdpdGhFcnJvcixcbiAgZ2hBbGxvd0V4aXRDb2RlcyxcbiAgZ3JhcGhxbCxcbiAgdHlwZSBKc29uT2JqZWN0LFxuICB0eXBlIE1lc3NhZ2UsXG4gIHR5cGUgTWVzc2FnZUNvbm5lY3Rpb24sXG4gIHR5cGUgTWV0YWRhdGFOb2RlLFxuICBwcm9ncmVzcyxcbiAgeWFtbER1bXAsXG59IGZyb20gJy4vc2hhcmVkLmpzJztcblxuaW50ZXJmYWNlIElzc3VlTWVzc2FnZUNvbW1lbnROb2RlIHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgUHJSZXZpZXdOb2RlIHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIHN0YXRlPzogc3RyaW5nIHwgbnVsbDtcbiAgc3VibWl0dGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59XG5cbmludGVyZmFjZSBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgIGNvbW1lbnRzPzogTWVzc2FnZUNvbm5lY3Rpb248SXNzdWVNZXNzYWdlQ29tbWVudE5vZGU+O1xuICAgICAgICByZXZpZXdzPzogTWVzc2FnZUNvbm5lY3Rpb248UHJSZXZpZXdOb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIElzc3VlTWVzc2FnZXNSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Qge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBpc3N1ZT86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59XG5cbmludGVyZmFjZSBQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgcHVsbFJlcXVlc3Q/OiBNZXRhZGF0YU5vZGU7XG4gICAgfTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIElzc3VlTWV0YWRhdGFSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Qge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBpc3N1ZT86IE1ldGFkYXRhTm9kZTtcbiAgICB9O1xuICB9O1xufVxuXG5jb25zdCBJU1NVRV9NRVNTQUdFU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgaXNzdWUobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IElTU1VFX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgaXNzdWUobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIG51bWJlclxuICAgICAgICB0aXRsZVxuICAgICAgICB1cmxcbiAgICAgICAgYm9keVxuICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9DT01NRU5UU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIG51bWJlclxuICAgICAgICB0aXRsZVxuICAgICAgICB1cmxcbiAgICAgICAgYm9keVxuICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9SRVZJRVdTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgc3VibWl0dGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSXNzdWVOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2UsICdpc3N1ZScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUHJOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2UsICdwdWxsIHJlcXVlc3QnKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBpc3N1ZU1lc3NhZ2VzKG93bmVyLCBuYW1lLCBub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZU51bWJlcikpO1xuICBwcm9ncmVzcyhgRmV0Y2hlZCBpc3N1ZSAjJHtpc3N1ZS5udW1iZXJ9IG1lc3NhZ2VzLmApO1xuICByZXR1cm4geWFtbER1bXAoeyBpc3N1ZSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJNZXNzYWdlcyhwck51bWJlcj86IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc29sdmVkUHJOdW1iZXIgPSBwck51bWJlciA9PT0gdW5kZWZpbmVkID8gYXdhaXQgY3VycmVudFByTnVtYmVyKCkgOiBub3JtYWxpemVQck51bWJlcihwck51bWJlcik7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHJlc29sdmVkUHJOdW1iZXIpO1xuICBwcm9ncmVzcyhgRmV0Y2hlZCBwdWxsIHJlcXVlc3QgIyR7cHVsbFJlcXVlc3QubnVtYmVyfSBtZXNzYWdlcy5gKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcHVsbF9yZXF1ZXN0OiBwdWxsUmVxdWVzdCB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBwck51bWJlck91dHB1dCA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydwcicsICd2aWV3JywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcubnVtYmVyJ10sIFsxXSk7XG4gIGNvbnN0IHByTnVtYmVyID0gcHJOdW1iZXJPdXRwdXQudHJpbSgpO1xuICBpZiAoaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKHByTnVtYmVyT3V0cHV0KSB8fCAhL15cXGQrJC8udGVzdChwck51bWJlcikpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocHJOdW1iZXIpO1xuICByZXR1cm4geWFtbER1bXAoeyBwdWxsX3JlcXVlc3Q6IHB1bGxSZXF1ZXN0IH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICByZXR1cm4gYXdhaXQgcHJNZXNzYWdlcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyLCBsYWJlbDogJ2lzc3VlJyB8ICdwdWxsIHJlcXVlc3QnKTogc3RyaW5nIHtcbiAgY29uc3QgcmVmZXJlbmNlVGV4dCA9IFN0cmluZyhyZWZlcmVuY2UpLnRyaW0oKTtcbiAgaWYgKHJlZmVyZW5jZVRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6ICR7bGFiZWx9IHJlZmVyZW5jZSBpcyByZXF1aXJlZGAsIDIpO1xuICB9XG5cbiAgaWYgKC9eXFxkKyQvLnRlc3QocmVmZXJlbmNlVGV4dCkpIHtcbiAgICByZXR1cm4gcmVmZXJlbmNlVGV4dDtcbiAgfVxuXG4gIGNvbnN0IGtpbmRTZWdtZW50ID0gbGFiZWwgPT09ICdpc3N1ZScgPyAnaXNzdWVzJyA6ICdwdWxsJztcbiAgY29uc3QgbWF0Y2ggPSByZWZlcmVuY2VUZXh0Lm1hdGNoKFxuICAgIG5ldyBSZWdFeHAoYF5odHRwcz86Ly8oPzp3d3dcXFxcLik/Z2l0aHViXFxcXC5jb20vW14vXSsvW14vXSsvJHtraW5kU2VnbWVudH0vKFxcXFxkKykoPzovfCQpYClcbiAgKTtcbiAgaWYgKG1hdGNoPy5bMV0pIHtcbiAgICByZXR1cm4gbWF0Y2hbMV07XG4gIH1cblxuICBleGl0V2l0aEVycm9yKGBFcnJvcjogZXhwZWN0ZWQgYSBHaXRIdWIgJHtsYWJlbH0gbnVtYmVyIG9yIFVSTCwgcmVjZWl2ZWQgXCIke3JlZmVyZW5jZVRleHR9XCJgLCAyKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNzdWVNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPElzc3VlTWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgbm91bjogJ2lzc3VlJyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZSxcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgSXNzdWVNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX01FU1NBR0VTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlPy5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgLi4uaXNzdWUsIG1lc3NhZ2VzIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIG5vdW46ICdwdWxsIHJlcXVlc3QnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0LFxuICB9KTtcbiAgY29uc3QgW2lzc3VlQ29tbWVudHMsIHJldmlld3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHBySXNzdWVDb21tZW50cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICAgIHByUmV2aWV3cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnB1bGxSZXF1ZXN0LFxuICAgIG1lc3NhZ2VzOiBbLi4uaXNzdWVDb21tZW50cywgLi4ucmV2aWV3c10udG9Tb3J0ZWQoY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdChsZWZ0OiBNZXNzYWdlLCByaWdodDogTWVzc2FnZSk6IG51bWJlciB7XG4gIGNvbnN0IGxlZnRDcmVhdGVkQXQgPSB0eXBlb2YgbGVmdC5jcmVhdGVkQXQgPT09ICdzdHJpbmcnID8gbGVmdC5jcmVhdGVkQXQgOiAnJztcbiAgY29uc3QgcmlnaHRDcmVhdGVkQXQgPSB0eXBlb2YgcmlnaHQuY3JlYXRlZEF0ID09PSAnc3RyaW5nJyA/IHJpZ2h0LmNyZWF0ZWRBdCA6ICcnO1xuICByZXR1cm4gbGVmdENyZWF0ZWRBdC5sb2NhbGVDb21wYXJlKHJpZ2h0Q3JlYXRlZEF0KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJJc3N1ZUNvbW1lbnRzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIHJldHVybiBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlLCBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfQ09NTUVOVFNfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LmNvbW1lbnRzLFxuICAgIG1hcE5vZGU6IGNvbW1lbnRNZXNzYWdlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJSZXZpZXdzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIHJldHVybiBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPFByUmV2aWV3Tm9kZSwgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX1JFVklFV1NfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LnJldmlld3MsXG4gICAgbWFwTm9kZTogcmV2aWV3TWVzc2FnZSxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlTWVzc2FnZXM8VE5vZGUsIFRSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Q+KGNvbmZpZzoge1xuICBxdWVyeTogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2U6IFRSZXNwb25zZSkgPT4gTWVzc2FnZUNvbm5lY3Rpb248VE5vZGU+IHwgdW5kZWZpbmVkO1xuICBtYXBOb2RlOiAobm9kZTogVE5vZGUpID0+IE1lc3NhZ2U7XG59KTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgbGV0IGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb25zdCBtZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25maWcuc2VsZWN0Q29ubmVjdGlvbihcbiAgICAgIGF3YWl0IGdyYXBocWw8VFJlc3BvbnNlPihjb25maWcucXVlcnksIHtcbiAgICAgICAgb3duZXI6IGNvbmZpZy5vd25lcixcbiAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICAgIG51bWJlcjogTnVtYmVyKGNvbmZpZy5udW1iZXIpLFxuICAgICAgICBjdXJzb3IsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgIHJldHVybiBtZXNzYWdlcztcbiAgICB9XG5cbiAgICBtZXNzYWdlcy5wdXNoKC4uLmNvbm5lY3Rpb24ubm9kZXMubWFwKGNvbmZpZy5tYXBOb2RlKS5maWx0ZXIoaGFzTWVzc2FnZUJvZHkpKTtcblxuICAgIGlmICghY29ubmVjdGlvbi5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cbiAgICBjdXJzb3IgPSBjb25uZWN0aW9uLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hNZXRhZGF0YTxUUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0Pihjb25maWc6IHtcbiAgcXVlcnk6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZyB8IG51bWJlcjtcbiAgbm91bjogc3RyaW5nO1xuICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlOiBUUmVzcG9uc2UpID0+IE1ldGFkYXRhTm9kZSB8IHVuZGVmaW5lZDtcbn0pOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBjb25maWcuc2VsZWN0TWV0YWRhdGEoXG4gICAgYXdhaXQgZ3JhcGhxbDxUUmVzcG9uc2U+KGNvbmZpZy5xdWVyeSwge1xuICAgICAgb3duZXI6IGNvbmZpZy5vd25lcixcbiAgICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgICAgbnVtYmVyOiBOdW1iZXIoY29uZmlnLm51bWJlciksXG4gICAgfSlcbiAgKTtcblxuICBpZiAoIW1ldGFkYXRhKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgJHtjb25maWcubm91bn0gIyR7Y29uZmlnLm51bWJlcn0gaW4gJHtjb25maWcub3duZXJ9LyR7Y29uZmlnLm5hbWV9LmApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBudW1iZXI6IG1ldGFkYXRhLm51bWJlcixcbiAgICB0aXRsZTogbWV0YWRhdGEudGl0bGUsXG4gICAgdXJsOiBtZXRhZGF0YS51cmwsXG4gICAgYXV0aG9yOiBtZXRhZGF0YS5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBib2R5OiBtZXRhZGF0YS5ib2R5ID8/ICcnLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21tZW50TWVzc2FnZShjb21tZW50OiBJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSk6IE1lc3NhZ2Uge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdjb21tZW50JyxcbiAgICBhdXRob3I6IGNvbW1lbnQuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiBjb21tZW50LmNyZWF0ZWRBdCxcbiAgICB1cmw6IGNvbW1lbnQudXJsLFxuICAgIGJvZHk6IGNvbW1lbnQuYm9keSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmV2aWV3TWVzc2FnZShyZXZpZXc6IFByUmV2aWV3Tm9kZSk6IE1lc3NhZ2Uge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdyZXZpZXcnLFxuICAgIGF1dGhvcjogcmV2aWV3LmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIHN0YXRlOiByZXZpZXcuc3RhdGUgPz8gdW5kZWZpbmVkLFxuICAgIGNyZWF0ZWRBdDogcmV2aWV3LnN1Ym1pdHRlZEF0ID8/IHVuZGVmaW5lZCxcbiAgICB1cmw6IHJldmlldy51cmwsXG4gICAgYm9keTogcmV2aWV3LmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc01lc3NhZ2VCb2R5KG1lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBtZXNzYWdlLmJvZHkgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2UuYm9keS5sZW5ndGggPiAwO1xufVxuIiwiaW1wb3J0IHsgY3VycmVudFByTnVtYmVyLCBleGl0V2l0aEVycm9yLCBnaCwgcHJvZ3Jlc3MsIHJ1bkNvbW1hbmQsIHlhbWxEdW1wIH0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5Qck9wdGlvbnMge1xuICBib2R5Pzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVQck9wdGlvbnMge1xuICBib2R5OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuUHIoeyBib2R5LCB0aXRsZSB9OiBPcGVuUHJPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBoZWFkT3V0cHV0ID0gYXdhaXQgcnVuQ29tbWFuZChbJ2dpdCcsICdicmFuY2gnLCAnLS1zaG93LWN1cnJlbnQnXSk7XG4gIGNvbnN0IGhlYWQgPSBoZWFkT3V0cHV0LnRyaW0oKTtcbiAgY29uc3QgYmFzZU91dHB1dCA9IGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICdkZWZhdWx0QnJhbmNoUmVmJywgJy0tanEnLCAnLmRlZmF1bHRCcmFuY2hSZWYubmFtZSddKTtcbiAgY29uc3QgYmFzZSA9IGJhc2VPdXRwdXQudHJpbSgpO1xuXG4gIGlmICghaGVhZCkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCBicmFuY2gnKTtcbiAgfVxuICBpZiAoaGVhZCA9PT0gYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBjdXJyZW50IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBicmFuY2ggKCR7YmFzZX0pYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVBcmdzID0gWydwcicsICdjcmVhdGUnLCAnLS1iYXNlJywgYmFzZSwgJy0taGVhZCcsIGhlYWQsICctLWZpbGwnXTtcbiAgaWYgKHRpdGxlKSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLXRpdGxlJywgdGl0bGUpO1xuICB9XG4gIGlmIChib2R5KSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLWJvZHktZmlsZScsICctJyk7XG4gIH1cblxuICBwcm9ncmVzcygnQ3JlYXRpbmcgcHVsbCByZXF1ZXN0Li4uJyk7XG4gIGF3YWl0IGdoKGNyZWF0ZUFyZ3MsIGJvZHkpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvciddKSlcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByKHsgYm9keSwgdGl0bGUgfTogVXBkYXRlUHJPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcyhgVXBkYXRpbmcgcHVsbCByZXF1ZXN0ICMke3ByTnVtYmVyfS4uLmApO1xuICByZXR1cm4gYXdhaXQgZWRpdFByKHByTnVtYmVyLCBbJy0tdGl0bGUnLCB0aXRsZSwgJy0tYm9keS1maWxlJywgJy0nXSwgYm9keSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVkaXRQcihwck51bWJlcjogc3RyaW5nLCBlZGl0QXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGF3YWl0IGdoKFsncHInLCAnZWRpdCcsIHByTnVtYmVyLCAuLi5lZGl0QXJnc10sIHN0ZGluRGF0YSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoXG4gICAgICBhd2FpdCBnaChbXG4gICAgICAgICdwcicsXG4gICAgICAgICd2aWV3JyxcbiAgICAgICAgcHJOdW1iZXIsXG4gICAgICAgICctLWpzb24nLFxuICAgICAgICAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvcixib2R5JyxcbiAgICAgIF0pXG4gICAgKVxuICApO1xufVxuIiwiaW1wb3J0IHtcbiAgY3VycmVudFByTnVtYmVyLFxuICBjdXJyZW50UmVwb1BhcnRzLFxuICBleGl0V2l0aEVycm9yLFxuICBncmFwaHFsLFxuICBwcm9ncmVzcyxcbiAgcmVhZFJlcXVpcmVkU3RkaW5UZXh0LFxuICB5YW1sRHVtcCxcbn0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG5jb25zdCBSRVZJRVdfU05JUFBFVF9DT05URVhUX0xJTkVTID0gMjtcblxuaW50ZXJmYWNlIENvbW1pdFJlZiB7XG4gIG9pZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUmV2aWV3Q29tbWVudE5vZGUge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWl0PzogQ29tbWl0UmVmIHwgbnVsbDtcbiAgb3JpZ2luYWxDb21taXQ/OiBDb21taXRSZWYgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn1cblxuaW50ZXJmYWNlIFJldmlld1RocmVhZE5vZGUge1xuICBpZDogc3RyaW5nO1xuICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICBpc091dGRhdGVkPzogYm9vbGVhbiB8IG51bGw7XG4gIHBhdGg/OiBzdHJpbmcgfCBudWxsO1xuICBsaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgb3JpZ2luYWxMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgc3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgb3JpZ2luYWxTdGFydExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBjb21tZW50czoge1xuICAgIG5vZGVzOiBSZXZpZXdDb21tZW50Tm9kZVtdO1xuICAgIHBhZ2VJbmZvOiB7XG4gICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbiAgfTtcbn1cblxuY29uc3QgUkVWSUVXX1RIUkVBRF9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld1RocmVhZHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgICAgaXNPdXRkYXRlZFxuICAgICAgICAgICAgcGF0aFxuICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgb3JpZ2luYWxMaW5lXG4gICAgICAgICAgICBzdGFydExpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhcnRMaW5lXG4gICAgICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwKSB7XG4gICAgICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxMaW5lXG4gICAgICAgICAgICAgICAgc3RhcnRMaW5lXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgICAgICBjb21taXQgeyBvaWQgfVxuICAgICAgICAgICAgICAgIG9yaWdpbmFsQ29tbWl0IHsgb2lkIH1cbiAgICAgICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX0NPTU1FTlRfUVVFUlkgPSBgXG4gIHF1ZXJ5KCR0aHJlYWRJZDogSUQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICBub2RlKGlkOiAkdGhyZWFkSWQpIHtcbiAgICAgIC4uLiBvbiBQdWxsUmVxdWVzdFJldmlld1RocmVhZCB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICBvcmlnaW5hbExpbmVcbiAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgIGNvbW1pdCB7IG9pZCB9XG4gICAgICAgICAgICBvcmlnaW5hbENvbW1pdCB7IG9pZCB9XG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IEZJTEVfVEVYVF9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJGV4cHJlc3Npb246IFN0cmluZyEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBvYmplY3QoZXhwcmVzc2lvbjogJGV4cHJlc3Npb24pIHtcbiAgICAgICAgLi4uIG9uIEJsb2Ige1xuICAgICAgICAgIGlzQmluYXJ5XG4gICAgICAgICAgdGV4dFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld1RocmVhZHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcGxpZXNGcm9tU3RkaW4oKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCdFcnJvcjogSlNPTiBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpO1xuICBjb25zdCBwYXlsb2FkID0gcGFyc2VSZXBseUlucHV0KGlucHV0KTtcbiAgY29uc3Qgbm9ybWFsaXplZFJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBbdGhyZWFkSWQsIGJvZHldIG9mIE9iamVjdC5lbnRyaWVzKHBheWxvYWQucmVwbGllcykpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnICYmIGJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZFJlcGxpZXNbdGhyZWFkSWRdID0gYm9keTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWRSZXBsaWVzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFxuICBxdWVyeTogc3RyaW5nLFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIsXG4gIG9uVGhyZWFkOiAodGhyZWFkOiBSZXZpZXdUaHJlYWROb2RlKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBncmFwaHFsPHtcbiAgICAgIGRhdGE/OiB7XG4gICAgICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgICAgICByZXZpZXdUaHJlYWRzPzoge1xuICAgICAgICAgICAgICBub2RlczogUmV2aWV3VGhyZWFkTm9kZVtdO1xuICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0+KHF1ZXJ5LCB7XG4gICAgICBvd25lcixcbiAgICAgIG5hbWUsXG4gICAgICBudW1iZXI6IE51bWJlcihwck51bWJlciksXG4gICAgICBjdXJzb3IsXG4gICAgfSk7XG4gICAgY29uc3QgcmV2aWV3VGhyZWFkcyA9IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5yZXZpZXdUaHJlYWRzO1xuXG4gICAgaWYgKCFyZXZpZXdUaHJlYWRzKSB7XG4gICAgICBleGl0V2l0aEVycm9yKFxuICAgICAgICAnQ291bGQgbm90IGZpbmQgcmV2aWV3VGhyZWFkcyBpbiBHcmFwaFFMIHJlc3BvbnNlLiBUaGUgcHVsbCByZXF1ZXN0IG1heSBub3QgZXhpc3Qgb3IgdGhlcmUgd2FzIGFuIEFQSSBlcnJvci4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGhyZWFkIG9mIHJldmlld1RocmVhZHMubm9kZXMpIHtcbiAgICAgIGF3YWl0IG9uVGhyZWFkKHRocmVhZCk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGN1cnNvciA9IHJldmlld1RocmVhZHMucGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGlkczogc3RyaW5nW10gPSBbXTtcbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfSURTX1FVRVJZLCBvd25lciwgbmFtZSwgcHJOdW1iZXIsICh0aHJlYWQpID0+IHtcbiAgICBpZiAoIXRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICBpZHMucHVzaCh0aHJlYWQuaWQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpZHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+W10+IHtcbiAgY29uc3QgdGhyZWFkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuICBjb25zdCBmaWxlVGV4dENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPj4oKTtcblxuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCBhc3luYyAodGhyZWFkKSA9PiB7XG4gICAgaWYgKHRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWVudHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRocmVhZC5jb21tZW50cy5ub2Rlcy5tYXAoKGNvbW1lbnQpID0+XG4gICAgICAgIG5vcm1hbGl6ZUNvbW1lbnQoY29tbWVudCwgdGhyZWFkLnBhdGggPz8gdW5kZWZpbmVkLCB0aHJlYWQuaXNPdXRkYXRlZCA/PyBmYWxzZSwgb3duZXIsIG5hbWUsIGZpbGVUZXh0Q2FjaGUpXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgcGFnZUluZm8gPSB0aHJlYWQuY29tbWVudHMucGFnZUluZm87XG4gICAgbGV0IGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAocGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICAgIGRhdGE/OiB7XG4gICAgICAgICAgbm9kZT86IHtcbiAgICAgICAgICAgIGNvbW1lbnRzPzoge1xuICAgICAgICAgICAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfT4oUkVWSUVXX0NPTU1FTlRfUVVFUlksIHsgdGhyZWFkSWQ6IHRocmVhZC5pZCwgY3Vyc29yIH0pO1xuICAgICAgY29uc3QgY29tbWVudENvbm5lY3Rpb24gPSByZXNwb25zZS5kYXRhPy5ub2RlPy5jb21tZW50cztcblxuICAgICAgaWYgKCFjb21tZW50Q29ubmVjdGlvbikge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCBjb21tZW50cyBpbiBHcmFwaFFMIHJlc3BvbnNlIGZvciB0aHJlYWQgJHt0aHJlYWQuaWR9LmApO1xuICAgICAgfVxuXG4gICAgICBjb21tZW50cy5wdXNoKFxuICAgICAgICAuLi4oYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgY29tbWVudENvbm5lY3Rpb24ubm9kZXMubWFwKChjb21tZW50KSA9PlxuICAgICAgICAgICAgbm9ybWFsaXplQ29tbWVudChjb21tZW50LCB0aHJlYWQucGF0aCA/PyB1bmRlZmluZWQsIHRocmVhZC5pc091dGRhdGVkID8/IGZhbHNlLCBvd25lciwgbmFtZSwgZmlsZVRleHRDYWNoZSlcbiAgICAgICAgICApXG4gICAgICAgICkpXG4gICAgICApO1xuICAgICAgcGFnZUluZm8gPSBjb21tZW50Q29ubmVjdGlvbi5wYWdlSW5mbztcbiAgICAgIGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhyZWFkcy5wdXNoKHtcbiAgICAgIGlkOiB0aHJlYWQuaWQsXG4gICAgICBpc1Jlc29sdmVkOiB0aHJlYWQuaXNSZXNvbHZlZCxcbiAgICAgIGlzT3V0ZGF0ZWQ6IHRocmVhZC5pc091dGRhdGVkLFxuICAgICAgcGF0aDogdGhyZWFkLnBhdGgsXG4gICAgICBsaW5lOiB0aHJlYWQubGluZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdGhyZWFkLm9yaWdpbmFsTGluZSxcbiAgICAgIHN0YXJ0TGluZTogdGhyZWFkLnN0YXJ0TGluZSxcbiAgICAgIG9yaWdpbmFsU3RhcnRMaW5lOiB0aHJlYWQub3JpZ2luYWxTdGFydExpbmUsXG4gICAgICBjb21tZW50cyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRocmVhZHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UHJSZXZpZXdUaHJlYWRzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMuLi4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgdW5yZXNvbHZlZF90aHJlYWRzOiBhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcbiAgY29uc3QgdW5yZXNvbHZlZElkcyA9IG5ldyBTZXQoYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpKTtcblxuICBwcm9ncmVzcyhgUmVwbHlpbmcgdG8gJHtPYmplY3Qua2V5cyhyZXBsaWVzKS5sZW5ndGh9IHJldmlldyB0aHJlYWRzLi4uYCk7XG5cbiAgY29uc3QgcmVzb2x2ZWRUaHJlYWRJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhyZXBsaWVzKTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgW3RocmVhZElkLCBib2R5XV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICBwcm9ncmVzcyhgUHJvY2Vzc2luZyAke2luZGV4ICsgMX0vJHtlbnRyaWVzLmxlbmd0aH06ICR7dGhyZWFkSWR9YCk7XG4gICAgaWYgKCF1bnJlc29sdmVkSWRzLmhhcyh0aHJlYWRJZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICBkYXRhPzoge1xuICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkPzoge1xuICAgICAgICAgIHRocmVhZD86IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0+KFxuICAgICAgYFxuICAgICAgICBtdXRhdGlvbiAoJHRocmVhZElkOiBJRCEsICRib2R5OiBTdHJpbmchKSB7XG4gICAgICAgICAgYWRkUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRSZXBseShpbnB1dDogeyBwdWxsUmVxdWVzdFJldmlld1RocmVhZElkOiAkdGhyZWFkSWQsIGJvZHk6ICRib2R5IH0pIHtcbiAgICAgICAgICAgIGNvbW1lbnQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZChpbnB1dDogeyB0aHJlYWRJZDogJHRocmVhZElkIH0pIHtcbiAgICAgICAgICAgIHRocmVhZCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICB7IHRocmVhZElkLCBib2R5IH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlLmRhdGE/LnJlc29sdmVSZXZpZXdUaHJlYWQ/LnRocmVhZD8uaXNSZXNvbHZlZCkge1xuICAgICAgcmVzb2x2ZWRUaHJlYWRJZHMucHVzaCh0aHJlYWRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyZXNzKGBXYXJuaW5nOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aHJlYWQgJHt0aHJlYWRJZH0uYCk7XG4gICAgfVxuICB9XG5cbiAgcHJvZ3Jlc3MoJ0RvbmUuJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHJlc29sdmVkX3RocmVhZF9pZHM6IHJlc29sdmVkVGhyZWFkSWRzIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBub3JtYWxpemVDb21tZW50KFxuICBjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSxcbiAgcGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBpc1RocmVhZE91dGRhdGVkOiBib29sZWFuLFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIGZpbGVUZXh0Q2FjaGU6IE1hcDxzdHJpbmcsIFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPj5cbik6IFByb21pc2U8e1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgYXV0aG9yPzogc3RyaW5nO1xuICBzbmlwcGV0Pzogc3RyaW5nO1xufT4ge1xuICBjb25zdCB7IGF1dGhvciB9ID0gY29tbWVudDtcbiAgcmV0dXJuIHtcbiAgICBpZDogY29tbWVudC5pZCxcbiAgICB1cmw6IGNvbW1lbnQudXJsLFxuICAgIGJvZHk6IGNvbW1lbnQuYm9keSxcbiAgICBjcmVhdGVkQXQ6IGNvbW1lbnQuY3JlYXRlZEF0LFxuICAgIGF1dGhvcjogdHlwZW9mIGF1dGhvciA9PT0gJ3N0cmluZycgPyBhdXRob3IgOiAoYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQpLFxuICAgIHNuaXBwZXQ6IGF3YWl0IGJ1aWxkUmV2aWV3U25pcHBldChjb21tZW50LCBwYXRoLCBpc1RocmVhZE91dGRhdGVkLCBvd25lciwgbmFtZSwgZmlsZVRleHRDYWNoZSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVwbHlJbnB1dChpbnB1dDogc3RyaW5nKTogeyByZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiB9IHtcbiAgY29uc3QgZXJyb3JQcmVmaXggPSAnRXJyb3I6IEludmFsaWQgaW5wdXQgZm9ybWF0IG9uIHN0ZGluJztcblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIHVua25vd247XG4gICAgaWYgKCFpc1JlcGx5SW5wdXQocGFyc2VkKSkge1xuICAgICAgZXhpdFdpdGhFcnJvcihgJHtlcnJvclByZWZpeH06IGV4cGVjdGVkIGFuIG9iamVjdCB3aXRoIGEgc3RyaW5nLXZhbHVlZCBcXGByZXBsaWVzXFxgIG1hcGAsIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogSW52YWxpZCBKU09OIHByb3ZpZGVkIG9uIHN0ZGluOiAke2Vycm9yLm1lc3NhZ2V9YCwgMik7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzUmVwbHlJbnB1dCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcmVwbGllcyA9ICh2YWx1ZSBhcyB7IHJlcGxpZXM/OiB1bmtub3duIH0pLnJlcGxpZXM7XG4gIGlmICh0eXBlb2YgcmVwbGllcyAhPT0gJ29iamVjdCcgfHwgcmVwbGllcyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHJlcGxpZXMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVwbGllcykuZXZlcnkoKHJlcGx5KSA9PiByZXBseSA9PT0gbnVsbCB8fCByZXBseSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiByZXBseSA9PT0gJ3N0cmluZycpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBidWlsZFJldmlld1NuaXBwZXQoXG4gIGNvbW1lbnQ6IFJldmlld0NvbW1lbnROb2RlLFxuICBwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGlzVGhyZWFkT3V0ZGF0ZWQ6IGJvb2xlYW4sXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgZmlsZVRleHRDYWNoZTogTWFwPHN0cmluZywgUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+PlxuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFwYXRoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHByaW1hcnlMb2NhdGlvbiA9IGlzVGhyZWFkT3V0ZGF0ZWRcbiAgICA/IG9yaWdpbmFsQ29tbWVudExvY2F0aW9uKGNvbW1lbnQsIHBhdGgpXG4gICAgOiBjdXJyZW50Q29tbWVudExvY2F0aW9uKGNvbW1lbnQsIHBhdGgpO1xuICBjb25zdCBmYWxsYmFja0xvY2F0aW9uID0gaXNUaHJlYWRPdXRkYXRlZFxuICAgID8gY3VycmVudENvbW1lbnRMb2NhdGlvbihjb21tZW50LCBwYXRoKVxuICAgIDogb3JpZ2luYWxDb21tZW50TG9jYXRpb24oY29tbWVudCwgcGF0aCk7XG4gIGNvbnN0IGxvY2F0aW9uID0gcHJpbWFyeUxvY2F0aW9uID8/IGZhbGxiYWNrTG9jYXRpb247XG5cbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBmaWxlVGV4dCA9IGF3YWl0IGZldGNoRmlsZVRleHRBdEV4cHJlc3Npb24ob3duZXIsIG5hbWUsIGxvY2F0aW9uLmV4cHJlc3Npb24sIGZpbGVUZXh0Q2FjaGUpO1xuICBpZiAoZmlsZVRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gcmVuZGVyTGluZVNuaXBwZXQoZmlsZVRleHQsIGxvY2F0aW9uLnN0YXJ0TGluZSwgbG9jYXRpb24uZW5kTGluZSk7XG59XG5cbmZ1bmN0aW9uIGN1cnJlbnRDb21tZW50TG9jYXRpb24oXG4gIGNvbW1lbnQ6IFJldmlld0NvbW1lbnROb2RlLFxuICBwYXRoOiBzdHJpbmdcbik6IHsgZXhwcmVzc2lvbjogc3RyaW5nOyBzdGFydExpbmU6IG51bWJlcjsgZW5kTGluZTogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICByZXR1cm4gY29tbWVudExvY2F0aW9uKGNvbW1lbnQuY29tbWl0Py5vaWQsIHBhdGgsIGNvbW1lbnQuc3RhcnRMaW5lLCBjb21tZW50LmxpbmUpO1xufVxuXG5mdW5jdGlvbiBvcmlnaW5hbENvbW1lbnRMb2NhdGlvbihcbiAgY29tbWVudDogUmV2aWV3Q29tbWVudE5vZGUsXG4gIHBhdGg6IHN0cmluZ1xuKTogeyBleHByZXNzaW9uOiBzdHJpbmc7IHN0YXJ0TGluZTogbnVtYmVyOyBlbmRMaW5lOiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjb21tZW50TG9jYXRpb24oY29tbWVudC5vcmlnaW5hbENvbW1pdD8ub2lkLCBwYXRoLCBjb21tZW50Lm9yaWdpbmFsU3RhcnRMaW5lLCBjb21tZW50Lm9yaWdpbmFsTGluZSk7XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRMb2NhdGlvbihcbiAgb2lkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHBhdGg6IHN0cmluZyxcbiAgc3RhcnRMaW5lOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBlbmRMaW5lOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiB7IGV4cHJlc3Npb246IHN0cmluZzsgc3RhcnRMaW5lOiBudW1iZXI7IGVuZExpbmU6IG51bWJlciB9IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvaWQgfHwgIWVuZExpbmUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHByZXNzaW9uOiBgJHtvaWR9OiR7cGF0aH1gLFxuICAgIHN0YXJ0TGluZTogc3RhcnRMaW5lID8/IGVuZExpbmUsXG4gICAgZW5kTGluZSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hGaWxlVGV4dEF0RXhwcmVzc2lvbihcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBleHByZXNzaW9uOiBzdHJpbmcsXG4gIGZpbGVUZXh0Q2FjaGU6IE1hcDxzdHJpbmcsIFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPj5cbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGNhY2hlS2V5ID0gYCR7b3duZXJ9LyR7bmFtZX06JHtleHByZXNzaW9ufWA7XG4gIGxldCBwZW5kaW5nID0gZmlsZVRleHRDYWNoZS5nZXQoY2FjaGVLZXkpO1xuXG4gIGlmICghcGVuZGluZykge1xuICAgIHBlbmRpbmcgPSBmZXRjaEZpbGVUZXh0KG93bmVyLCBuYW1lLCBleHByZXNzaW9uKTtcbiAgICBmaWxlVGV4dENhY2hlLnNldChjYWNoZUtleSwgcGVuZGluZyk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgcGVuZGluZztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hGaWxlVGV4dChvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGV4cHJlc3Npb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgZGF0YT86IHtcbiAgICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICAgIG9iamVjdD86IHtcbiAgICAgICAgICBpc0JpbmFyeT86IGJvb2xlYW4gfCBudWxsO1xuICAgICAgICAgIHRleHQ/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICB9IHwgbnVsbDtcbiAgICAgIH07XG4gICAgfTtcbiAgfT4oRklMRV9URVhUX1FVRVJZLCB7IG93bmVyLCBuYW1lLCBleHByZXNzaW9uIH0pO1xuICBjb25zdCBibG9iID0gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ub2JqZWN0O1xuXG4gIGlmICghYmxvYiB8fCBibG9iLmlzQmluYXJ5IHx8IHR5cGVvZiBibG9iLnRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBibG9iLnRleHQ7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckxpbmVTbmlwcGV0KGZpbGVUZXh0OiBzdHJpbmcsIHN0YXJ0TGluZTogbnVtYmVyLCBlbmRMaW5lOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsaW5lcyA9IGZpbGVUZXh0LnNwbGl0KCdcXG4nKTtcbiAgLy8gUmVtb3ZlIG9ubHkgdGhlIHN5bnRoZXRpYyBlbXB0eSBzZWdtZW50IGNyZWF0ZWQgYnkgYSB0cmFpbGluZyBuZXdsaW5lIHdpdGhvdXQgdHJpbW1pbmcgbWVhbmluZ2Z1bCBzcGFjZXMuXG4gIGlmIChsaW5lcy5sZW5ndGggPiAwICYmIGxpbmVzLmF0KC0xKSA9PT0gJycpIHtcbiAgICBsaW5lcy5wb3AoKTtcbiAgfVxuXG4gIGlmIChsaW5lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgY2xhbXBlZFN0YXJ0TGluZSA9IGNsYW1wTGluZU51bWJlcihzdGFydExpbmUsIGxpbmVzLmxlbmd0aCk7XG4gIGNvbnN0IGNsYW1wZWRFbmRMaW5lID0gY2xhbXBMaW5lTnVtYmVyKGVuZExpbmUsIGxpbmVzLmxlbmd0aCk7XG4gIGNvbnN0IGZpcnN0TGluZSA9IE1hdGgubWF4KDEsIGNsYW1wZWRTdGFydExpbmUgLSBSRVZJRVdfU05JUFBFVF9DT05URVhUX0xJTkVTKTtcbiAgY29uc3QgbGFzdExpbmUgPSBNYXRoLm1pbihsaW5lcy5sZW5ndGgsIGNsYW1wZWRFbmRMaW5lICsgUkVWSUVXX1NOSVBQRVRfQ09OVEVYVF9MSU5FUyk7XG4gIGNvbnN0IGxpbmVOdW1iZXJXaWR0aCA9IFN0cmluZyhsYXN0TGluZSkubGVuZ3RoO1xuICBjb25zdCBzbmlwcGV0TGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChsZXQgbGluZU51bWJlciA9IGZpcnN0TGluZTsgbGluZU51bWJlciA8PSBsYXN0TGluZTsgbGluZU51bWJlciArPSAxKSB7XG4gICAgY29uc3QgbWFya2VyID0gbGluZU51bWJlciA+PSBjbGFtcGVkU3RhcnRMaW5lICYmIGxpbmVOdW1iZXIgPD0gY2xhbXBlZEVuZExpbmUgPyAnPicgOiAnICc7XG4gICAgc25pcHBldExpbmVzLnB1c2goXG4gICAgICBgJHttYXJrZXJ9ICR7U3RyaW5nKGxpbmVOdW1iZXIpLnBhZFN0YXJ0KGxpbmVOdW1iZXJXaWR0aCwgJyAnKX0gfCAke2xpbmVzW2xpbmVOdW1iZXIgLSAxXSA/PyAnJ31gXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzbmlwcGV0TGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wTGluZU51bWJlcihsaW5lTnVtYmVyOiBudW1iZXIsIG1heExpbmVOdW1iZXI6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChsaW5lTnVtYmVyLCAxKSwgbWF4TGluZU51bWJlcik7XG59XG4iLCJpbXBvcnQgeyBmZXRjaElzc3VlTWVzc2FnZXMgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUGxhblByb21wdChpc3N1ZU51bWJlcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaXNzdWVZYW1sID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlTnVtYmVyKTtcblxuICByZXR1cm4gYFxuUGxhbiBhIEdpdEh1YiBpc3N1ZSBieSBnYXRoZXJpbmcgY29udGV4dCwgd3JpdGluZyBhIHNwZWNpZmljYXRpb24gZm9yIHNvZnR3YXJlIGVuZ2luZWVycywgYW5kIHBvc3Rpbmcgb3IgdXBkYXRpbmcgdGhhdCBzcGVjaWZpY2F0aW9uIGJhY2sgdG8gdGhlIGlzc3VlLlxuVGhlIHRhcmdldCBpc3N1ZSBudW1iZXIgaXMgIyR7aXNzdWVOdW1iZXJ9LiBIZXJlIGlzIHRoZSBmZXRjaGVkIGlzc3VlIGNvbnRleHQgYXMgWUFNTDpcbn5+fn55YW1sXG4ke2lzc3VlWWFtbC50cmltKCl9XG5+fn5+XG5cbkZvbGxvdyB0aGlzIHdvcmtmbG93OlxuMS4gUmVhZCB0aGUgYWJvdmUgaXNzdWUgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgY2FyZWZ1bGx5LlxuMi4gQ29sbGVjdCBlbm91Z2ggc3VwcG9ydGluZyBpbmZvcm1hdGlvbiBiZWZvcmUgd3JpdGluZyB0aGUgc3BlY2lmaWNhdGlvbjpcbiAgIC0gSW5zcGVjdCB0aGUgcmVsZXZhbnQgY29kZSwgc3Vycm91bmRpbmcgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIHJlY2VudCBkaWZmcywgYW5kIGFueSBvdGhlciBsb2NhbCBjb250ZXh0IG5lZWRlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuXG4gICAtIElmIGNvZGUgaW5zcGVjdGlvbiBpcyBlbm91Z2gsIHVzZSB0aGUgY3VycmVudCBjb2RlYmFzZSBhcyB0aGUgcHJpbWFyeSBldmlkZW5jZS5cbiAgIC0gSWYgdGhlIGlzc3VlIGRlcGVuZHMgb24gcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgICAgLSBDbGVhbiB1cCBhbnkgdGVtcG9yYXJ5IGZpbGVzIGFmdGVyIHRoZSBleHBlcmltZW50LlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBhIGxpYnJhcnksIEFQSSwgb3IgbGFuZ3VhZ2UgZmVhdHVyZSwgY29uZmlybSBpdCBhZ2FpbnN0IHRoZSBsYXRlc3Qgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvciBhbm90aGVyIHByaW1hcnkgc291cmNlIGluc3RlYWQgb2YgcmVseWluZyBvbiBtZW1vcnkuXG4zLiBXcml0ZSB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGlzc3VlIGNvbW1lbnQuXG4gICAtIFdyaXRlIHRoZSBiYWNrZ3JvdW5kIGJhc2VkIG9uIHRoZSBjb2xsZWN0ZWQgaW5mb3JtYXRpb24uXG4gICAtIERlZmluZSBhIGdvYWwgdGhhdCBjbGVhcmx5IGd1aWRlcyBvdXIgaW1wbGVtZW50YXRpb24gaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cbiAgIC0gV3JpdGUgYSBkZXRhaWxlZCBzcGVjaWZpY2F0aW9uIGluY29ycG9yYXRpbmcgdGhlIGV2aWRlbmNlIHlvdSBjb2xsZWN0ZWQuXG4gICAtIElmIG5lZWRlZCwgaW5jbHVkZSBjb2RlIHNuaXBwZXRzIHRoYXQgZXhwbGFpbiBob3cgdG8gdXNlIGxpYnJhcmllcyBvciBBUElzLCBhbG9uZyB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlaXIgZG9jdW1lbnRhdGlvbi5cbjQuIFBvc3QgdGhlIHNwZWNpZmljYXRpb24gYmFjayB0byBpc3N1ZSAjJHtpc3N1ZU51bWJlcn0sIHRoZW4gcHJpbnQgdGhlIGlzc3VlIFVSTC5cbiAgIC0gSWYgdGhlIGlzc3VlIGFscmVhZHkgaGFzIGEgc3BlY2lmaWNhdGlvbiwgdXBkYXRlIHRoZSBleGlzdGluZyBjb21tZW50IGluc3RlYWQgb2YgcG9zdGluZyBhIG5ldyBvbmUuXG5cbkZvcm1hdCB0aGUgaXNzdWUgY29tbWVudCBleGFjdGx5IGxpa2UgdGhpcywgYnV0IGRvIG5vdCBpbmNsdWRlIHRoZSBzdXJyb3VuZGluZyBcXGB+fn5+XFxgIGZlbmNlcyBpbiB0aGUgYWN0dWFsIGNvbW1lbnQ6XG5+fn5+XG4jIyBCYWNrZ3JvdW5kXG5cbltTdW1tYXJpemUgdGhlIGN1cnJlbnQgYmVoYXZpb3IgYW5kIGV4cGxhaW4gdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoaXMgaXNzdWVdXG5cbiMjIEdvYWxcblxuW0RlZmluZSB0aGUgZ29hbCB3ZSB3YW50IHRvIGFjaGlldmUgaW4gdGhpcyBpc3N1ZV1cblxuIyMgU3BlY2lmaWNhdGlvblxuXG5bRGV0YWlsZWQgc3BlY2lmaWNhdGlvbiBmb3Igc29mdHdhcmUgZW5naW5lZXJzXVxuXG4jIyBLZXkgVGVjaG5vbG9naWVzIChPTkxZIGlmIGV4dGVybmFsIHJlc291cmNlcyBhcmUgbmVlZGVkKVxuXG5bRGVzY3JpYmUgd2hhdCBsaWJyYXJpZXMgb3IgQVBJcyB3ZSBzaG91bGQgdXNlLCBpbmNsdWRpbmcgY29uY3JldGUgdmVyc2lvbnMgYW5kIGNvZGUgc25pcHBldHMuXVxuXG5+fn5+XG5gLnRyaW0oKTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBnaXQgbWVyZ2UtYmFzZSAke3NoZWxsUXVvdGUoYG9yaWdpbi8ke2Jhc2VCcmFuY2h9YCl9IEhFQUQgMj4vZGV2L251bGwgfHwgZ2l0IG1lcmdlLWJhc2UgJHtzaGVsbFF1b3RlKGJhc2VCcmFuY2gpfSBIRUFEYDtcbn1cblxuZnVuY3Rpb24gc2hlbGxRdW90ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAnJHt2YWx1ZS5yZXBsYWNlQWxsKFwiJ1wiLCBcIidcXFwiJ1xcXCInXCIpfSdgO1xufVxuIiwiaW1wb3J0IHsgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIH0gZnJvbSAnLi4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBjdXJyZW50QmFzZUJyYW5jaCB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQgeyBOT19DT05DRVJOX01FU1NBR0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcbmltcG9ydCB7IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCB9IGZyb20gJy4vYmFzZUJyYW5jaERpZmZDb21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmV2aWV3UHJvbXB0KGtub3duRmFjdHM/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiYXNlQnJhbmNoID0gYXdhaXQgY3VycmVudEJhc2VCcmFuY2goKTtcbiAgY29uc3QgbWVyZ2VCYXNlQ29tbWFuZCA9IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoKTtcbiAgY29uc3QgcHJDb250ZXh0ID0gYXdhaXQgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlKCk7XG4gIHJldHVybiBgXG5SZXZpZXcgdGhlIGN1cnJlbnQgJHtwckNvbnRleHQgPyAncHVsbCByZXF1ZXN0JyA6ICdicmFuY2gnfSBhZ2FpbnN0IGl0cyBiYXNlIGJyYW5jaCAke2Jhc2VCcmFuY2h9IHZpYSBcXGBnaXQgZGlmZiBcIiQoJHttZXJnZUJhc2VDb21tYW5kfSlcIlxcYC5cblVzZSB0aGUga25vd24gZmFjdHMsIGlmIHByb3ZpZGVkLCB0byBhdm9pZCByZXBlYXRpbmcgZmFjdCBjaGVja3MgYW5kIGZpbmRpbmdzLiBSZXVzZSBhIGtub3duIGZhY3Qgb25seSB3aGVuIHRoZSBzYW1lIGN1cnJlbnQtY29kZSBldmlkZW5jZSwgY29tbWFuZCByZXN1bHQsIG9yIHByaW1hcnktc291cmNlIGV2aWRlbmNlIHN0aWxsIGFwcGxpZXMuIElmIHRoZSBjdXJyZW50IGNvZGUgb3Igc291cmNlIGNvbnRleHQgbWF5IGhhdmUgY2hhbmdlZCBlbm91Z2ggdG8gaW52YWxpZGF0ZSBhIGtub3duIGZhY3QsIHJlZnJlc2ggb25seSB0aGF0IGFmZmVjdGVkIGZhY3QuXG5Gb3IgZWFjaCBmaW5kaW5nOlxuMS4gR2F0aGVyIHN1cHBvcnRpbmcgZXZpZGVuY2U6XG4gICAtIEluc3BlY3QgdGhlIHJlZmVyZW5jZWQgY29kZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgcmVjZW50IGRpZmZzIHdoZW4gdGhleSBhZmZlY3QgdGhlIGNsYWltLlxuICAgLSBJZiBjb2RlIGluc3BlY3Rpb24gaXMgZW5vdWdoLCB1c2UgdGhlIGN1cnJlbnQgY29kZWJhc2UgYXMgdGhlIHByaW1hcnkgZXZpZGVuY2UuXG4gICAtIElmIHRoZSBmaW5kaW5nIGlzIGFib3V0IHJ1bnRpbWUgYmVoYXZpb3IsIHJlcHJvZHVjZSBpdCB3aXRoIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgZXhwZXJpbWVudCwgc3VjaCBhcyBhIGZvY3VzZWQgY29tbWFuZCwgYSB0aW55IHNjcmlwdCwgYSB0ZW1wb3JhcnkgbG9jYWwgYXNzZXJ0aW9uLCBvciBhbm90aGVyIG5hcnJvdyBjaGVjayB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG4gICAtIElmIHRoZSBmaW5kaW5nIGRlcGVuZHMgb24gZnJhbWV3b3JrLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgb3IgbGFuZ3VhZ2UgYmVoYXZpb3IsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMi4gSnVkZ2Ugd2hldGhlciB0aGUgZmluZGluZyBpcyB2YWxpZDpcbiAgIC0gTWFyayBpdCB2YWxpZCBvbmx5IHdoZW4gdGhlIGF2YWlsYWJsZSBldmlkZW5jZSBzaG93cyB0aGUgcmVwb3J0ZWQgaXNzdWUgaXMgc3RpbGwgcmVhbCBpbiB0aGUgY3VycmVudCBjb2RlYmFzZS5cbiAgIC0gT3RoZXJ3aXNlLCBtYXJrIGl0IG5vdCB2YWxpZC5cbjMuIENsZWFuIHVwIGFueSB0ZW1wb3JhcnkgZmlsZXMgY3JlYXRlZCBkdXJpbmcgdGhlIGV4cGVyaW1lbnQuXG40LiBQcm9wb3NlIGEgZml4IHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBjb2RlOlxuICAgLSBEZXNjcmliZSB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGNoYW5nZSB0aGF0IHdvdWxkIGFkZHJlc3MgdGhlIGZpbmRpbmcuXG4gICAtIEludmVzdGlnYXRlIHRoZSBsaWtlbHkgaW1wYWN0IG9mIHRoYXQgY2hhbmdlIGJ5IGluc3BlY3RpbmcgdGhlIGFmZmVjdGVkIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgYWRqYWNlbnQgYmVoYXZpb3IsIGFuZCBub3RlIGFueSBmb2xsb3ctdXAgY2hhbmdlcyBvciByaXNrcyB0aGUgZml4IHdvdWxkIG5lZWQgdG8gYWNjb3VudCBmb3IuXG5cblJlcG9ydCBvbmx5IG5ldyB2YWxpZCBmaW5kaW5ncyB0aGF0IGFyZSBub3QgYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBrbm93biBmYWN0cy4gRm9yIGVhY2ggZmluZGluZywgaW5jbHVkZSB0aGUgZXZpZGVuY2UsIHByb3Bvc2VkIGZpeCwgYW5kIGxpa2VseSBpbXBhY3QuIERvIG5vdCBtb2RpZnkgdGhlIGNvZGUuXG5XaGVuIHJlcG9ydGluZyB2YWxpZCBmaW5kaW5ncywgaW5jbHVkZSBhIFxcYCMjIFZlcmlmaWVkIEZhY3RzXFxgIHNlY3Rpb24gYWZ0ZXIgdGhlIGZpbmRpbmdzLiBJbmNsdWRlIG9ubHkgY29uY2lzZSwgcmV2aWV3LXJlbGV2YW50IGZhY3RzOiB3aGF0IHdhcyB2ZXJpZmllZCwgd2h5IGl0IG1hdHRlcnMgdG8gdGhlIHJldmlldywgYW5kIGhvdyBpdCB3YXMgdmVyaWZpZWQuXG5JZiB0aGVyZSBhcmUgbm8gbmV3IHZhbGlkIGZpbmRpbmdzLCByZXNwb25kIGV4YWN0bHkgd2l0aDogXFxgJHtOT19DT05DRVJOX01FU1NBR0V9XFxgXG5cbiR7YnVpbGRLbm93bkZhY3RzSW5zdHJ1Y3Rpb25zKGtub3duRmFjdHMpfVxuXG4ke2J1aWxkUHJDb250ZXh0SW5zdHJ1Y3Rpb25zKHByQ29udGV4dCl9XG5gLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRLbm93bkZhY3RzSW5zdHJ1Y3Rpb25zKGtub3duRmFjdHM6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGNvbnN0IHRyaW1tZWRGYWN0cyA9IGtub3duRmFjdHM/LnRyaW0oKTtcbiAgcmV0dXJuIHRyaW1tZWRGYWN0c1xuICAgID8gYEtub3duIGZhY3RzOlxufn5+fm1hcmtkb3duXG4ke3RyaW1tZWRGYWN0c31cbn5+fn5cbmAudHJpbSgpXG4gICAgOiAnJztcbn1cblxuZnVuY3Rpb24gYnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMocHJDb250ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICByZXR1cm4gcHJDb250ZXh0XG4gICAgPyBgQ3VycmVudCBwdWxsIHJlcXVlc3QgY29udGV4dDpcbn5+fn55YW1sXG4ke3ByQ29udGV4dC50cmltKCl9XG5+fn5+XG5gLnRyaW0oKVxuICAgIDogJyc7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRTY3JlZW5zaG90UHJvbXB0KGluaXRpYWxVcmw6IHN0cmluZywgcGFnZU5hbWU6IHN0cmluZywgc2NyZWVuc2hvdERlc2NyaXB0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYW5pdGl6ZWREZXNjcmlwdGlvbiA9IHNjcmVlbnNob3REZXNjcmlwdGlvbi5yZXBsYWNlQWxsKCdcXG4nLCAnICcpLnJlcGxhY2VBbGwoJ1wiJywgXCInXCIpO1xuICByZXR1cm4gYFxuVXNlIFxcYHBsYXl3cmlnaHQtY2xpXFxgIHNraWxsIHRvIHRha2UgYSBzY3JlZW5zaG90IG9mIFwiJHtzYW5pdGl6ZWREZXNjcmlwdGlvbn1cIiBieSBuYXZpZ2F0aW5nIGZyb20gJHtpbml0aWFsVXJsfSB0byBcIiR7cGFnZU5hbWV9XCIgcGFnZS5cblxuRm9sbG93IHRoaXMgd29ya2Zsb3c6XG4xLiBPcGVuIHRoZSBpbml0aWFsIHBhZ2UgYXQgJHtpbml0aWFsVXJsfS5cbjIuIE5hdmlnYXRlIGZyb20gdGhhdCBpbml0aWFsIHBhZ2UgdW50aWwgeW91IHJlYWNoIHRoZSBwYWdlIGlkZW50aWZpZWQgYXMgJHtwYWdlTmFtZX0uXG4gICAtIElmIGNvZGUgZXJyb3JzLCBydW50aW1lIGZhaWx1cmVzLCBvciBicm9rZW4gVUkgZmxvd3MgcHJldmVudCBuYXZpZ2F0aW9uLCBpbnZlc3RpZ2F0ZSB0aGUgY2F1c2UgaW4gdGhlIGxvY2FsIGNvZGViYXNlLCBtYWtlIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgY29kZSBmaXgsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgcGFnZSBjYW4gbm93IGJlIHJlYWNoZWQgYmVmb3JlIGNvbnRpbnVpbmcuXG4gICAtIElmIHlvdSBjYW5ub3QgZml4IHRoZSBlcnJvcnMsIHJlcG9ydCBvbiB0aGUgZXJyb3JzIHRoZW4gc3RvcC5cbjMuIENhcHR1cmUgYSBzY3JlZW5zaG90IHRoYXQgZm9jdXNlcyBvbiB0aGlzIHRhcmdldDogXCIke3Nhbml0aXplZERlc2NyaXB0aW9ufVwiLlxuNC4gS2VlcCB0aGUgZ2VuZXJhdGVkIGltYWdlIGFydGlmYWN0IGFuZCByZXBvcnQgdGhlIHNjcmVlbnNob3QgZmlsZSBwYXRoIHBsdXMgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB3aGF0IHdhcyBjYXB0dXJlZC4gSWYgeW91IGhhZCB0byBmaXggY29kZSBmaXJzdCwgYWxzbyBzdW1tYXJpemUgdGhlIGZpeC5cbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IHsgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIH0gZnJvbSAnLi4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBjdXJyZW50QmFzZUJyYW5jaCB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQgeyBidWlsZE1lcmdlQmFzZUNvbW1hbmQgfSBmcm9tICcuL2Jhc2VCcmFuY2hEaWZmQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFNpbXBsaWZ5UHJvbXB0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJhc2VCcmFuY2ggPSBhd2FpdCBjdXJyZW50QmFzZUJyYW5jaCgpO1xuICBjb25zdCBtZXJnZUJhc2VDb21tYW5kID0gYnVpbGRNZXJnZUJhc2VDb21tYW5kKGJhc2VCcmFuY2gpO1xuICBjb25zdCBwckNvbnRleHQgPSBhd2FpdCBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUoKTtcbiAgcmV0dXJuIGBcblNpbXBsaWZ5IHRoZSBjdXJyZW50ICR7cHJDb250ZXh0ID8gJ3B1bGwgcmVxdWVzdCcgOiAnYnJhbmNoJ30gYWdhaW5zdCBpdHMgYmFzZSBicmFuY2ggdXNpbmcgXFxgZ2l0IGRpZmYgXCIkKCR7bWVyZ2VCYXNlQ29tbWFuZH0pXCJcXGAuXG5GaXJzdCwgaW5zcGVjdCB0aGUgZGlmZiBhbmQgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBlYWNoIGNoYW5nZWQgYXJlYS4gVGhpcyBpbmNsdWRlcyBuZWFyYnkgZnVuY3Rpb25zLCB0eXBlcywgY2FsbCBzaXRlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb25zLCBhbmQgYW55IG90aGVyIGZpbGVzIHRoYXQgaGVscCBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZSBpcyB0cnVseSBuZWNlc3NhcnkuXG5MZXZlcmFnZSB0aGlzIGNvbnRleHQgdG8gaWRlbnRpZnkgcmVkdW5kYW5jaWVzIHRoYXQgY2FuIGJlIHNhZmVseSByZW1vdmVkIG9yIHNpbXBsaWZpZWQuIExvb2sgZm9yIGR1cGxpY2F0ZSBsb2dpYywgcmVwZWF0ZWQgY29uZGl0aW9uYWxzLCB1bm5lY2Vzc2FyeSBhYnN0cmFjdGlvbnMsIG92ZXJsYXBwaW5nIGNvZGUgcGF0aHMsIGRlYWQgY29kZSwgb3IgZWRpdHMgbWFkZSBvYnNvbGV0ZSB1cG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuUHJpb3JpdGl6ZSBzaW1wbGlmaWNhdGlvbnMgdGhhdCByZWR1Y2UgdGhlIHJldmlld2VyJ3MgYnVyZGVuLCBzdWNoIGFzOlxuLSBSZW1vdmluZyByZWR1bmRhbnQgZWRpdHMgb3IgZGVhZCBjb2RlLlxuLSBFbGltaW5hdGluZyBvciBtZXJnaW5nIGR1cGxpY2F0ZWQgbG9naWMgZGlzY292ZXJlZCBieSBjb21wYXJpbmcgdGhlIGRpZmYgd2l0aCByZWxhdGVkIGNvZGUuXG4tIEZsYXR0ZW5pbmcgdW5uZWNlc3NhcmlseSBjb21wbGV4IGxvZ2ljIGludHJvZHVjZWQgaW4gdGhlIGRpZmYgKGUuZy4sIHVzaW5nIGVhcmx5IHJldHVybnMgdG8gcmVkdWNlIG5lc3RpbmcsIHNpbXBsaWZ5aW5nIGJvb2xlYW4gZXhwcmVzc2lvbnMsIG9yIHJlbW92aW5nIHJlZHVuZGFudCB3cmFwcGVyIGZ1bmN0aW9ucykuXG5cbkNvbW1pdCBhbmQgcHVzaCB5b3VyIGNoYW5nZXMuIEFmdGVyd2FyZCwgc3VtbWFyaXplIHRoZSByZWR1bmRhbmNpZXMgb3IgdW5uZWNlc3NhcnkgY29tcGxleGl0eSB5b3UgaGF2ZSByZW1vdmVkLlxuXG4ke3ByQ29udGV4dCA/IGBDdXJyZW50IHB1bGwgcmVxdWVzdCBjb250ZXh0Olxcbn5+fn55YW1sXFxuJHtwckNvbnRleHQudHJpbSgpfVxcbn5+fn5gIDogJyd9XG5gLnRyaW0oKTtcbn1cbiIsImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQnO1xuaW1wb3J0IHsgY3AsIG1rZHRlbXAsIHJlYWRGaWxlLCByZWFkZGlyLCBybSwgd3JpdGVGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuXG5jb25zdCBQQUNLQUdFX05BTUUgPSAnQHdpbGxib29zdGVyL2FnZW50LXNraWxscyc7XG5jb25zdCBURVhUX0ZJTEVfRVhURU5TSU9OX1JFR0VYID0gL1xcLig/OltjbV0/W2p0XXN8anNvbnxtZHx5YT9tbCkkL2k7XG5cbmludGVyZmFjZSBQYWNrYWdlTWV0YWRhdGEge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBhY2thZ2VSb290IHtcbiAgbWV0YWRhdGE6IFBhY2thZ2VNZXRhZGF0YTtcbiAgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFBhY2tlZFNraWxscygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGFja2FnZVJvb3QgPSBhd2FpdCBmaW5kUGFja2FnZVJvb3QoKTtcbiAgY29uc3QgaW5zdGFsbFNvdXJjZVJvb3QgPSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksICdhZ2VudC1za2lsbHMtaW5zdGFsbC0nKSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjcChqb2luKHBhY2thZ2VSb290LnBhdGgsICdwYWNrYWdlLmpzb24nKSwgam9pbihpbnN0YWxsU291cmNlUm9vdCwgJ3BhY2thZ2UuanNvbicpKTtcbiAgICBhd2FpdCBjcChqb2luKHBhY2thZ2VSb290LnBhdGgsICdza2lsbHMnKSwgam9pbihpbnN0YWxsU291cmNlUm9vdCwgJ3NraWxscycpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCByZXBsYWNlTGF0ZXN0U3BlY2lmaWVyV2l0aFBhY2thZ2VWZXJzaW9uKGluc3RhbGxTb3VyY2VSb290LCBwYWNrYWdlUm9vdC5tZXRhZGF0YSk7XG5cbiAgICBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFxuICAgICAgW1xuICAgICAgICAnYnVueCcsXG4gICAgICAgICdza2lsbHNAbGF0ZXN0JyxcbiAgICAgICAgJ2FkZCcsXG4gICAgICAgIGluc3RhbGxTb3VyY2VSb290LFxuICAgICAgICAnLS1nbG9iYWwnLFxuICAgICAgICAnLS15ZXMnLFxuICAgICAgICAnLS1za2lsbCcsXG4gICAgICAgICcqJyxcbiAgICAgICAgJy0tYWdlbnQnLFxuICAgICAgICAnY2xhdWRlLWNvZGUnLFxuICAgICAgICAnLS1hZ2VudCcsXG4gICAgICAgICdjb2RleCcsXG4gICAgICAgICctLWFnZW50JyxcbiAgICAgICAgJ2dlbWluaS1jbGknLFxuICAgICAgXSxcbiAgICAgIHtcbiAgICAgICAgd2FpdE1lc3NhZ2U6ICdJbnN0YWxsaW5nIHBhY2thZ2VkIHNraWxscyBnbG9iYWxseS4nLFxuICAgICAgfVxuICAgICk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcm0oaW5zdGFsbFNvdXJjZVJvb3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5kUGFja2FnZVJvb3QoKTogUHJvbWlzZTxQYWNrYWdlUm9vdD4ge1xuICBsZXQgY3VycmVudERpciA9IGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IGpvaW4oY3VycmVudERpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYWNrYWdlTWV0YWRhdGEgPSByZWFkUGFja2FnZU1ldGFkYXRhKHBhY2thZ2VKc29uUGF0aCwgYXdhaXQgcmVhZEZpbGUocGFja2FnZUpzb25QYXRoLCAndXRmOCcpKTtcbiAgICAgIGlmIChwYWNrYWdlTWV0YWRhdGEubmFtZSA9PT0gUEFDS0FHRV9OQU1FKSB7XG4gICAgICAgIHJldHVybiB7IG1ldGFkYXRhOiBwYWNrYWdlTWV0YWRhdGEsIHBhdGg6IGN1cnJlbnREaXIgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEtlZXAgd2Fsa2luZyB1cCB1bnRpbCB0aGUgcHVibGlzaGVkIHBhY2thZ2Ugcm9vdCBpcyBmb3VuZC5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnREaXIgPSBkaXJuYW1lKGN1cnJlbnREaXIpO1xuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChjdXJyZW50RGlyLCBwYXJlbnREaXIsIGBGYWlsZWQgdG8gZmluZCAke1BBQ0tBR0VfTkFNRX0gcGFja2FnZSByb290YCk7XG4gICAgY3VycmVudERpciA9IHBhcmVudERpcjtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkUGFja2FnZU1ldGFkYXRhKHBhY2thZ2VKc29uUGF0aDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpOiBQYWNrYWdlTWV0YWRhdGEge1xuICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgUGFja2FnZU1ldGFkYXRhO1xuICBhc3NlcnQub2socGFja2FnZUpzb24ubmFtZSAmJiBwYWNrYWdlSnNvbi52ZXJzaW9uLCBgRmFpbGVkIHRvIHJlYWQgbmFtZSBvciB2ZXJzaW9uIGZyb20gJHtwYWNrYWdlSnNvblBhdGh9YCk7XG4gIHJldHVybiBwYWNrYWdlSnNvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUxhdGVzdFNwZWNpZmllcldpdGhQYWNrYWdlVmVyc2lvbihyb290OiBzdHJpbmcsIHBhY2thZ2VNZXRhZGF0YTogUGFja2FnZU1ldGFkYXRhKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGxhdGVzdEluc3RhbGxTcGVjaWZpZXIgPSBgJHtwYWNrYWdlTWV0YWRhdGEubmFtZX1AbGF0ZXN0YDtcbiAgY29uc3QgdmVyc2lvbmVkSW5zdGFsbFNwZWNpZmllciA9IGAke3BhY2thZ2VNZXRhZGF0YS5uYW1lfUAke3BhY2thZ2VNZXRhZGF0YS52ZXJzaW9ufWA7XG4gIGF3YWl0IHJlcGxhY2VJbkZpbGVzKHJvb3QsIChjb250ZW50KSA9PiBjb250ZW50LnJlcGxhY2VBbGwobGF0ZXN0SW5zdGFsbFNwZWNpZmllciwgdmVyc2lvbmVkSW5zdGFsbFNwZWNpZmllcikpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlSW5GaWxlcyhwYXRoOiBzdHJpbmcsIHJlcGxhY2VDb250ZW50OiAoY29udGVudDogc3RyaW5nKSA9PiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IHJlYWRkaXIocGF0aCwgeyByZWN1cnNpdmU6IHRydWUsIHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG5cbiAgLy8gS2VlcCBpbnN0YWxsLXRpbWUgZmlsZSBkZXNjcmlwdG9ycyBib3VuZGVkIHdoaWxlIHN0YWdpbmcgdGhlIGxvY2FsIHNraWxsIGZpbGVzLlxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBpZiAoIWVudHJ5LmlzRmlsZSgpIHx8ICFURVhUX0ZJTEVfRVhURU5TSU9OX1JFR0VYLnRlc3QoZW50cnkubmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGVudHJ5UGF0aCA9IGpvaW4oZW50cnkucGFyZW50UGF0aCwgZW50cnkubmFtZSk7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGVudHJ5UGF0aCwgJ3V0ZjgnKTtcbiAgICBjb25zdCByZXBsYWNlZENvbnRlbnQgPSByZXBsYWNlQ29udGVudChjb250ZW50KTtcbiAgICBpZiAocmVwbGFjZWRDb250ZW50ICE9PSBjb250ZW50KSB7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUoZW50cnlQYXRoLCByZXBsYWNlZENvbnRlbnQpO1xuICAgIH1cbiAgfVxufVxuIiwiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgc3RkaW4gYXMgcHJvY2Vzc1N0ZGluIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2UsIHJ1bkFnZW50Q29tbWFuZCwgcnVuQWxsQWdlbnRDb21tYW5kcyB9IGZyb20gJy4vYWdlbnQvYWdlbnRDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyB1cGRhdGVCdW5EZXBlbmRlbmNpZXMgfSBmcm9tICcuL2RlcHMvdXBkYXRlQnVuRGVwZW5kZW5jaWVzLmpzJztcbmltcG9ydCB7XG4gIGNoZWNrUHJDaSxcbiAgZmV0Y2hJc3N1ZU1lc3NhZ2VzLFxuICBmZXRjaFByTWVzc2FnZXMsXG4gIGxpc3RQclJldmlld1RocmVhZHMsXG4gIG5vcm1hbGl6ZUlzc3VlTnVtYmVyLFxuICBvcGVuUHIsXG4gIHJlYWRSZXBsaWVzRnJvbVN0ZGluLFxuICByZWFkUmVxdWlyZWRTdGRpblRleHQsXG4gIHJlYWRTdGRpblRleHQsXG4gIHJlc29sdmVQclJldmlld1RocmVhZHMsXG4gIHVwZGF0ZVByLFxufSBmcm9tICcuL3ByL3ByQ29tbWFuZHMuanMnO1xuaW1wb3J0IHsgYnVpbGRQbGFuUHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3BsYW5Qcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRSZXZpZXdQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvcmV2aWV3UHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkU2NyZWVuc2hvdFByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkU2ltcGxpZnlQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQuanMnO1xuaW1wb3J0IHsgaW5zdGFsbFBhY2tlZFNraWxscyB9IGZyb20gJy4vc2tpbGxzL2luc3RhbGxTa2lsbHMuanMnO1xuXG50eXBlIFJldmlld0FnZW50TW9kZSA9ICdhbGwnIHwgJ2NvZGV4JyB8ICdjbGF1ZGUnIHwgJ2dlbWluaSc7XG5cbmludGVyZmFjZSBSZXZpZXdDb21tYW5kT3B0aW9ucyB7XG4gIGFnZW50OiBSZXZpZXdBZ2VudE1vZGU7XG59XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtLm5hbWUoJ2FnZW50LXNraWxscycpLmRlc2NyaXB0aW9uKCdDTEkgY29tbWFuZHMgZm9yIHRoZSBza2lsbHMgaW4gdGhpcyByZXBvc2l0b3J5Jykuc2hvd0hlbHBBZnRlckVycm9yKCk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2luc3RhbGwtc2tpbGxzJylcbiAgLmRlc2NyaXB0aW9uKCdJbnN0YWxsIGFsbCBwYWNrYWdlZCBza2lsbHMgZ2xvYmFsbHkgZm9yIENsYXVkZSBDb2RlLCBDb2RleCwgYW5kIEdlbWluaSBDTEknKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGluc3RhbGxQYWNrZWRTa2lsbHMoKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnRG9uZVxcbicpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgndXBkYXRlLWJ1bi1kZXBzJylcbiAgLmRlc2NyaXB0aW9uKCdVcGRhdGUgYWxsIEJ1biBkZXBlbmRlbmNpZXMgaW4gdGhlIHJvb3QgcGFja2FnZSBhbmQgd29ya3NwYWNlIHBhY2thZ2VzJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCB1cGRhdGVCdW5EZXBlbmRlbmNpZXMoKTtcbiAgfSk7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAnYWdlbnQnLFxuICBkZXNjcmlwdGlvbjogJ1J1biB0aGUgc2VsZWN0ZWQgYWdlbnQgd2l0aCB0aGUgc3BlY2lmaWVkIHByb21wdCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGFuIGFnZW50JyxcbiAgY2hvaWNlczogWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIGFyZ3VtZW50TmFtZTogJzxwcm9tcHQ+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ1Byb21wdCB0byBwYXNzIHRvIHRoZSBhZ2VudCcsXG4gIHJ1bjogKGFnZW50LCBwcm9tcHQpID0+IHJ1blByb21wdEFnZW50Q29tbWFuZChhZ2VudCwgcHJvbXB0KSxcbn0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdyZXZpZXcnKVxuICAuZGVzY3JpcHRpb24oJ1J1biByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnKVxuICAuYWRkT3B0aW9uKFxuICAgIG5ldyBPcHRpb24oJy0tYWdlbnQgPGFnZW50PicsICdVc2UgYSByZXZpZXcgYWdlbnQnKVxuICAgICAgLmNob2ljZXMoWydhbGwnLCAnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddKVxuICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoKVxuICApXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAob3B0aW9uczogUmV2aWV3Q29tbWFuZE9wdGlvbnMpID0+IHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBydW5SZXZpZXdDb21tYW5kKG9wdGlvbnMuYWdlbnQpKTtcbiAgfSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWNvZGV4JywgJ1J1biBDb2RleCByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PiBydW5SZXZpZXdDb21tYW5kKCdjb2RleCcpKTtcbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT4gcnVuUmV2aWV3Q29tbWFuZCgnY2xhdWRlJykpO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+IHJ1blJldmlld0NvbW1hbmQoJ2dlbWluaScpKTtcblxuYXN5bmMgZnVuY3Rpb24gcnVuUmV2aWV3Q29tbWFuZChtb2RlOiBSZXZpZXdBZ2VudE1vZGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcmV2aW91c1ZlcmlmaWVkRmFjdHMgPSBhd2FpdCByZWFkUmV2aWV3VmVyaWZpZWRGYWN0cygpO1xuICBjb25zdCBwcm9tcHQgPSBidWlsZFJldmlld1Byb21wdChwcmV2aW91c1ZlcmlmaWVkRmFjdHMpO1xuICByZXR1cm4gbW9kZSA9PT0gJ2FsbCdcbiAgICA/IHJ1bkFsbEFnZW50Q29tbWFuZHMocHJvbXB0LCB7XG4gICAgICAgIGFsbEFnZW50c0xhYmVsOiAncmV2aWV3IGFnZW50cycsXG4gICAgICAgIG1hcE91dHB1dDogKF9hZ2VudCwgb3V0cHV0KSA9PiAoY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZShvdXRwdXQpID8gdW5kZWZpbmVkIDogb3V0cHV0KSxcbiAgICAgIH0pXG4gICAgOiBydW5BZ2VudENvbW1hbmQobW9kZSwgcHJvbXB0KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZFJldmlld1ZlcmlmaWVkRmFjdHMoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKHByb2Nlc3NTdGRpbi5pc1RUWSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaW5wdXQgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gIHJldHVybiBpbnB1dC5sZW5ndGggPiAwID8gaW5wdXQgOiB1bmRlZmluZWQ7XG59XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAncGxhbicsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZSB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgcGxhbm5pbmcgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChtb2RlLCBpc3N1ZVJlZmVyZW5jZSkgPT5cbiAgICBtb2RlID09PSAnYWxsJ1xuICAgICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpLCB7XG4gICAgICAgICAgYWxsQWdlbnRzTGFiZWw6ICdwbGFubmluZyBhZ2VudHMnLFxuICAgICAgICB9KVxuICAgICAgOiBydW5BZ2VudENvbW1hbmQobW9kZSwgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jb2RleCcsICdSdW4gQ29kZXggcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnc2NyZWVuc2hvdCcpXG4gIC5kZXNjcmlwdGlvbignVGFrZSBhIHNjcmVlbnNob3Qgd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQgdmlhIHBsYXl3cmlnaHQtY2xpJylcbiAgLmFyZ3VtZW50KCc8aW5pdGlhbC11cmw+JywgJ0luaXRpYWwgVVJMIHRvIG9wZW4gYmVmb3JlIG5hdmlnYXRpbmcnKVxuICAuYXJndW1lbnQoJzxwYWdlLW5hbWU+JywgJ1BhZ2UgbmFtZSB0byBuYXZpZ2F0ZSB0byBmcm9tIHRoZSBpbml0aWFsIHBhZ2UnKVxuICAuYXJndW1lbnQoJzxkZXNjcmlwdGlvbj4nLCAnRGVzY3JpcHRpb24gb2YgdGhlIHBhcnQgdG8gY2FwdHVyZSBpbiB0aGUgc2NyZWVuc2hvdCcpXG4gIC5hZGRPcHRpb24oXG4gICAgbmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgJ1VzZSBhIHNjcmVlbnNob3QgYWdlbnQnKS5jaG9pY2VzKFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddKS5tYWtlT3B0aW9uTWFuZGF0b3J5KClcbiAgKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oXG4gICAgYXN5bmMgKFxuICAgICAgaW5pdGlhbFVybDogc3RyaW5nLFxuICAgICAgcGFnZU5hbWU6IHN0cmluZyxcbiAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgICBvcHRpb25zOiB7IGFnZW50OiAnY29kZXgnIHwgJ2NsYXVkZScgfCAnZ2VtaW5pJyB9XG4gICAgKSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShcbiAgICAgICAgYXdhaXQgcnVuQWdlbnRDb21tYW5kKG9wdGlvbnMuYWdlbnQsIGJ1aWxkU2NyZWVuc2hvdFByb21wdChpbml0aWFsVXJsLCBwYWdlTmFtZSwgZGVzY3JpcHRpb24pKVxuICAgICAgKTtcbiAgICB9XG4gICk7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAnc2ltcGxpZnknLFxuICBkZXNjcmlwdGlvbjogJ1J1biBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgc2ltcGxpZnkgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgcnVuOiAoYWdlbnQpID0+IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgYnVpbGRTaW1wbGlmeVByb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNvZGV4JywgJ1J1biBDb2RleCBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ29wZW4tcHInKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIHB1bGwgcmVxdWVzdCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoJylcbiAgLmFyZ3VtZW50KCc8dGl0bGU+JywgJ1B1bGwgcmVxdWVzdCB0aXRsZScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAodGl0bGU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgb3BlblByKHsgYm9keTogYm9keSB8fCB1bmRlZmluZWQsIHRpdGxlIH0pO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke291dHB1dH1cXG5gKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwZGF0ZS1wcicpXG4gIC5kZXNjcmlwdGlvbignVXBkYXRlIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCB0aXRsZSBhbmQgYm9keScpXG4gIC5hcmd1bWVudCgnPHRpdGxlPicsICdQdWxsIHJlcXVlc3QgdGl0bGUnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKHRpdGxlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCdFcnJvcjogUFIgYm9keSBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHVwZGF0ZVByKHsgYm9keSwgdGl0bGUgfSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY2hlY2stcHItY2knKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgdGhlIGxhdGVzdCB0ZXN0LXJlbGF0ZWQgQ0kgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja1ByQ2koKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShyZXN1bHQub3V0cHV0KTtcbiAgICBwcm9jZXNzLmV4aXQocmVzdWx0LmV4aXRDb2RlKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLWlzc3VlJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhbiBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MJylcbiAgLmFyZ3VtZW50KCc8aXNzdWU+JywgJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChpc3N1ZVJlZmVyZW5jZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlUmVmZXJlbmNlKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZmV0Y2gtcHInKVxuICAuZGVzY3JpcHRpb24oJ0ZldGNoIGEgcHVsbCByZXF1ZXN0IGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGFzIFlBTUwsIGV4Y2x1ZGluZyBpbmxpbmUgY29tbWVudHMnKVxuICAuYXJndW1lbnQoJ1twcl0nLCAnR2l0SHViIHB1bGwgcmVxdWVzdCBudW1iZXIgb3IgVVJMOyBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBicmFuY2ggcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChwclJlZmVyZW5jZT86IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoUHJNZXNzYWdlcyhwclJlZmVyZW5jZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2xpc3QtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBsaXN0UHJSZXZpZXdUaHJlYWRzKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3Jlc29sdmUtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ1JlcGx5IHRvIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgYW5kIHJlc29sdmUgdGhlbScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVwbGllcyA9IGF3YWl0IHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxuYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7XG5cbmZ1bmN0aW9uIGFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQ8VE1vZGUgZXh0ZW5kcyBzdHJpbmc+KGNvbmZpZzoge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG9wdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNob2ljZXM6IFtUTW9kZSwgLi4uVE1vZGVbXV07XG4gIGFyZ3VtZW50TmFtZT86IHN0cmluZztcbiAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcnVuOiAobW9kZTogVE1vZGUsIGFyZ3VtZW50OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcbn0pOiB2b2lkIHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2dyYW0uY29tbWFuZChjb25maWcubmFtZSkuZGVzY3JpcHRpb24oY29uZmlnLmRlc2NyaXB0aW9uKS5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSk7XG4gIGlmIChjb25maWcuYXJndW1lbnROYW1lKSB7XG4gICAgY29tbWFuZC5hcmd1bWVudChjb25maWcuYXJndW1lbnROYW1lLCBjb25maWcuYXJndW1lbnREZXNjcmlwdGlvbik7XG4gIH1cblxuICBjb21tYW5kXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCBjb25maWcub3B0aW9uRGVzY3JpcHRpb24pLmNob2ljZXMoY29uZmlnLmNob2ljZXMpLm1ha2VPcHRpb25NYW5kYXRvcnkoKSlcbiAgICAuYWN0aW9uKGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgIGNvbnN0IFthcmd1bWVudE9yT3B0aW9ucywgbWF5YmVPcHRpb25zXSA9IGFyZ3MgYXMgW3N0cmluZyB8IHsgYWdlbnQ6IFRNb2RlIH0sIHsgYWdlbnQ6IFRNb2RlIH0gfCB1bmRlZmluZWRdO1xuICAgICAgY29uc3QgYXJndW1lbnQgPSB0eXBlb2YgYXJndW1lbnRPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gYXJndW1lbnRPck9wdGlvbnMgOiAnJztcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSAodHlwZW9mIGFyZ3VtZW50T3JPcHRpb25zID09PSAnc3RyaW5nJyA/IG1heWJlT3B0aW9ucyA6IGFyZ3VtZW50T3JPcHRpb25zKSBhcyB7IGFnZW50OiBUTW9kZSB9O1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnLnJ1bihvcHRpb25zLmFnZW50LCBhcmd1bWVudCkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRBZ2VudENvbW1hbmQoXG4gIG5hbWU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgY29uZmlnT3JSdW46XG4gICAgfCAoKCkgPT4gUHJvbWlzZTxzdHJpbmc+KVxuICAgIHwge1xuICAgICAgICBhcmd1bWVudE5hbWU6IHN0cmluZztcbiAgICAgICAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgICAgcnVuOiAoYXJndW1lbnQ6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAgICAgfVxuKTogdm9pZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9ncmFtLmNvbW1hbmQobmFtZSkuZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKTtcblxuICBpZiAodHlwZW9mIGNvbmZpZ09yUnVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29tbWFuZC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnT3JSdW4oKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29tbWFuZC5hcmd1bWVudChjb25maWdPclJ1bi5hcmd1bWVudE5hbWUsIGNvbmZpZ09yUnVuLmFyZ3VtZW50RGVzY3JpcHRpb24pLmFjdGlvbihhc3luYyAoYXJndW1lbnQ6IHN0cmluZykgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZ09yUnVuLnJ1bihhcmd1bWVudCkpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuUHJvbXB0QWdlbnRDb21tYW5kKGFnZW50OiAnY29kZXgnIHwgJ2NsYXVkZScgfCAnZ2VtaW5pJywgcHJvbXB0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gZXh0cmFjdE1hcmtkb3duQ29kZUJsb2NrKGF3YWl0IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgYnVpbGRBZ2VudFByb21wdChwcm9tcHQpKSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWdlbnRQcm9tcHQocHJvbXB0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7cHJvbXB0fVxuXG5SZXBvcnQgb24gdGhlIHJlc3VsdCB3aXRoIGEgbWFya2Rvd24gY29kZSBibG9jayB3aXRoIHRyaXBsZSBiYWNrdGlja3MuYDtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdE1hcmtkb3duQ29kZUJsb2NrKG91dHB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY29kZUJsb2NrTWF0Y2hlcyA9IFsuLi5vdXRwdXQubWF0Y2hBbGwoL2BgYFteXFxuYF0qXFxuPyhbXFxzXFxTXSo/KWBgYC9nKV07XG4gIGNvbnN0IGxhc3RDb2RlQmxvY2tDb250ZW50ID0gY29kZUJsb2NrTWF0Y2hlcy5hdCgtMSk/LlsxXTtcbiAgaWYgKCFsYXN0Q29kZUJsb2NrQ29udGVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQWdlbnQgb3V0cHV0IGRpZCBub3QgY29udGFpbiBhIG1hcmtkb3duIGNvZGUgYmxvY2sgd2l0aCB0cmlwbGUgYmFja3RpY2tzLicpO1xuICB9XG4gIHJldHVybiBsYXN0Q29kZUJsb2NrQ29udGVudDtcbn1cbiJdLCJuYW1lcyI6WyJQUk9DRVNTX0NMRUFOVVBfU0lHTkFMUyIsImFjdGl2ZVByb2Nlc3NlcyIsIlNldCIsImNsZWFudXBIYW5kbGVyc0luc3RhbGxlZCIsInJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MiLCJfeCIsIl94MiIsIl9ydW5Db21tYW5kV2l0aFByb2dyZXNzIiwiYXBwbHkiLCJ0aGlzIiwiYXJndW1lbnRzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3IiLCJtIiwiX2NhbGxlZSIsImNvbW1hbmQiLCJvcHRpb25zIiwiX2NvbW1hbmQkIiwicHJvYyIsInByb2Nlc3NUaW1lb3V0Iiwic3RvcFdhaXRQcm9ncmVzcyIsImNvbW1hbmRMb2dnZXIiLCJfeWllbGQkUHJvbWlzZSRhbGwiLCJfeWllbGQkUHJvbWlzZSRhbGwyIiwic3Rkb3V0Iiwic3RkZXJyIiwiZXhpdENvZGUiLCJvdXRwdXQiLCJ3IiwiX2NvbnRleHQiLCJwIiwibiIsInNwYXduIiwic2xpY2UiLCJkZXRhY2hlZCIsInN0ZGlvIiwiY3JlYXRlUHJvY2Vzc1RpbWVvdXQiLCJ0aW1lb3V0TXMiLCJjcmVhdGVXYWl0UHJvZ3Jlc3MiLCJ3YWl0TWVzc2FnZSIsIndhaXRJbnRlcnZhbFNlY29uZHMiLCJjcmVhdGVDb21tYW5kTG9nZ2VyIiwibG9nRmlsZVBhdGgiLCJ2IiwiUHJvbWlzZSIsImFsbCIsInN0cmVhbVRvVGV4dCIsImNodW5rIiwid3JpdGUiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25jZSIsImNvZGUiLCJfc2xpY2VkVG9BcnJheSIsInRpbWVkT3V0IiwiRXJyb3IiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiY29uY2F0IiwiYSIsImpvaW4iLCJjbG9zZSIsImNsZWFyIiwiZiIsIm1lc3NhZ2UiLCJtaWxsaXNlY29uZHMiLCJmb3JtYXREdXJhdGlvbiIsImxlbmd0aCIsImZvcmNlS2lsbFRpbWVyIiwiYWRkIiwiX3N0ZXAyIiwiX2l0ZXJhdG9yMiIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX2xvb3AiLCJzaWduYWwiLCJ2YWx1ZSIsInByb2Nlc3MiLCJfc3RlcDMiLCJfaXRlcmF0b3IzIiwicyIsImRvbmUiLCJraWxsUHJvY2VzcyIsImVyciIsImUiLCJleGl0Iiwic2lnbmFsTnVtYmVyIiwiaW5zdGFsbENsZWFudXBIYW5kbGVycyIsInRpbWVvdXQiLCJzZXRUaW1lb3V0IiwidW5yZWYiLCJjbGVhclRpbWVvdXQiLCJwaWQiLCJraWxsIiwiX3VudXNlZCIsIl94MyIsIl94NCIsIl9zdHJlYW1Ub1RleHQiLCJfY2FsbGVlMiIsInN0cmVhbSIsIm9uQ2h1bmsiLCJjaHVua3MiLCJkZWNvZGVyIiwiX2l0ZXJhdG9yQWJydXB0Q29tcGxldGlvbiIsIl9kaWRJdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImNodW5rVGV4dCIsImZpbmFsQ2h1bmsiLCJfdCIsIl9jb250ZXh0MiIsIlRleHREZWNvZGVyIiwiX2FzeW5jSXRlcmF0b3IiLCJuZXh0IiwiZGVjb2RlIiwiVWludDhBcnJheSIsInB1c2giLCJ3cml0ZVByb2dyZXNzIiwiZG90Q291bnQiLCJ0aW1lciIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsIl94NSIsIl9jcmVhdGVDb21tYW5kTG9nZ2VyIiwiX2NhbGxlZTYiLCJ3YXJuIiwiX3QyIiwiX2NvbnRleHQ2IiwiX2Nsb3NlIiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJlcnJvciIsIlN0cmluZyIsIm1rZGlyIiwiZGlybmFtZSIsInJlY3Vyc2l2ZSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwiZmxhZ3MiLCJvbiIsIndyaXRhYmxlIiwiX2Nsb3NlMiIsIl9jYWxsZWU0IiwiX2NvbnRleHQ0IiwiZW5kIiwiX2Nsb3NlMyIsIl9jYWxsZWU1IiwiX2NvbnRleHQ1IiwiTk9fQ09OQ0VSTl9NRVNTQUdFIiwiQUdFTlRfTkFNRVMiLCJDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYIiwiUmVnRXhwIiwiREVGQVVMVF9BTExfQUdFTlRfQ09NTUFORF9PUFRJT05TIiwiYWxsQWdlbnRzTGFiZWwiLCJydW5BbGxBZ2VudENvbW1hbmRzIiwiX3J1bkFsbEFnZW50Q29tbWFuZHMiLCJwcm9tcHQiLCJyZXNvbHZlZFByb21wdCIsImFnZW50T3V0cHV0c1dpdGhTa2lwcGVkUmVzdWx0cyIsImFnZW50T3V0cHV0cyIsIndhaXRNZXNzYWdlRm9yIiwibWFwIiwiYWdlbnQiLCJfb3B0aW9ucyRtYXBPdXRwdXQiLCJfb3B0aW9ucyIsInRyaW1tZWRPdXRwdXQiLCJtYXBwZWRPdXRwdXQiLCJydW5BZ2VudENvbW1hbmQiLCJ0cmltIiwibWFwT3V0cHV0IiwiY2FsbCIsInVuZGVmaW5lZCIsImZvcm1hdEFnZW50U2VjdGlvbiIsInN1bW1hcml6ZUFnZW50T3V0cHV0IiwiYWdlbnRGYWlsdXJlTWVzc2FnZSIsImZpbHRlciIsIl9ydW5BZ2VudENvbW1hbmQiLCJfb3B0aW9ucyR3YWl0TWVzc2FnZSIsIl90MyIsIl90NCIsImNyZWF0ZUFnZW50Q29tbWFuZCIsImFnZW50TG9nRmlsZVBhdGgiLCJkaXNwbGF5QWdlbnROYW1lIiwiY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZSIsInRlc3QiLCJib2R5IiwidGFyZ2V0Iiwibm93IiwiRGF0ZSIsIl9tYXAyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsInR3b0RpZ2l0cyIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsInRvU3RyaW5nIiwicGFkU3RhcnQiLCJERVBFTkRFTkNZX1NFQ1RJT05TIiwiSUdOT1JFRF9ESVJFQ1RPUklFUyIsIlVQREFURV9DT01NQU5EIiwidXBkYXRlQnVuRGVwZW5kZW5jaWVzIiwiX3VwZGF0ZUJ1bkRlcGVuZGVuY2llcyIsImN3ZCIsIndvcmtzcGFjZURpcmVjdG9yaWVzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImRpcmVjdG9yeSIsImZpbmRXb3Jrc3BhY2VEaXJlY3RvcmllcyIsImFzc2VydE5vQ2F0YWxvZ0RlcGVuZGVuY2llcyIsInVwZGF0ZVBhY2thZ2UiLCJfZmluZFdvcmtzcGFjZURpcmVjdG9yaWVzIiwicGF0dGVybnMiLCJkaXJlY3RvcmllcyIsImluY2x1ZGVkIiwiZXhjbHVkZWQiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwicGF0dGVybiIsImlzRXhjbHVzaW9uIiwibWF0Y2hlcyIsIl9pdGVyYXRvcjYiLCJfc3RlcDYiLCJ3b3Jrc3BhY2VQYXR0ZXJucyIsInJlYWRQYWNrYWdlSnNvbiIsImxpc3RXb3Jrc3BhY2VDYW5kaWRhdGVEaXJlY3RvcmllcyIsInN0YXJ0c1dpdGgiLCJleHBhbmRXb3Jrc3BhY2VQYXR0ZXJuIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiaGFzIiwidG9Tb3J0ZWQiLCJsZWZ0IiwicmlnaHQiLCJsb2NhbGVDb21wYXJlIiwiX3JlZiIsIl93b3Jrc3BhY2VzJHBhY2thZ2VzIiwiX3JlZiR3b3Jrc3BhY2VzIiwid29ya3NwYWNlcyIsIkFycmF5IiwiaXNBcnJheSIsInBhY2thZ2VzIiwiX2xpc3RXb3Jrc3BhY2VDYW5kaWRhdGVEaXJlY3RvcmllcyIsInJvb3RzIiwiX2l0ZXJhdG9yNyIsIl9zdGVwNyIsIl9zdGVwNyR2YWx1ZSIsIm1heERlcHRoIiwicm9vdCIsIl9pdGVyYXRvcjgiLCJfc3RlcDgiLCJfdDUiLCJ3b3Jrc3BhY2VDYW5kaWRhdGVSb290cyIsImlzRGlyZWN0b3J5IiwibGlzdERpcmVjdG9yaWVzIiwiTWFwIiwiX2kiLCJfY2FuZGlkYXRlUm9vdHMiLCJjYW5kaWRhdGVSb290cyIsInNldCIsIm1lcmdlZE1heERlcHRoIiwiZ2V0IiwiZW50cmllcyIsIl9yZWYyIiwiX3JlZjMiLCJzb21lIiwiX3JlZjQiLCJwYXJlbnRNYXhEZXB0aCIsImNoaWxkTWF4RGVwdGgiLCJfcmVmNSIsIm90aGVyUm9vdCIsIm90aGVyTWF4RGVwdGgiLCJoYXNQYXJlbnRSb290IiwiYnJhY2VFeHBhbmQiLCJub3JtYWxpemVXb3Jrc3BhY2VQYXR0ZXJuIiwiZXhwYW5kZWRQYXR0ZXJuIiwid29ya3NwYWNlUGF0dGVybk1heERlcHRoIiwiY2FuZGlkYXRlUm9vdCIsIk1hdGgiLCJtYXgiLCJzZWdtZW50cyIsInNwbGl0Iiwic2VnbWVudCIsImhhc0dsb2JNYWdpYyIsImluY2x1ZGVzIiwicGF0aERlcHRoIiwiX3g2IiwiX2lzRGlyZWN0b3J5IiwiZGlyZWN0b3J5U3RhdCIsInN0YXQiLCJfeDciLCJfeDgiLCJfeDkiLCJfbGlzdERpcmVjdG9yaWVzIiwiX2l0ZXJhdG9yOSIsIl9zdGVwOSIsImVudHJ5IiwiY2hpbGREaXJlY3RvcnkiLCJfdDciLCJfdDgiLCJfdDkiLCJfdDAiLCJyZWFkZGlyIiwid2l0aEZpbGVUeXBlcyIsIm5hbWUiLCJzZXAiLCJwYXRoIiwiX3gwIiwiX3gxIiwiX3gxMCIsIl9leHBhbmRXb3Jrc3BhY2VQYXR0ZXJuIiwibWF0Y2hlciIsIl9pdGVyYXRvcjAiLCJfc3RlcDAiLCJfdDEiLCJfdDEwIiwiZ2xvYlBhdHRlcm5NYXRjaGVyIiwiaGFzUGFja2FnZUpzb24iLCJub3JtYWxpemVkIiwibm9ybWFsaXplUGF0aCIsInJlcGxhY2UiLCJtaW5pbWF0Y2giLCJkb3QiLCJfeDExIiwiX3gxMiIsIl9oYXNQYWNrYWdlSnNvbiIsIl9jYWxsZWU3IiwicGFja2FnZUpzb25TdGF0IiwiX2NvbnRleHQ3IiwiaXNGaWxlIiwiX3gxMyIsIl94MTQiLCJfYXNzZXJ0Tm9DYXRhbG9nRGVwZW5kZW5jaWVzIiwiX2NhbGxlZTgiLCJjYXRhbG9nRGVwZW5kZW5jaWVzIiwiX2kzIiwiX2FyciIsInBhY2thZ2VKc29uIiwiX2l0ZXJhdG9yMSIsIl9zdGVwMSIsImRlcGVuZGVuY3kiLCJfY29udGV4dDgiLCJjYXRhbG9nRGVwZW5kZW5jeU5hbWVzIiwiX3gxNSIsIl9yZWFkUGFja2FnZUpzb24iLCJfY2FsbGVlOSIsInBhY2thZ2VKc29uUGF0aCIsIl90MTIiLCJfdDEzIiwiX2NvbnRleHQ5IiwiSlNPTiIsInJlYWRGaWxlIiwicGFyc2UiLCJuYW1lcyIsImRlcGVuZGVuY2llcyIsIl9pMiIsIl9PYmplY3QkZW50cmllcyIsIk9iamVjdCIsIl9PYmplY3QkZW50cmllcyRfaSIsIl94MTYiLCJfeDE3IiwiX3VwZGF0ZVBhY2thZ2UiLCJfY2FsbGVlMCIsImxhYmVsIiwiX2NvbnRleHQwIiwicnVuQ29tbWFuZCIsIl94MTgiLCJfeDE5IiwiX3J1bkNvbW1hbmQiLCJfY2FsbGVlMSIsIl9jb250ZXh0MSIsInJlbGF0aXZlIiwieWFtbFN0cmluZ2lmeU9wdGlvbnMiLCJibG9ja1F1b3RlIiwibGluZVdpZHRoIiwicHJvZ3Jlc3MiLCJwcm9jZXNzU3RkZXJyIiwiZXhpdFdpdGhFcnJvciIsInJlYWRTdGRpblRleHQiLCJfcmVhZFN0ZGluVGV4dCIsInByb2Nlc3NTdGRpbiIsImlzVFRZIiwicmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiX3JlYWRSZXF1aXJlZFN0ZGluVGV4dCIsImVycm9yTWVzc2FnZSIsImlucHV0IiwiX29wdGlvbnMkYWxsb3dlZEV4aXRDIiwiYWxsb3dlZEV4aXRDb2RlcyIsIl9yZXQiLCJhdHRlbXB0IiwiX2NvbW1hbmQkMiIsImZhaWx1cmVNZXNzYWdlIiwicmV0cnkiLCJzdGRpbkRhdGEiLCJzdGRpbiIsImlzVHJhbnNpZW50R2hGYWlsdXJlIiwiR0hfUkVUUllfTUFYX0FUVEVNUFRTIiwic2xlZXAiLCJkIiwiX3JlZ2VuZXJhdG9yVmFsdWVzIiwiZ2giLCJfZ2giLCJhcmdzIiwiZ2hBbGxvd0V4aXRDb2RlcyIsIl9naEFsbG93RXhpdENvZGVzIiwiY3VycmVudFJlcG9QYXJ0cyIsIl9jdXJyZW50UmVwb1BhcnRzIiwibmFtZVdpdGhPd25lck91dHB1dCIsIm5hbWVXaXRoT3duZXIiLCJfbmFtZVdpdGhPd25lciRzcGxpdCIsIl9uYW1lV2l0aE93bmVyJHNwbGl0MiIsIm93bmVyIiwiY3VycmVudFByTnVtYmVyIiwiX2N1cnJlbnRQck51bWJlciIsInByTnVtYmVyIiwiZ3JhcGhxbCIsIl9ncmFwaHFsIiwicXVlcnkiLCJ2YXJzIiwia2V5IiwicmVzcG9uc2UiLCJlcnJvck1lc3NhZ2VzIiwiZXJyb3JzIiwiX2Vycm9yJG1lc3NhZ2UiLCJ5YW1sRHVtcCIsImRhdGEiLCJzdHJpbmdpZnlZYW1sIiwiZGVlcENvcHkiLCJzdHJ1Y3R1cmVkQ2xvbmUiLCJzcGF3blN5bmNTYWZlIiwiX3Jlc3VsdCRzdGF0dXMiLCJfcmVzdWx0JHN0ZG91dCIsIl9yZXN1bHQkc3RkZXJyIiwicmVzdWx0Iiwic3Bhd25TeW5jIiwiZW5jb2RpbmciLCJzdGF0dXMiLCJURVNUX1JFTEFURURfUEFUVEVSTiIsIldPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyIsIkZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiIsInJ0a0F2YWlsYWJsZSIsIm5vb3AiLCJsYXRlc3RQckNpUmVzdWx0cyIsIl9sYXRlc3RQckNpUmVzdWx0cyIsIl9zdW1tYXJ5JHBhc3MiLCJfc3VtbWFyeSRmYWlsIiwiX3N1bW1hcnkkcGVuZGluZyIsIl9zdW1tYXJ5JHNraXBwaW5nIiwiX3N1bW1hcnkkY2FuY2VsIiwiY2hlY2tzIiwicmF3Iiwic3VtbWFyeSIsIl9jaGVjayRidWNrZXQyIiwiX3N1bW1hcnkkYnVja2V0IiwiY2hlY2siLCJidWNrZXQiLCJTeW50YXhFcnJvciIsInRvdGFsIiwicGFzcyIsImZhaWwiLCJwZW5kaW5nIiwic2tpcHBpbmciLCJjYW5jZWwiLCJ3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwiX3dhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MiLCJzbGVlcEZuIiwibGF0ZXN0Q2lSZXN1bHRzRm4iLCJ3cml0ZVByb2dyZXNzRm4iLCJhdHRlbXB0cyIsImNpUmVzdWx0cyIsImNsYXNzaWZpZWRSZXN1bHRzIiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MiIsImZhaWxlZFJlc3VsdHMiLCJydW5uaW5nUmVzdWx0cyIsInNsZWVwU2Vjb25kcyIsImNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzIiwiZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkIiwia2V5cyIsImxhdGVzdFJlc3VsdHNCeVdvcmtmbG93Iiwid29ya2Zsb3dLZXkiLCJ3b3JrZmxvdyIsImZyb21FbnRyaWVzIiwibGF0ZXN0QXR0ZW1wdENoZWNrcyIsImdyb3VwcyIsIndvcmtmbG93QXR0ZW1wdEtleSIsImdyb3VwIiwibGF0ZXN0R3JvdXAiLCJ2YWx1ZXMiLCJjdXJyZW50R3JvdXAiLCJsYXRlc3RHcm91cFRpbWVzdGFtcCIsImxhdGVzdENoZWNrc0ZvcldvcmtmbG93IiwiZmlyc3RDaGVjayIsImxhdGVzdENoZWNrIiwiX2xhdGVzdEF0dGVtcHRDaGVja3MiLCJsYXRlc3RDaGVja1RpbWVzdGFtcCIsImNsYXNzaWZpY2F0aW9uIiwid29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbiIsInRlc3RSZWxhdGVkQ2hlY2siLCJ3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayIsIl9saW5rJG1hdGNoIiwibGluayIsIm1hdGNoIiwid29ya2Zsb3dSdW4iLCJfd29ya2Zsb3dSdW4iLCJydW5JZCIsInJ1bkpzb24iLCJidWNrZXRzIiwiX2NoZWNrJGJ1Y2tldCIsIl9jaGVjayRzdGFydGVkQXQiLCJ0aW1lc3RhbXAiLCJjb21wbGV0ZWRBdCIsInN0YXJ0ZWRBdCIsIl9zbGVlcFNlY29uZHMiLCJzZWNvbmRzIiwiY2hlY2tQckNpIiwiX2NoZWNrUHJDaSIsImxhdGVzdENvbW1pdHMiLCJfeWllbGQkd2FpdEZvclJ1bm5pbmciLCJfeWllbGQkd2FpdEZvclJ1bm5pbmcyIiwid2FpdEF0dGVtcHRzIiwid2FpdFRpbWVkT3V0IiwiY2xhc3NpZmllZExhdGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3Q0IiwicGF5bG9hZCIsImxhdGVzdFByQ29tbWl0U3VtbWFyaWVzIiwid2FpdGVkX2Zvcl90ZXN0X3JlbGF0ZWRfY2hlY2tzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHMiLCJ0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQiLCJfcmVmNiIsImNvbXBhY3RXb3JrZmxvdyIsImNvbXBhY3RXb3JrZmxvd1Jlc3VsdCIsIl9vYmplY3RTcHJlYWQiLCJidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyIsImZhaWxlZFdvcmtmbG93TG9nIiwiZmFpbGVkX3dvcmtmbG93cyIsInRlc3Rfd29ya2Zsb3dfb3V0cHV0IiwiX3JlZjciLCJfcmVmOCIsInJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyIsInN1Y2Nlc3NmdWxDaU91dHB1dCIsImxhdGVzdCIsIl9sYXRlc3RQckNvbW1pdFN1bW1hcmllcyIsIl9yZXNwb25zZSRkYXRhJHJlcG9zaSIsIl9yZXNwb25zZSRkYXRhIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMiIsIm51bWJlciIsIk51bWJlciIsInJlcG9zaXRvcnkiLCJwdWxsUmVxdWVzdCIsImNvbW1pdHMiLCJub2RlcyIsImZsYXRNYXAiLCJub2RlIiwiX25vZGUkY29tbWl0IiwiX25vZGUkY29tbWl0MiIsIl9ub2RlJGNvbW1pdDMiLCJkYXRlIiwic3RyaW5nT3JVbmRlZmluZWQiLCJjb21taXQiLCJjb21taXR0ZWREYXRlIiwiaGFzaCIsImFiYnJldmlhdGVkT2lkIiwidGl0bGUiLCJtZXNzYWdlSGVhZGxpbmUiLCJ0b1JldmVyc2VkIiwiZm9ybWF0TGF0ZXN0Q29tbWl0U2VjdGlvbiIsIl9jb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJfc3RyaW5nT3JVbmRlZmluZWQiLCJydW4iLCJmYWlsZWRKb2IiLCJmYWlsZWRXb3JrZmxvd1J1bkpvYiIsImpvYiIsImpvYl91cmwiLCJ1cmwiLCJmYWlsZWRfc3RlcCIsImZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUiLCJydW5faWQiLCJydW5fdXJsIiwiYnJhbmNoIiwiaGVhZEJyYW5jaCIsInNoYSIsImhlYWRTaGEiLCJjb25jbHVzaW9uIiwiX2ZhaWxlZFdvcmtmbG93TG9nIiwibG9nIiwiZmFpbGVkX2xvZyIsInJlZmluZUZhaWxlZFdvcmtmbG93TG9nIiwic2FuaXRpemVkSW5wdXQiLCJzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nIiwic3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzIiwibGluZSIsImpvYk5hbWUiLCJfcnVuJGpvYnMkZmluZCIsImpvYnMiLCJmaW5kIiwiX2pvYiRzdGVwcyRmaW5kJG5hbWUiLCJfam9iJHN0ZXBzJGZpbmQiLCJfam9iJHN0ZXBzJGZpbmQyIiwic3RlcHMiLCJzdGVwIiwiY3VycmVudEJhc2VCcmFuY2giLCJfY3VycmVudEJhc2VCcmFuY2giLCJfeWllbGQkY3VycmVudFB1bGxSZXEiLCJjdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoIiwiY3VycmVudERlZmF1bHRCcmFuY2giLCJfY3VycmVudERlZmF1bHRCcmFuY2giLCJkZWZhdWx0QnJhbmNoIiwicmVxdWlyZU5vbkVtcHR5IiwiX2N1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2giLCJiYXNlQnJhbmNoT3V0cHV0IiwiYmFzZUJyYW5jaCIsImlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyIsIm5vcm1hbGl6ZUlzc3VlTnVtYmVyIiwicmVmZXJlbmNlIiwiZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlciIsIm5vcm1hbGl6ZVByTnVtYmVyIiwiZmV0Y2hJc3N1ZU1lc3NhZ2VzIiwiX2ZldGNoSXNzdWVNZXNzYWdlcyIsImlzc3VlTnVtYmVyIiwiaXNzdWUiLCJpc3N1ZU1lc3NhZ2VzIiwiZmV0Y2hQck1lc3NhZ2VzIiwiX2ZldGNoUHJNZXNzYWdlcyIsInJlc29sdmVkUHJOdW1iZXIiLCJjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMiLCJwdWxsX3JlcXVlc3QiLCJmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUiLCJfZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIiwicHJOdW1iZXJPdXRwdXQiLCJfY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMyIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjQiLCJwck1lc3NhZ2VzIiwicmVmZXJlbmNlVGV4dCIsImtpbmRTZWdtZW50IiwiX2lzc3VlTWVzc2FnZXMiLCJtZXNzYWdlcyIsImZldGNoTWV0YWRhdGEiLCJub3VuIiwic2VsZWN0TWV0YWRhdGEiLCJwYWdpbmF0ZU1lc3NhZ2VzIiwic2VsZWN0Q29ubmVjdGlvbiIsIl9yZXNwb25zZSRkYXRhMiIsImNvbW1lbnRzIiwibWFwTm9kZSIsImNvbW1lbnRNZXNzYWdlIiwiX3ByTWVzc2FnZXMiLCJpc3N1ZUNvbW1lbnRzIiwicmV2aWV3cyIsIl9yZXNwb25zZSRkYXRhMyIsInBySXNzdWVDb21tZW50cyIsInByUmV2aWV3cyIsImNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0IiwibGVmdENyZWF0ZWRBdCIsImNyZWF0ZWRBdCIsInJpZ2h0Q3JlYXRlZEF0IiwiX3BySXNzdWVDb21tZW50cyIsIl9yZXNwb25zZSRkYXRhNCIsIl9wclJldmlld3MiLCJfcmVzcG9uc2UkZGF0YTUiLCJyZXZpZXdNZXNzYWdlIiwiX3BhZ2luYXRlTWVzc2FnZXMiLCJjb25maWciLCJjdXJzb3IiLCJfY29ubmVjdGlvbiRwYWdlSW5mbyQiLCJjb25uZWN0aW9uIiwiaGFzTWVzc2FnZUJvZHkiLCJwYWdlSW5mbyIsImhhc05leHRQYWdlIiwiZW5kQ3Vyc29yIiwiX2ZldGNoTWV0YWRhdGEiLCJfbWV0YWRhdGEkYXV0aG9yJGxvZ2kiLCJfbWV0YWRhdGEkYXV0aG9yIiwiX21ldGFkYXRhJGJvZHkiLCJtZXRhZGF0YSIsImF1dGhvciIsImxvZ2luIiwiY29tbWVudCIsIl9jb21tZW50JGF1dGhvciRsb2dpbiIsIl9jb21tZW50JGF1dGhvciIsInR5cGUiLCJyZXZpZXciLCJfcmV2aWV3JGF1dGhvciRsb2dpbiIsIl9yZXZpZXckYXV0aG9yIiwiX3JldmlldyRzdGF0ZSIsIl9yZXZpZXckc3VibWl0dGVkQXQiLCJfcmV2aWV3JGJvZHkiLCJzdGF0ZSIsInN1Ym1pdHRlZEF0Iiwib3BlblByIiwiX29wZW5QciIsIl90ZW1wIiwiaGVhZE91dHB1dCIsImhlYWQiLCJiYXNlT3V0cHV0IiwiYmFzZSIsImNyZWF0ZUFyZ3MiLCJ1cGRhdGVQciIsIl91cGRhdGVQciIsImVkaXRQciIsIl9lZGl0UHIiLCJlZGl0QXJncyIsInJlYWRSZXBsaWVzRnJvbVN0ZGluIiwiX3JlYWRSZXBsaWVzRnJvbVN0ZGluIiwibm9ybWFsaXplZFJlcGxpZXMiLCJ0aHJlYWRJZCIsInBhcnNlUmVwbHlJbnB1dCIsInJlcGxpZXMiLCJwYWdpbmF0ZVJldmlld1RocmVhZHMiLCJfcGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwib25UaHJlYWQiLCJfcmV2aWV3VGhyZWFkcyRwYWdlSW4iLCJyZXZpZXdUaHJlYWRzIiwidGhyZWFkIiwidW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiaWRzIiwiaXNSZXNvbHZlZCIsImlkIiwidW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJ0aHJlYWRzIiwiZmlsZVRleHRDYWNoZSIsIl9wYWdlSW5mbyRlbmRDdXJzb3IiLCJfcGFnZUluZm8kZW5kQ3Vyc29yMiIsImNvbW1lbnRDb25uZWN0aW9uIiwiX3RocmVhZCRwYXRoIiwiX3RocmVhZCRpc091dGRhdGVkIiwibm9ybWFsaXplQ29tbWVudCIsImlzT3V0ZGF0ZWQiLCJfdGhyZWFkJHBhdGgyIiwiX3RocmVhZCRpc091dGRhdGVkMiIsIm9yaWdpbmFsTGluZSIsInN0YXJ0TGluZSIsIm9yaWdpbmFsU3RhcnRMaW5lIiwibGlzdFByUmV2aWV3VGhyZWFkcyIsIl9saXN0UHJSZXZpZXdUaHJlYWRzIiwiX3Q2IiwidW5yZXNvbHZlZF90aHJlYWRzIiwicmVzb2x2ZVByUmV2aWV3VGhyZWFkcyIsIl9yZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwidW5yZXNvbHZlZElkcyIsInJlc29sdmVkVGhyZWFkSWRzIiwiX3N0ZXAyJHZhbHVlIiwiaW5kZXgiLCJfc3RlcDIkdmFsdWUkIiwicmVzb2x2ZVJldmlld1RocmVhZCIsInJlc29sdmVkX3RocmVhZF9pZHMiLCJfbm9ybWFsaXplQ29tbWVudCIsImlzVGhyZWFkT3V0ZGF0ZWQiLCJfYXV0aG9yJGxvZ2luIiwiX3QxMSIsImJ1aWxkUmV2aWV3U25pcHBldCIsInNuaXBwZXQiLCJwYXJzZWQiLCJfdHlwZW9mIiwiZXZlcnkiLCJyZXBseSIsImlzUmVwbHlJbnB1dCIsIl94MjAiLCJfeDIxIiwiX3gyMiIsIl9idWlsZFJldmlld1NuaXBwZXQiLCJwcmltYXJ5TG9jYXRpb24iLCJmYWxsYmFja0xvY2F0aW9uIiwibG9jYXRpb24iLCJmaWxlVGV4dCIsIm9yaWdpbmFsQ29tbWVudExvY2F0aW9uIiwiY3VycmVudENvbW1lbnRMb2NhdGlvbiIsImZldGNoRmlsZVRleHRBdEV4cHJlc3Npb24iLCJleHByZXNzaW9uIiwicmVuZGVyTGluZVNuaXBwZXQiLCJlbmRMaW5lIiwiX2NvbW1lbnQkY29tbWl0IiwiY29tbWVudExvY2F0aW9uIiwib2lkIiwiX2NvbW1lbnQkb3JpZ2luYWxDb21tIiwib3JpZ2luYWxDb21taXQiLCJfeDIzIiwiX3gyNCIsIl94MjUiLCJfeDI2IiwiX2ZldGNoRmlsZVRleHRBdEV4cHJlc3Npb24iLCJjYWNoZUtleSIsImZldGNoRmlsZVRleHQiLCJfeDI3IiwiX3gyOCIsIl94MjkiLCJfZmV0Y2hGaWxlVGV4dCIsImJsb2IiLCJvYmplY3QiLCJpc0JpbmFyeSIsInRleHQiLCJsaW5lcyIsImF0IiwicG9wIiwiY2xhbXBlZFN0YXJ0TGluZSIsImNsYW1wTGluZU51bWJlciIsImNsYW1wZWRFbmRMaW5lIiwiZmlyc3RMaW5lIiwibGFzdExpbmUiLCJtaW4iLCJsaW5lTnVtYmVyV2lkdGgiLCJzbmlwcGV0TGluZXMiLCJsaW5lTnVtYmVyIiwiX2xpbmVzIiwibWFya2VyIiwibWF4TGluZU51bWJlciIsImJ1aWxkUGxhblByb21wdCIsIl9idWlsZFBsYW5Qcm9tcHQiLCJpc3N1ZVlhbWwiLCJidWlsZE1lcmdlQmFzZUNvbW1hbmQiLCJzaGVsbFF1b3RlIiwicmVwbGFjZUFsbCIsImJ1aWxkUmV2aWV3UHJvbXB0IiwiX2J1aWxkUmV2aWV3UHJvbXB0Iiwia25vd25GYWN0cyIsIm1lcmdlQmFzZUNvbW1hbmQiLCJwckNvbnRleHQiLCJidWlsZEtub3duRmFjdHNJbnN0cnVjdGlvbnMiLCJidWlsZFByQ29udGV4dEluc3RydWN0aW9ucyIsInRyaW1tZWRGYWN0cyIsImJ1aWxkU2NyZWVuc2hvdFByb21wdCIsImluaXRpYWxVcmwiLCJwYWdlTmFtZSIsInNjcmVlbnNob3REZXNjcmlwdGlvbiIsInNhbml0aXplZERlc2NyaXB0aW9uIiwiYnVpbGRTaW1wbGlmeVByb21wdCIsIl9idWlsZFNpbXBsaWZ5UHJvbXB0IiwiUEFDS0FHRV9OQU1FIiwiVEVYVF9GSUxFX0VYVEVOU0lPTl9SRUdFWCIsImluc3RhbGxQYWNrZWRTa2lsbHMiLCJfaW5zdGFsbFBhY2tlZFNraWxscyIsInBhY2thZ2VSb290IiwiaW5zdGFsbFNvdXJjZVJvb3QiLCJmaW5kUGFja2FnZVJvb3QiLCJta2R0ZW1wIiwidG1wZGlyIiwiY3AiLCJyZXBsYWNlTGF0ZXN0U3BlY2lmaWVyV2l0aFBhY2thZ2VWZXJzaW9uIiwicm0iLCJmb3JjZSIsIl9maW5kUGFja2FnZVJvb3QiLCJjdXJyZW50RGlyIiwicGFja2FnZU1ldGFkYXRhIiwicGFyZW50RGlyIiwiZmlsZVVSTFRvUGF0aCIsInJlYWRQYWNrYWdlTWV0YWRhdGEiLCJhc3NlcnQiLCJub3RTdHJpY3RFcXVhbCIsImNvbnRlbnQiLCJvayIsInZlcnNpb24iLCJfcmVwbGFjZUxhdGVzdFNwZWNpZmllcldpdGhQYWNrYWdlVmVyc2lvbiIsImxhdGVzdEluc3RhbGxTcGVjaWZpZXIiLCJ2ZXJzaW9uZWRJbnN0YWxsU3BlY2lmaWVyIiwicmVwbGFjZUluRmlsZXMiLCJfcmVwbGFjZUluRmlsZXMiLCJyZXBsYWNlQ29udGVudCIsImVudHJ5UGF0aCIsInJlcGxhY2VkQ29udGVudCIsInBhcmVudFBhdGgiLCJ3cml0ZUZpbGUiLCJwcm9ncmFtIiwiQ29tbWFuZCIsInJ1blJldmlld0NvbW1hbmQiLCJfcnVuUmV2aWV3Q29tbWFuZCIsIl9jYWxsZWUxMyIsIm1vZGUiLCJwcmV2aW91c1ZlcmlmaWVkRmFjdHMiLCJfY29udGV4dDEzIiwicmVhZFJldmlld1ZlcmlmaWVkRmFjdHMiLCJfYWdlbnQiLCJfcmVhZFJldmlld1ZlcmlmaWVkRmFjdHMiLCJfY2FsbGVlMTQiLCJfY29udGV4dDE0IiwiYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCIsImRlc2NyaXB0aW9uIiwiYWxsb3dFeGNlc3NBcmd1bWVudHMiLCJhcmd1bWVudE5hbWUiLCJhcmd1bWVudCIsImFyZ3VtZW50RGVzY3JpcHRpb24iLCJhZGRPcHRpb24iLCJPcHRpb24iLCJvcHRpb25EZXNjcmlwdGlvbiIsImNob2ljZXMiLCJtYWtlT3B0aW9uTWFuZGF0b3J5IiwiYWN0aW9uIiwiX2NhbGxlZTEwIiwiX2xlbiIsIl9rZXkiLCJfcmVmMTIiLCJhcmd1bWVudE9yT3B0aW9ucyIsIm1heWJlT3B0aW9ucyIsIl9hcmdzMTAiLCJfY29udGV4dDEwIiwiYWRkQWdlbnRDb21tYW5kIiwiY29uZmlnT3JSdW4iLCJfY2FsbGVlMTIiLCJfY29udGV4dDEyIiwiX2NhbGxlZTExIiwiX2NvbnRleHQxMSIsIl9ydW5Qcm9tcHRBZ2VudENvbW1hbmQiLCJfY2FsbGVlMTUiLCJfY29udGV4dDE1IiwiZXh0cmFjdE1hcmtkb3duQ29kZUJsb2NrIiwiYnVpbGRBZ2VudFByb21wdCIsIl9jb2RlQmxvY2tNYXRjaGVzJGF0IiwibGFzdENvZGVCbG9ja0NvbnRlbnQiLCJtYXRjaEFsbCIsInNob3dIZWxwQWZ0ZXJFcnJvciIsInJ1blByb21wdEFnZW50Q29tbWFuZCIsImlzc3VlUmVmZXJlbmNlIiwicHJSZWZlcmVuY2UiLCJwYXJzZUFzeW5jIiwiYXJndiJdLCJtYXBwaW5ncyI6Ijs7O216SEFtQk8sSUFLREEsRUFBMEIsQ0FBQyxTQUFVLFVBQVcsVUFDaERDLEVBQWtCLElBQUlDLElBQ3hCQyxHQUEyQixFQUkvQixTQUFzQkMsRUFBc0JDLEVBQUFDLEdBQUEsT0FBQUMsRUFBQUMsTUFBQUMsS0FBQUMsVUFBQSxDQWtDM0MsU0FBQUgsSUFBQSxPQUFBQSxFQUFBSSxFQUFBQyxJQUFBQyxFQWxDTSxTQUFBQyxFQUFzQ0MsRUFBbUJDLEdBQTBCLElBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUEsT0FBQWYsSUFBQWdCLEVBQUEsU0FBQUMsR0FBQSxjQUFBQSxFQUFBQyxFQUFBRCxFQUFBRSxHQUFBLEtBQUEsRUFNSyxZQU5MLElBQTFCZixJQUFBQSxFQUE2QixDQUFBLEdBQ3JGRSxFQUFPYyxFQUFnQixPQUFYZixFQUFDRixFQUFRLElBQUVFLEVBQUksR0FBSUYsRUFBUWtCLE1BQU0sR0FBSSxDQUNyREMsVUFBVSxFQUNWQyxNQUFPLENBQUMsU0FBVSxPQUFRLFVBRXRCaEIsRUFB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
|