@luftborn/custom-elements 1.1.40 → 1.1.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/demo/index.js +354 -284
  2. package/demo/index.min.js +353 -283
  3. package/demo/index.min.js.map +1 -1
  4. package/dist/elements/CheckBoxElement/CheckBoxElement.js +1 -0
  5. package/dist/elements/CheckBoxElement/CheckBoxElement.js.map +1 -1
  6. package/dist/elements/DropDownList/DropDownListElement.js +1 -0
  7. package/dist/elements/DropDownList/DropDownListElement.js.map +1 -1
  8. package/dist/elements/RadioButtonGroup/RadioButtonGroupElement.js +1 -0
  9. package/dist/elements/RadioButtonGroup/RadioButtonGroupElement.js.map +1 -1
  10. package/node_modules/@webcomponents/webcomponentsjs/CHANGELOG.md +61 -0
  11. package/node_modules/@webcomponents/webcomponentsjs/README.md +64 -47
  12. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-ce.js +14 -24
  13. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-ce.js.map +1 -1
  14. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-pf_dom.js +60 -0
  15. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-pf_dom.js.map +1 -0
  16. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-pf_js.js +95 -0
  17. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-pf_js.js.map +1 -0
  18. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +290 -250
  19. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +1 -1
  20. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce.js +184 -177
  21. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +1 -1
  22. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd.js +151 -135
  23. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd.js.map +1 -1
  24. package/node_modules/@webcomponents/webcomponentsjs/package.json +29 -28
  25. package/node_modules/@webcomponents/webcomponentsjs/src/entrypoints/webcomponents-bundle-index.js +5 -3
  26. package/node_modules/@webcomponents/webcomponentsjs/src/entrypoints/webcomponents-ce-index.js +1 -1
  27. package/node_modules/@webcomponents/webcomponentsjs/src/entrypoints/webcomponents-pf_dom-index.js +17 -0
  28. package/node_modules/@webcomponents/webcomponentsjs/src/entrypoints/webcomponents-pf_js-index.js +13 -0
  29. package/node_modules/@webcomponents/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-index.js +1 -1
  30. package/node_modules/@webcomponents/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-pf-index.js +4 -7
  31. package/node_modules/@webcomponents/webcomponentsjs/src/entrypoints/webcomponents-sd-index.js +1 -1
  32. package/node_modules/@webcomponents/webcomponentsjs/src/flag-parser.js +69 -0
  33. package/node_modules/@webcomponents/webcomponentsjs/src/platform/baseuri.js +28 -0
  34. package/node_modules/@webcomponents/webcomponentsjs/src/platform/child-node/after.js +47 -0
  35. package/node_modules/@webcomponents/webcomponentsjs/src/platform/child-node/before.js +40 -0
  36. package/node_modules/@webcomponents/webcomponentsjs/src/platform/child-node/index.js +14 -0
  37. package/node_modules/@webcomponents/webcomponentsjs/src/platform/child-node/remove.js +37 -0
  38. package/node_modules/@webcomponents/webcomponentsjs/src/platform/child-node/replace-with.js +42 -0
  39. package/node_modules/@webcomponents/webcomponentsjs/src/platform/custom-event.js +79 -0
  40. package/node_modules/@webcomponents/webcomponentsjs/src/platform/es6-misc.js +38 -0
  41. package/node_modules/@webcomponents/webcomponentsjs/src/platform/get-attribute-names.js +27 -0
  42. package/node_modules/@webcomponents/webcomponentsjs/src/platform/matches.js +21 -0
  43. package/node_modules/@webcomponents/webcomponentsjs/src/platform/parent-node/append.js +31 -0
  44. package/node_modules/@webcomponents/webcomponentsjs/src/platform/parent-node/index.js +13 -0
  45. package/node_modules/@webcomponents/webcomponentsjs/src/platform/parent-node/prepend.js +42 -0
  46. package/node_modules/@webcomponents/webcomponentsjs/src/platform/parent-node/replace-children.js +45 -0
  47. package/node_modules/@webcomponents/webcomponentsjs/src/platform/promise.js +50 -0
  48. package/node_modules/@webcomponents/webcomponentsjs/src/platform/svg-element-class-list.js +28 -0
  49. package/node_modules/@webcomponents/webcomponentsjs/src/platform/symbol.js +64 -0
  50. package/node_modules/@webcomponents/webcomponentsjs/src/unresolved.js +32 -0
  51. package/node_modules/@webcomponents/webcomponentsjs/webcomponents-bundle.d.ts +174 -0
  52. package/node_modules/@webcomponents/webcomponentsjs/webcomponents-bundle.js +299 -250
  53. package/node_modules/@webcomponents/webcomponentsjs/webcomponents-bundle.js.map +1 -1
  54. package/node_modules/@webcomponents/webcomponentsjs/webcomponents-loader.js +49 -28
  55. package/package.json +1 -1
  56. package/src/elements/CheckBoxElement/CheckBoxElement.ts +1 -0
  57. package/src/elements/DropDownList/DropDownListElement.ts +1 -0
  58. package/src/elements/RadioButtonGroup/RadioButtonGroupElement.ts +1 -0
package/demo/index.js CHANGED
@@ -1493,7 +1493,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
1493
1493
  }());
1494
1494
 
1495
1495
  },{}],34:[function(require,module,exports){
1496
- (function (global,setImmediate){
1496
+ (function (global,setImmediate){(function (){
1497
1497
  /**
1498
1498
  @license @nocompile
1499
1499
  Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
@@ -1506,49 +1506,39 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
1506
1506
  (function(){/*
1507
1507
 
1508
1508
  Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
1509
- This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
1510
- The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
1511
- The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
1512
- Code distributed by Google as part of the polymer project is also
1513
- subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
1509
+ This code may only be used under the BSD style license found at
1510
+ http://polymer.github.io/LICENSE.txt The complete set of authors may be found
1511
+ at http://polymer.github.io/AUTHORS.txt The complete set of contributors may
1512
+ be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by
1513
+ Google as part of the polymer project is also subject to an additional IP
1514
+ rights grant found at http://polymer.github.io/PATENTS.txt
1514
1515
  */
1515
- 'use strict';var w;function ba(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}}function ca(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):{next:ba(a)}}function da(a){for(var b,c=[];!(b=a.next()).done;)c.push(b.value);return c}
1516
- var fa="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this,ha="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};function ia(){ia=function(){};fa.Symbol||(fa.Symbol=la)}function ma(a,b){this.a=a;ha(this,"description",{configurable:!0,writable:!0,value:b})}ma.prototype.toString=function(){return this.a};
1517
- var la=function(){function a(c){if(this instanceof a)throw new TypeError("Symbol is not a constructor");return new ma("jscomp_symbol_"+(c||"")+"_"+b++,c)}var b=0;return a}();function na(){ia();var a=fa.Symbol.iterator;a||(a=fa.Symbol.iterator=fa.Symbol("Symbol.iterator"));"function"!=typeof Array.prototype[a]&&ha(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return oa(ba(this))}});na=function(){}}
1518
- function oa(a){na();a={next:a};a[fa.Symbol.iterator]=function(){return this};return a}var pa;if("function"==typeof Object.setPrototypeOf)pa=Object.setPrototypeOf;else{var qa;a:{var va={Pa:!0},wa={};try{wa.__proto__=va;qa=wa.Pa;break a}catch(a){}qa=!1}pa=qa?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var xa=pa;function ya(){this.l=!1;this.b=null;this.Ea=void 0;this.a=1;this.Y=0;this.c=null}
1519
- function za(a){if(a.l)throw new TypeError("Generator is already running");a.l=!0}ya.prototype.J=function(a){this.Ea=a};function Aa(a,b){a.c={Sa:b,Wa:!0};a.a=a.Y}ya.prototype.return=function(a){this.c={return:a};this.a=this.Y};function Ba(a,b){a.a=3;return{value:b}}function Ca(a){this.a=new ya;this.b=a}function Da(a,b){za(a.a);var c=a.a.b;if(c)return Ea(a,"return"in c?c["return"]:function(d){return{value:d,done:!0}},b,a.a.return);a.a.return(b);return Fa(a)}
1520
- function Ea(a,b,c,d){try{var e=b.call(a.a.b,c);if(!(e instanceof Object))throw new TypeError("Iterator result "+e+" is not an object");if(!e.done)return a.a.l=!1,e;var f=e.value}catch(g){return a.a.b=null,Aa(a.a,g),Fa(a)}a.a.b=null;d.call(a.a,f);return Fa(a)}function Fa(a){for(;a.a.a;)try{var b=a.b(a.a);if(b)return a.a.l=!1,{value:b.value,done:!1}}catch(c){a.a.Ea=void 0,Aa(a.a,c)}a.a.l=!1;if(a.a.c){b=a.a.c;a.a.c=null;if(b.Wa)throw b.Sa;return{value:b.return,done:!0}}return{value:void 0,done:!0}}
1521
- function Ga(a){this.next=function(b){za(a.a);a.a.b?b=Ea(a,a.a.b.next,b,a.a.J):(a.a.J(b),b=Fa(a));return b};this.throw=function(b){za(a.a);a.a.b?b=Ea(a,a.a.b["throw"],b,a.a.J):(Aa(a.a,b),b=Fa(a));return b};this.return=function(b){return Da(a,b)};na();this[Symbol.iterator]=function(){return this}}function Ha(a,b){b=new Ga(new Ca(b));xa&&xa(b,a.prototype);return b}Array.from||(Array.from=function(a){return[].slice.call(a)});
1522
- Object.assign||(Object.assign=function(a){for(var b=[].slice.call(arguments,1),c=0,d;c<b.length;c++)if(d=b[c])for(var e=a,f=d,g=Object.getOwnPropertyNames(f),h=0;h<g.length;h++)d=g[h],e[d]=f[d];return a});(function(){if(!function(){var f=document.createEvent("Event");f.initEvent("foo",!0,!0);f.preventDefault();return f.defaultPrevented}()){var a=Event.prototype.preventDefault;Event.prototype.preventDefault=function(){this.cancelable&&(a.call(this),Object.defineProperty(this,"defaultPrevented",{get:function(){return!0},configurable:!0}))}}var b=/Trident/.test(navigator.userAgent);if(!window.Event||b&&"function"!==typeof window.Event){var c=window.Event;window.Event=function(f,g){g=g||{};var h=document.createEvent("Event");
1523
- h.initEvent(f,!!g.bubbles,!!g.cancelable);return h};if(c){for(var d in c)window.Event[d]=c[d];window.Event.prototype=c.prototype}}if(!window.CustomEvent||b&&"function"!==typeof window.CustomEvent)window.CustomEvent=function(f,g){g=g||{};var h=document.createEvent("CustomEvent");h.initCustomEvent(f,!!g.bubbles,!!g.cancelable,g.detail);return h},window.CustomEvent.prototype=window.Event.prototype;if(!window.MouseEvent||b&&"function"!==typeof window.MouseEvent){b=window.MouseEvent;window.MouseEvent=
1524
- function(f,g){g=g||{};var h=document.createEvent("MouseEvent");h.initMouseEvent(f,!!g.bubbles,!!g.cancelable,g.view||window,g.detail,g.screenX,g.screenY,g.clientX,g.clientY,g.ctrlKey,g.altKey,g.shiftKey,g.metaKey,g.button,g.relatedTarget);return h};if(b)for(var e in b)window.MouseEvent[e]=b[e];window.MouseEvent.prototype=b.prototype}})();(function(){function a(){}function b(p,t){if(!p.childNodes.length)return[];switch(p.nodeType){case Node.DOCUMENT_NODE:return F.call(p,t);case Node.DOCUMENT_FRAGMENT_NODE:return C.call(p,t);default:return r.call(p,t)}}var c="undefined"===typeof HTMLTemplateElement,d=!(document.createDocumentFragment().cloneNode()instanceof DocumentFragment),e=!1;/Trident/.test(navigator.userAgent)&&function(){function p(z,R){if(z instanceof DocumentFragment)for(var bb;bb=z.firstChild;)D.call(this,bb,R);else D.call(this,
1525
- z,R);return z}e=!0;var t=Node.prototype.cloneNode;Node.prototype.cloneNode=function(z){z=t.call(this,z);this instanceof DocumentFragment&&(z.__proto__=DocumentFragment.prototype);return z};DocumentFragment.prototype.querySelectorAll=HTMLElement.prototype.querySelectorAll;DocumentFragment.prototype.querySelector=HTMLElement.prototype.querySelector;Object.defineProperties(DocumentFragment.prototype,{nodeType:{get:function(){return Node.DOCUMENT_FRAGMENT_NODE},configurable:!0},localName:{get:function(){},
1526
- configurable:!0},nodeName:{get:function(){return"#document-fragment"},configurable:!0}});var D=Node.prototype.insertBefore;Node.prototype.insertBefore=p;var K=Node.prototype.appendChild;Node.prototype.appendChild=function(z){z instanceof DocumentFragment?p.call(this,z,null):K.call(this,z);return z};var aa=Node.prototype.removeChild,ja=Node.prototype.replaceChild;Node.prototype.replaceChild=function(z,R){z instanceof DocumentFragment?(p.call(this,z,R),aa.call(this,R)):ja.call(this,z,R);return R};Document.prototype.createDocumentFragment=
1527
- function(){var z=this.createElement("df");z.__proto__=DocumentFragment.prototype;return z};var ra=Document.prototype.importNode;Document.prototype.importNode=function(z,R){R=ra.call(this,z,R||!1);z instanceof DocumentFragment&&(R.__proto__=DocumentFragment.prototype);return R}}();var f=Node.prototype.cloneNode,g=Document.prototype.createElement,h=Document.prototype.importNode,k=Node.prototype.removeChild,l=Node.prototype.appendChild,m=Node.prototype.replaceChild,q=DOMParser.prototype.parseFromString,
1528
- H=Object.getOwnPropertyDescriptor(window.HTMLElement.prototype,"innerHTML")||{get:function(){return this.innerHTML},set:function(p){this.innerHTML=p}},E=Object.getOwnPropertyDescriptor(window.Node.prototype,"childNodes")||{get:function(){return this.childNodes}},r=Element.prototype.querySelectorAll,F=Document.prototype.querySelectorAll,C=DocumentFragment.prototype.querySelectorAll,M=function(){if(!c){var p=document.createElement("template"),t=document.createElement("template");t.content.appendChild(document.createElement("div"));
1529
- p.content.appendChild(t);p=p.cloneNode(!0);return 0===p.content.childNodes.length||0===p.content.firstChild.content.childNodes.length||d}}();if(c){var y=document.implementation.createHTMLDocument("template"),W=!0,v=document.createElement("style");v.textContent="template{display:none;}";var sa=document.head;sa.insertBefore(v,sa.firstElementChild);a.prototype=Object.create(HTMLElement.prototype);var ea=!document.createElement("div").hasOwnProperty("innerHTML");a.U=function(p){if(!p.content&&p.namespaceURI===
1530
- document.documentElement.namespaceURI){p.content=y.createDocumentFragment();for(var t;t=p.firstChild;)l.call(p.content,t);if(ea)p.__proto__=a.prototype;else if(p.cloneNode=function(D){return a.b(this,D)},W)try{n(p),I(p)}catch(D){W=!1}a.a(p.content)}};var ta={option:["select"],thead:["table"],col:["colgroup","table"],tr:["tbody","table"],th:["tr","tbody","table"],td:["tr","tbody","table"]},n=function(p){Object.defineProperty(p,"innerHTML",{get:function(){return ua(this)},set:function(t){var D=ta[(/<([a-z][^/\0>\x20\t\r\n\f]+)/i.exec(t)||
1531
- ["",""])[1].toLowerCase()];if(D)for(var K=0;K<D.length;K++)t="<"+D[K]+">"+t+"</"+D[K]+">";y.body.innerHTML=t;for(a.a(y);this.content.firstChild;)k.call(this.content,this.content.firstChild);t=y.body;if(D)for(K=0;K<D.length;K++)t=t.lastChild;for(;t.firstChild;)l.call(this.content,t.firstChild)},configurable:!0})},I=function(p){Object.defineProperty(p,"outerHTML",{get:function(){return"<template>"+this.innerHTML+"</template>"},set:function(t){if(this.parentNode){y.body.innerHTML=t;for(t=this.ownerDocument.createDocumentFragment();y.body.firstChild;)l.call(t,
1532
- y.body.firstChild);m.call(this.parentNode,t,this)}else throw Error("Failed to set the 'outerHTML' property on 'Element': This element has no parent node.");},configurable:!0})};n(a.prototype);I(a.prototype);a.a=function(p){p=b(p,"template");for(var t=0,D=p.length,K;t<D&&(K=p[t]);t++)a.U(K)};document.addEventListener("DOMContentLoaded",function(){a.a(document)});Document.prototype.createElement=function(){var p=g.apply(this,arguments);"template"===p.localName&&a.U(p);return p};DOMParser.prototype.parseFromString=
1533
- function(){var p=q.apply(this,arguments);a.a(p);return p};Object.defineProperty(HTMLElement.prototype,"innerHTML",{get:function(){return ua(this)},set:function(p){H.set.call(this,p);a.a(this)},configurable:!0,enumerable:!0});var ka=/[&\u00A0"]/g,Xb=/[&\u00A0<>]/g,cb=function(p){switch(p){case "&":return"&amp;";case "<":return"&lt;";case ">":return"&gt;";case '"':return"&quot;";case "\u00a0":return"&nbsp;"}};v=function(p){for(var t={},D=0;D<p.length;D++)t[p[D]]=!0;return t};var Qa=v("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")),
1534
- db=v("style script xmp iframe noembed noframes plaintext noscript".split(" ")),ua=function(p,t){"template"===p.localName&&(p=p.content);for(var D="",K=t?t(p):E.get.call(p),aa=0,ja=K.length,ra;aa<ja&&(ra=K[aa]);aa++){a:{var z=ra;var R=p;var bb=t;switch(z.nodeType){case Node.ELEMENT_NODE:for(var Yb=z.localName,eb="<"+Yb,gg=z.attributes,ud=0;R=gg[ud];ud++)eb+=" "+R.name+'="'+R.value.replace(ka,cb)+'"';eb+=">";z=Qa[Yb]?eb:eb+ua(z,bb)+"</"+Yb+">";break a;case Node.TEXT_NODE:z=z.data;z=R&&db[R.localName]?
1535
- z:z.replace(Xb,cb);break a;case Node.COMMENT_NODE:z="\x3c!--"+z.data+"--\x3e";break a;default:throw window.console.error(z),Error("not implemented");}}D+=z}return D}}if(c||M){a.b=function(p,t){var D=f.call(p,!1);this.U&&this.U(D);t&&(l.call(D.content,f.call(p.content,!0)),u(D.content,p.content));return D};var u=function(p,t){if(t.querySelectorAll&&(t=b(t,"template"),0!==t.length)){p=b(p,"template");for(var D=0,K=p.length,aa,ja;D<K;D++)ja=t[D],aa=p[D],a&&a.U&&a.U(ja),m.call(aa.parentNode,G.call(ja,
1536
- !0),aa)}},G=Node.prototype.cloneNode=function(p){if(!e&&d&&this instanceof DocumentFragment)if(p)var t=J.call(this.ownerDocument,this,!0);else return this.ownerDocument.createDocumentFragment();else this.nodeType===Node.ELEMENT_NODE&&"template"===this.localName&&this.namespaceURI==document.documentElement.namespaceURI?t=a.b(this,p):t=f.call(this,p);p&&u(t,this);return t},J=Document.prototype.importNode=function(p,t){t=t||!1;if("template"===p.localName)return a.b(p,t);var D=h.call(this,p,t);if(t){u(D,
1537
- p);p=b(D,'script:not([type]),script[type="application/javascript"],script[type="text/javascript"]');for(var K,aa=0;aa<p.length;aa++){K=p[aa];t=g.call(document,"script");t.textContent=K.textContent;for(var ja=K.attributes,ra=0,z;ra<ja.length;ra++)z=ja[ra],t.setAttribute(z.name,z.value);m.call(K.parentNode,t,K)}}return D}}c&&(window.HTMLTemplateElement=a)})();var Ia=setTimeout;function Ja(){}function Ka(a,b){return function(){a.apply(b,arguments)}}function x(a){if(!(this instanceof x))throw new TypeError("Promises must be constructed via new");if("function"!==typeof a)throw new TypeError("not a function");this.I=0;this.za=!1;this.C=void 0;this.W=[];La(a,this)}
1538
- function Ma(a,b){for(;3===a.I;)a=a.C;0===a.I?a.W.push(b):(a.za=!0,Na(function(){var c=1===a.I?b.Ya:b.Za;if(null===c)(1===a.I?Oa:Pa)(b.va,a.C);else{try{var d=c(a.C)}catch(e){Pa(b.va,e);return}Oa(b.va,d)}}))}function Oa(a,b){try{if(b===a)throw new TypeError("A promise cannot be resolved with itself.");if(b&&("object"===typeof b||"function"===typeof b)){var c=b.then;if(b instanceof x){a.I=3;a.C=b;Ra(a);return}if("function"===typeof c){La(Ka(c,b),a);return}}a.I=1;a.C=b;Ra(a)}catch(d){Pa(a,d)}}
1539
- function Pa(a,b){a.I=2;a.C=b;Ra(a)}function Ra(a){2===a.I&&0===a.W.length&&Na(function(){a.za||"undefined"!==typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",a.C)});for(var b=0,c=a.W.length;b<c;b++)Ma(a,a.W[b]);a.W=null}function Sa(a,b,c){this.Ya="function"===typeof a?a:null;this.Za="function"===typeof b?b:null;this.va=c}function La(a,b){var c=!1;try{a(function(d){c||(c=!0,Oa(b,d))},function(d){c||(c=!0,Pa(b,d))})}catch(d){c||(c=!0,Pa(b,d))}}
1540
- x.prototype["catch"]=function(a){return this.then(null,a)};x.prototype.then=function(a,b){var c=new this.constructor(Ja);Ma(this,new Sa(a,b,c));return c};x.prototype["finally"]=function(a){var b=this.constructor;return this.then(function(c){return b.resolve(a()).then(function(){return c})},function(c){return b.resolve(a()).then(function(){return b.reject(c)})})};
1541
- function Ta(a){return new x(function(b,c){function d(h,k){try{if(k&&("object"===typeof k||"function"===typeof k)){var l=k.then;if("function"===typeof l){l.call(k,function(m){d(h,m)},c);return}}e[h]=k;0===--f&&b(e)}catch(m){c(m)}}if(!a||"undefined"===typeof a.length)throw new TypeError("Promise.all accepts an array");var e=Array.prototype.slice.call(a);if(0===e.length)return b([]);for(var f=e.length,g=0;g<e.length;g++)d(g,e[g])})}
1542
- function Ua(a){return a&&"object"===typeof a&&a.constructor===x?a:new x(function(b){b(a)})}function Va(a){return new x(function(b,c){c(a)})}function Wa(a){return new x(function(b,c){for(var d=0,e=a.length;d<e;d++)a[d].then(b,c)})}var Na="function"===typeof setImmediate&&function(a){setImmediate(a)}||function(a){Ia(a,0)};/*
1516
+ 'use strict';var v;function ba(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}}var ca="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};
1517
+ function da(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var ea=da(this);function ia(a,b){if(b)a:{var c=ea;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&ca(c,a,{configurable:!0,writable:!0,value:b})}}
1518
+ ia("Symbol",function(a){function b(e){if(this instanceof b)throw new TypeError("Symbol is not a constructor");return new c("jscomp_symbol_"+(e||"")+"_"+d++,e)}function c(e,f){this.g=e;ca(this,"description",{configurable:!0,writable:!0,value:f})}if(a)return a;c.prototype.toString=function(){return this.g};var d=0;return b});
1519
+ ia("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;c<b.length;c++){var d=ea[b[c]];"function"===typeof d&&"function"!=typeof d.prototype[a]&&ca(d.prototype,a,{configurable:!0,writable:!0,value:function(){return ja(ba(this))}})}return a});function ja(a){a={next:a};a[Symbol.iterator]=function(){return this};return a}
1520
+ function ka(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):{next:ba(a)}}function x(a){if(!(a instanceof Array)){a=ka(a);for(var b,c=[];!(b=a.next()).done;)c.push(b.value);a=c}return a}var ma;if("function"==typeof Object.setPrototypeOf)ma=Object.setPrototypeOf;else{var na;a:{var oa={a:!0},pa={};try{pa.__proto__=oa;na=pa.a;break a}catch(a){}na=!1}ma=na?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}
1521
+ var qa=ma;function ra(){this.u=!1;this.h=null;this.Ka=void 0;this.g=1;this.da=0;this.i=null}function ua(a){if(a.u)throw new TypeError("Generator is already running");a.u=!0}ra.prototype.O=function(a){this.Ka=a};function xa(a,b){a.i={Wa:b,$a:!0};a.g=a.da}ra.prototype.return=function(a){this.i={return:a};this.g=this.da};function ya(a,b){a.g=3;return{value:b}}function za(a){this.g=new ra;this.h=a}
1522
+ function Aa(a,b){ua(a.g);var c=a.g.h;if(c)return Ba(a,"return"in c?c["return"]:function(d){return{value:d,done:!0}},b,a.g.return);a.g.return(b);return Ca(a)}function Ba(a,b,c,d){try{var e=b.call(a.g.h,c);if(!(e instanceof Object))throw new TypeError("Iterator result "+e+" is not an object");if(!e.done)return a.g.u=!1,e;var f=e.value}catch(g){return a.g.h=null,xa(a.g,g),Ca(a)}a.g.h=null;d.call(a.g,f);return Ca(a)}
1523
+ function Ca(a){for(;a.g.g;)try{var b=a.h(a.g);if(b)return a.g.u=!1,{value:b.value,done:!1}}catch(c){a.g.Ka=void 0,xa(a.g,c)}a.g.u=!1;if(a.g.i){b=a.g.i;a.g.i=null;if(b.$a)throw b.Wa;return{value:b.return,done:!0}}return{value:void 0,done:!0}}
1524
+ function Da(a){this.next=function(b){ua(a.g);a.g.h?b=Ba(a,a.g.h.next,b,a.g.O):(a.g.O(b),b=Ca(a));return b};this.throw=function(b){ua(a.g);a.g.h?b=Ba(a,a.g.h["throw"],b,a.g.O):(xa(a.g,b),b=Ca(a));return b};this.return=function(b){return Aa(a,b)};this[Symbol.iterator]=function(){return this}}function Ea(a,b){b=new Da(new za(b));qa&&a.prototype&&qa(b,a.prototype);return b}Array.from||(Array.from=function(a){return[].slice.call(a)});
1525
+ Object.assign||(Object.assign=function(a){for(var b=[].slice.call(arguments,1),c=0,d;c<b.length;c++)if(d=b[c])for(var e=a,f=Object.keys(d),g=0;g<f.length;g++){var h=f[g];e[h]=d[h]}return a});var Fa=setTimeout;function Ga(){}function Ha(a,b){return function(){a.apply(b,arguments)}}function A(a){if(!(this instanceof A))throw new TypeError("Promises must be constructed via new");if("function"!==typeof a)throw new TypeError("not a function");this.N=0;this.Ea=!1;this.I=void 0;this.ba=[];Ia(a,this)}
1526
+ function Ja(a,b){for(;3===a.N;)a=a.I;0===a.N?a.ba.push(b):(a.Ea=!0,Ka(function(){var c=1===a.N?b.bb:b.cb;if(null===c)(1===a.N?La:Ma)(b.promise,a.I);else{try{var d=c(a.I)}catch(e){Ma(b.promise,e);return}La(b.promise,d)}}))}
1527
+ function La(a,b){try{if(b===a)throw new TypeError("A promise cannot be resolved with itself.");if(b&&("object"===typeof b||"function"===typeof b)){var c=b.then;if(b instanceof A){a.N=3;a.I=b;Na(a);return}if("function"===typeof c){Ia(Ha(c,b),a);return}}a.N=1;a.I=b;Na(a)}catch(d){Ma(a,d)}}function Ma(a,b){a.N=2;a.I=b;Na(a)}
1528
+ function Na(a){2===a.N&&0===a.ba.length&&Ka(function(){a.Ea||"undefined"!==typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",a.I)});for(var b=0,c=a.ba.length;b<c;b++)Ja(a,a.ba[b]);a.ba=null}function Oa(a,b,c){this.bb="function"===typeof a?a:null;this.cb="function"===typeof b?b:null;this.promise=c}function Ia(a,b){var c=!1;try{a(function(d){c||(c=!0,La(b,d))},function(d){c||(c=!0,Ma(b,d))})}catch(d){c||(c=!0,Ma(b,d))}}
1529
+ A.prototype["catch"]=function(a){return this.then(null,a)};A.prototype.then=function(a,b){var c=new this.constructor(Ga);Ja(this,new Oa(a,b,c));return c};A.prototype["finally"]=function(a){var b=this.constructor;return this.then(function(c){return b.resolve(a()).then(function(){return c})},function(c){return b.resolve(a()).then(function(){return b.reject(c)})})};
1530
+ function Pa(a){return new A(function(b,c){function d(h,k){try{if(k&&("object"===typeof k||"function"===typeof k)){var l=k.then;if("function"===typeof l){l.call(k,function(m){d(h,m)},c);return}}e[h]=k;0===--f&&b(e)}catch(m){c(m)}}if(!a||"undefined"===typeof a.length)return c(new TypeError("Promise.all accepts an array"));var e=Array.prototype.slice.call(a);if(0===e.length)return b([]);for(var f=e.length,g=0;g<e.length;g++)d(g,e[g])})}
1531
+ function Qa(a){return a&&"object"===typeof a&&a.constructor===A?a:new A(function(b){b(a)})}function Ra(a){return new A(function(b,c){c(a)})}function Sa(a){return new A(function(b,c){if(!a||"undefined"===typeof a.length)return c(new TypeError("Promise.race accepts an array"));for(var d=0,e=a.length;d<e;d++)Qa(a[d]).then(b,c)})}var Ka="function"===typeof setImmediate&&function(a){setImmediate(a)}||function(a){Fa(a,0)};/*
1543
1532
 
1544
1533
  Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
1545
- This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
1546
- The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
1547
- The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
1548
- Code distributed by Google as part of the polymer project is also
1549
- subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
1534
+ This code may only be used under the BSD style license found at
1535
+ http://polymer.github.io/LICENSE.txt The complete set of authors may be found at
1536
+ http://polymer.github.io/AUTHORS.txt The complete set of contributors may be
1537
+ found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as
1538
+ part of the polymer project is also subject to an additional IP rights grant
1539
+ found at http://polymer.github.io/PATENTS.txt
1550
1540
  */
1551
- if(!window.Promise){window.Promise=x;x.prototype.then=x.prototype.then;x.all=Ta;x.race=Wa;x.resolve=Ua;x.reject=Va;var Xa=document.createTextNode(""),Ya=[];(new MutationObserver(function(){for(var a=Ya.length,b=0;b<a;b++)Ya[b]();Ya.splice(0,a)})).observe(Xa,{characterData:!0});Na=function(a){Ya.push(a);Xa.textContent=0<Xa.textContent.length?"":"a"}};/*
1541
+ if(!window.Promise){window.Promise=A;A.prototype.then=A.prototype.then;A.all=Pa;A.race=Sa;A.resolve=Qa;A.reject=Ra;var Ta=document.createTextNode(""),Va=[];(new MutationObserver(function(){for(var a=Va.length,b=0;b<a;b++)Va[b]();Va.splice(0,a)})).observe(Ta,{characterData:!0});Ka=function(a){Va.push(a);Ta.textContent=0<Ta.textContent.length?"":"a"}};/*
1552
1542
  Copyright (C) 2015 by WebReflection
1553
1543
 
1554
1544
  Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -1570,34 +1560,87 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
1570
1560
  THE SOFTWARE.
1571
1561
 
1572
1562
  */
1573
- (function(a,b){if(!(b in a)){var c=typeof global===typeof c?window:global,d=0,e=""+Math.random(),f="__\u0001symbol@@"+e,g=a.getOwnPropertyNames,h=a.getOwnPropertyDescriptor,k=a.create,l=a.keys,m=a.freeze||a,q=a.defineProperty,H=a.defineProperties,E=h(a,"getOwnPropertyNames"),r=a.prototype,F=r.hasOwnProperty,C=r.propertyIsEnumerable,M=r.toString,y=function(u,G,J){F.call(u,f)||q(u,f,{enumerable:!1,configurable:!1,writable:!1,value:{}});u[f]["@@"+G]=J},W=function(u,G){var J=k(u);g(G).forEach(function(p){ta.call(G,
1574
- p)&&Qa(J,p,G[p])});return J},v=function(){},sa=function(u){return u!=f&&!F.call(ka,u)},ea=function(u){return u!=f&&F.call(ka,u)},ta=function(u){var G=""+u;return ea(G)?F.call(this,G)&&this[f]["@@"+G]:C.call(this,u)},n=function(u){q(r,u,{enumerable:!1,configurable:!0,get:v,set:function(G){ua(this,u,{enumerable:!1,configurable:!0,writable:!0,value:G});y(this,u,!0)}});return m(ka[u]=q(a(u),"constructor",Xb))},I=function(u){if(this&&this!==c)throw new TypeError("Symbol is not a constructor");return n("__\u0001symbol:".concat(u||
1575
- "",e,++d))},ka=k(null),Xb={value:I},cb=function(u){return ka[u]},Qa=function(u,G,J){var p=""+G;if(ea(p)){G=ua;if(J.enumerable){var t=k(J);t.enumerable=!1}else t=J;G(u,p,t);y(u,p,!!J.enumerable)}else q(u,G,J);return u},db=function(u){return g(u).filter(ea).map(cb)};E.value=Qa;q(a,"defineProperty",E);E.value=db;q(a,b,E);E.value=function(u){return g(u).filter(sa)};q(a,"getOwnPropertyNames",E);E.value=function(u,G){var J=db(G);J.length?l(G).concat(J).forEach(function(p){ta.call(G,p)&&Qa(u,p,G[p])}):H(u,
1576
- G);return u};q(a,"defineProperties",E);E.value=ta;q(r,"propertyIsEnumerable",E);E.value=I;q(c,"Symbol",E);E.value=function(u){u="__\u0001symbol:".concat("__\u0001symbol:",u,e);return u in r?ka[u]:n(u)};q(I,"for",E);E.value=function(u){if(sa(u))throw new TypeError(u+" is not a symbol");return F.call(ka,u)?u.slice(20,-e.length):void 0};q(I,"keyFor",E);E.value=function(u,G){var J=h(u,G);J&&ea(G)&&(J.enumerable=ta.call(u,G));return J};q(a,"getOwnPropertyDescriptor",E);E.value=function(u,G){return 1===
1577
- arguments.length?k(u):W(u,G)};q(a,"create",E);E.value=function(){var u=M.call(this);return"[object String]"===u&&ea(this)?"[object Symbol]":u};q(r,"toString",E);try{var ua=k(q({},"__\u0001symbol:",{get:function(){return q(this,"__\u0001symbol:",{value:!1})["__\u0001symbol:"]}}))["__\u0001symbol:"]||q}catch(u){ua=function(G,J,p){var t=h(r,J);delete r[J];q(G,J,p);q(r,J,t)}}}})(Object,"getOwnPropertySymbols");
1578
- (function(a){var b=a.defineProperty,c=a.prototype,d=c.toString,e;"iterator match replace search split hasInstance isConcatSpreadable unscopables species toPrimitive toStringTag".split(" ").forEach(function(f){if(!(f in Symbol))switch(b(Symbol,f,{value:Symbol(f)}),f){case "toStringTag":e=a.getOwnPropertyDescriptor(c,"toString"),e.value=function(){var g=d.call(this),h=this[Symbol.toStringTag];return"undefined"===typeof h?g:"[object "+h+"]"},b(c,"toString",e)}})})(Object,Symbol);
1563
+ (function(a,b){if(!(b in a)){var c=typeof global===typeof c?window:global,d=0,e=String(Math.random()),f="__\u0001symbol@@"+e,g=a.getOwnPropertyNames,h=a.getOwnPropertyDescriptor,k=a.create,l=a.keys,m=a.freeze||a,q=a.defineProperty,H=a.defineProperties,C=h(a,"getOwnPropertyNames"),t=a.prototype,F=t.hasOwnProperty,E=t.propertyIsEnumerable,M=t.toString,y=function(I,u,G){F.call(I,f)||q(I,f,{enumerable:!1,configurable:!1,writable:!1,value:{}});I[f]["@@"+u]=G},W=function(I,u){var G=k(I);g(u).forEach(function(p){sa.call(u,
1564
+ p)&&Ua(G,p,u[p])});return G},w=function(){},ta=function(I){return I!=f&&!F.call(fa,I)},ha=function(I){return I!=f&&F.call(fa,I)},sa=function(I){var u=String(I);return ha(u)?F.call(this,u)&&!!this[f]&&this[f]["@@"+u]:E.call(this,I)},n=function(I){q(t,I,{enumerable:!1,configurable:!0,get:w,set:function(u){wa(this,I,{enumerable:!1,configurable:!0,writable:!0,value:u});y(this,I,!0)}});fa[I]=q(a(I),"constructor",gc);return m(fa[I])},J=function G(u){if(this instanceof G)throw new TypeError("Symbol is not a constructor");
1565
+ return n("__\u0001symbol:".concat(u||"",e,++d))},fa=k(null),gc={value:J},fb=function(u){return fa[u]},Ua=function(u,G,p){var r=String(G);if(ha(r)){G=wa;if(p.enumerable){var B=k(p);B.enumerable=!1}else B=p;G(u,r,B);y(u,r,!!p.enumerable)}else q(u,G,p);return u},gb=function(u){return g(u).filter(ha).map(fb)};C.value=Ua;q(a,"defineProperty",C);C.value=gb;q(a,b,C);C.value=function(u){return g(u).filter(ta)};q(a,"getOwnPropertyNames",C);C.value=function(u,G){var p=gb(G);p.length?l(G).concat(p).forEach(function(r){sa.call(G,
1566
+ r)&&Ua(u,r,G[r])}):H(u,G);return u};q(a,"defineProperties",C);C.value=sa;q(t,"propertyIsEnumerable",C);C.value=J;q(c,"Symbol",C);C.value=function(u){u="__\u0001symbol:".concat("__\u0001symbol:",u,e);return u in t?fa[u]:n(u)};q(J,"for",C);C.value=function(u){if(ta(u))throw new TypeError(u+" is not a symbol");if(F.call(fa,u)&&(u=u.slice(10),"__\u0001symbol:"===u.slice(0,10)&&(u=u.slice(10),u!==e)))return u=u.slice(0,u.length-e.length),0<u.length?u:void 0};q(J,"keyFor",C);C.value=function(u,G){var p=
1567
+ h(u,G);p&&ha(G)&&(p.enumerable=sa.call(u,G));return p};q(a,"getOwnPropertyDescriptor",C);C.value=function(u,G){return 1===arguments.length||"undefined"===typeof G?k(u):W(u,G)};q(a,"create",C);C.value=function(){var u=M.call(this);return"[object String]"===u&&ha(this)?"[object Symbol]":u};q(t,"toString",C);try{if(!0===k(q({},"__\u0001symbol:",{get:function(){return q(this,"__\u0001symbol:",{value:!0})["__\u0001symbol:"]}}))["__\u0001symbol:"])var wa=q;else throw"IE11";}catch(u){wa=function(G,p,r){var B=
1568
+ h(t,p);delete t[p];q(G,p,r);q(t,p,B)}}}})(Object,"getOwnPropertySymbols");
1569
+ (function(a,b){var c=a.defineProperty,d=a.prototype,e=d.toString,f;"iterator match replace search split hasInstance isConcatSpreadable unscopables species toPrimitive toStringTag".split(" ").forEach(function(g){g in b||(c(b,g,{value:b(g)}),"toStringTag"===g&&(f=a.getOwnPropertyDescriptor(d,"toString"),f.value=function(){var h=e.call(this),k=null==this?this:this[b.toStringTag];return null==k?h:"[object "+k+"]"},c(d,"toString",f)))})})(Object,Symbol);
1579
1570
  (function(a,b,c){function d(){return this}b[a]||(b[a]=function(){var e=0,f=this,g={next:function(){var h=f.length<=e;return h?{done:h}:{done:h,value:f[e++]}}};g[a]=d;return g});c[a]||(c[a]=function(){var e=String.fromCodePoint,f=this,g=0,h=f.length,k={next:function(){var l=h<=g,m=l?"":e(f.codePointAt(g));g+=m.length;return l?{done:l}:{done:l,value:m}}};k[a]=d;return k})})(Symbol.iterator,Array.prototype,String.prototype);/*
1580
1571
 
1581
1572
  Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
1573
+ This code may only be used under the BSD style license found at
1574
+ http://polymer.github.io/LICENSE.txt The complete set of authors may be found at
1575
+ http://polymer.github.io/AUTHORS.txt The complete set of contributors may be
1576
+ found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as
1577
+ part of the polymer project is also subject to an additional IP rights grant
1578
+ found at http://polymer.github.io/PATENTS.txt
1579
+ */
1580
+ var Wa=Object.prototype.toString;Object.prototype.toString=function(){return void 0===this?"[object Undefined]":null===this?"[object Null]":Wa.call(this)};Object.keys=function(a){return Object.getOwnPropertyNames(a).filter(function(b){return(b=Object.getOwnPropertyDescriptor(a,b))&&b.enumerable})};
1581
+ String.prototype[Symbol.iterator]&&String.prototype.codePointAt||(String.prototype[Symbol.iterator]=function Xa(){var b,c=this;return Ea(Xa,function(d){1==d.g&&(b=0);if(3!=d.g)return b<c.length?d=ya(d,c[b]):(d.g=0,d=void 0),d;b++;d.g=2})});Set.prototype[Symbol.iterator]||(Set.prototype[Symbol.iterator]=function Ya(){var b,c=this,d;return Ea(Ya,function(e){1==e.g&&(b=[],c.forEach(function(f){b.push(f)}),d=0);if(3!=e.g)return d<b.length?e=ya(e,b[d]):(e.g=0,e=void 0),e;d++;e.g=2})});
1582
+ Map.prototype[Symbol.iterator]||(Map.prototype[Symbol.iterator]=function Za(){var b,c=this,d;return Ea(Za,function(e){1==e.g&&(b=[],c.forEach(function(f,g){b.push([g,f])}),d=0);if(3!=e.g)return d<b.length?e=ya(e,b[d]):(e.g=0,e=void 0),e;d++;e.g=2})});/*
1583
+
1584
+ Copyright (c) 2020 The Polymer Project Authors. All rights reserved.
1582
1585
  This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
1583
1586
  The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
1584
1587
  The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
1585
1588
  Code distributed by Google as part of the polymer project is also
1586
1589
  subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
1587
1590
  */
1588
- var Za=Object.prototype.toString;Object.prototype.toString=function(){return void 0===this?"[object Undefined]":null===this?"[object Null]":Za.call(this)};Object.keys=function(a){return Object.getOwnPropertyNames(a).filter(function(b){return(b=Object.getOwnPropertyDescriptor(a,b))&&b.enumerable})};var $a=window.Symbol.iterator;
1589
- String.prototype[$a]&&String.prototype.codePointAt||(String.prototype[$a]=function ab(){var b,c=this;return Ha(ab,function(d){1==d.a&&(b=0);if(3!=d.a)return b<c.length?d=Ba(d,c[b]):(d.a=0,d=void 0),d;b++;d.a=2})});Set.prototype[$a]||(Set.prototype[$a]=function fb(){var b,c=this,d;return Ha(fb,function(e){1==e.a&&(b=[],c.forEach(function(f){b.push(f)}),d=0);if(3!=e.a)return d<b.length?e=Ba(e,b[d]):(e.a=0,e=void 0),e;d++;e.a=2})});
1590
- Map.prototype[$a]||(Map.prototype[$a]=function gb(){var b,c=this,d;return Ha(gb,function(e){1==e.a&&(b=[],c.forEach(function(f,g){b.push([g,f])}),d=0);if(3!=e.a)return d<b.length?e=Ba(e,b[d]):(e.a=0,e=void 0),e;d++;e.a=2})});/*
1591
+ var $a=document.createEvent("Event");$a.initEvent("foo",!0,!0);$a.preventDefault();if(!$a.defaultPrevented){var ab=Event.prototype.preventDefault;Event.prototype.preventDefault=function(){this.cancelable&&(ab.call(this),Object.defineProperty(this,"defaultPrevented",{get:function(){return!0},configurable:!0}))}}var bb=/Trident/.test(navigator.userAgent);
1592
+ if(!window.Event||bb&&"function"!==typeof window.Event){var cb=window.Event;window.Event=function(a,b){b=b||{};var c=document.createEvent("Event");c.initEvent(a,!!b.bubbles,!!b.cancelable);return c};if(cb){for(var db in cb)window.Event[db]=cb[db];window.Event.prototype=cb.prototype}}
1593
+ if(!window.CustomEvent||bb&&"function"!==typeof window.CustomEvent)window.CustomEvent=function(a,b){b=b||{};var c=document.createEvent("CustomEvent");c.initCustomEvent(a,!!b.bubbles,!!b.cancelable,b.detail);return c},window.CustomEvent.prototype=window.Event.prototype;
1594
+ if(!window.MouseEvent||bb&&"function"!==typeof window.MouseEvent){var eb=window.MouseEvent;window.MouseEvent=function(a,b){b=b||{};var c=document.createEvent("MouseEvent");c.initMouseEvent(a,!!b.bubbles,!!b.cancelable,b.view||window,b.detail,b.screenX,b.screenY,b.clientX,b.clientY,b.ctrlKey,b.altKey,b.shiftKey,b.metaKey,b.button,b.relatedTarget);return c};if(eb)for(var hb in eb)window.MouseEvent[hb]=eb[hb];window.MouseEvent.prototype=eb.prototype};Object.getOwnPropertyDescriptor(Node.prototype,"baseURI")||Object.defineProperty(Node.prototype,"baseURI",{get:function(){var a=(this.ownerDocument||this).querySelector("base[href]");return a&&a.href||window.location.href},configurable:!0,enumerable:!0});/*
1595
+
1596
+ Copyright (c) 2020 The Polymer Project Authors. All rights reserved.
1597
+ This code may only be used under the BSD style license found at
1598
+ http://polymer.github.io/LICENSE.txt The complete set of authors may be found at
1599
+ http://polymer.github.io/AUTHORS.txt The complete set of contributors may be
1600
+ found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as
1601
+ part of the polymer project is also subject to an additional IP rights grant
1602
+ found at http://polymer.github.io/PATENTS.txt
1603
+ */
1604
+ var ib,jb,kb=Element.prototype,nb=null!==(ib=Object.getOwnPropertyDescriptor(kb,"attributes"))&&void 0!==ib?ib:Object.getOwnPropertyDescriptor(Node.prototype,"attributes"),ob=null!==(jb=null===nb||void 0===nb?void 0:nb.get)&&void 0!==jb?jb:function(){return this.attributes},pb=Array.prototype.map;kb.hasOwnProperty("getAttributeNames")||(kb.getAttributeNames=function(){return pb.call(ob.call(this),function(a){return a.name})});var qb,rb=Element.prototype;rb.hasOwnProperty("matches")||(rb.matches=null!==(qb=rb.webkitMatchesSelector)&&void 0!==qb?qb:rb.msMatchesSelector);var sb=Node.prototype.appendChild;function tb(a){a=a.prototype;a.hasOwnProperty("append")||Object.defineProperty(a,"append",{configurable:!0,enumerable:!0,writable:!0,value:function(b){for(var c=[],d=0;d<arguments.length;++d)c[d]=arguments[d];c=ka(c);for(d=c.next();!d.done;d=c.next())d=d.value,sb.call(this,"string"===typeof d?document.createTextNode(d):d)}})}tb(Document);tb(DocumentFragment);tb(Element);var ub,vb,wb=Node.prototype.insertBefore,xb=null!==(vb=null===(ub=Object.getOwnPropertyDescriptor(Node.prototype,"firstChild"))||void 0===ub?void 0:ub.get)&&void 0!==vb?vb:function(){return this.firstChild};
1605
+ function yb(a){a=a.prototype;a.hasOwnProperty("prepend")||Object.defineProperty(a,"prepend",{configurable:!0,enumerable:!0,writable:!0,value:function(b){for(var c=[],d=0;d<arguments.length;++d)c[d]=arguments[d];d=xb.call(this);c=ka(c);for(var e=c.next();!e.done;e=c.next())e=e.value,wb.call(this,"string"===typeof e?document.createTextNode(e):e,d)}})}yb(Document);yb(DocumentFragment);yb(Element);var zb,Ab,Bb=Node.prototype.appendChild,Cb=Node.prototype.removeChild,Db=null!==(Ab=null===(zb=Object.getOwnPropertyDescriptor(Node.prototype,"firstChild"))||void 0===zb?void 0:zb.get)&&void 0!==Ab?Ab:function(){return this.firstChild};
1606
+ function Eb(a){a=a.prototype;a.hasOwnProperty("replaceChildren")||Object.defineProperty(a,"replaceChildren",{configurable:!0,enumerable:!0,writable:!0,value:function(b){for(var c=[],d=0;d<arguments.length;++d)c[d]=arguments[d];for(;null!==(d=Db.call(this));)Cb.call(this,d);c=ka(c);for(d=c.next();!d.done;d=c.next())d=d.value,Bb.call(this,"string"===typeof d?document.createTextNode(d):d)}})}Eb(Document);Eb(DocumentFragment);Eb(Element);var Fb,Gb,Hb,Ib,Jb=Node.prototype.insertBefore,Kb=null!==(Gb=null===(Fb=Object.getOwnPropertyDescriptor(Node.prototype,"parentNode"))||void 0===Fb?void 0:Fb.get)&&void 0!==Gb?Gb:function(){return this.parentNode},Lb=null!==(Ib=null===(Hb=Object.getOwnPropertyDescriptor(Node.prototype,"nextSibling"))||void 0===Hb?void 0:Hb.get)&&void 0!==Ib?Ib:function(){return this.nextSibling};
1607
+ function Mb(a){a=a.prototype;a.hasOwnProperty("after")||Object.defineProperty(a,"after",{configurable:!0,enumerable:!0,writable:!0,value:function(b){for(var c=[],d=0;d<arguments.length;++d)c[d]=arguments[d];d=Kb.call(this);if(null!==d){var e=Lb.call(this);c=ka(c);for(var f=c.next();!f.done;f=c.next())f=f.value,Jb.call(d,"string"===typeof f?document.createTextNode(f):f,e)}}})}Mb(CharacterData);Mb(Element);var Nb,Ob,Pb=Node.prototype.insertBefore,Qb=null!==(Ob=null===(Nb=Object.getOwnPropertyDescriptor(Node.prototype,"parentNode"))||void 0===Nb?void 0:Nb.get)&&void 0!==Ob?Ob:function(){return this.parentNode};
1608
+ function Rb(a){a=a.prototype;a.hasOwnProperty("before")||Object.defineProperty(a,"before",{configurable:!0,enumerable:!0,writable:!0,value:function(b){for(var c=[],d=0;d<arguments.length;++d)c[d]=arguments[d];d=Qb.call(this);if(null!==d){c=ka(c);for(var e=c.next();!e.done;e=c.next())e=e.value,Pb.call(d,"string"===typeof e?document.createTextNode(e):e,this)}}})}Rb(CharacterData);Rb(Element);var Sb,Tb,Ub=Node.prototype.removeChild,Vb=null!==(Tb=null===(Sb=Object.getOwnPropertyDescriptor(Node.prototype,"parentNode"))||void 0===Sb?void 0:Sb.get)&&void 0!==Tb?Tb:function(){return this.parentNode};function Wb(a){a=a.prototype;a.hasOwnProperty("remove")||Object.defineProperty(a,"remove",{configurable:!0,enumerable:!0,writable:!0,value:function(){var b=Vb.call(this);b&&Ub.call(b,this)}})}Wb(CharacterData);Wb(Element);var Xb,Yb,Zb=Node.prototype.insertBefore,$b=Node.prototype.removeChild,ac=null!==(Yb=null===(Xb=Object.getOwnPropertyDescriptor(Node.prototype,"parentNode"))||void 0===Xb?void 0:Xb.get)&&void 0!==Yb?Yb:function(){return this.parentNode};
1609
+ function bc(a){a=a.prototype;a.hasOwnProperty("replaceWith")||Object.defineProperty(a,"replaceWith",{configurable:!0,enumerable:!0,writable:!0,value:function(b){for(var c=[],d=0;d<arguments.length;++d)c[d]=arguments[d];d=ac.call(this);if(null!==d){c=ka(c);for(var e=c.next();!e.done;e=c.next())e=e.value,Zb.call(d,"string"===typeof e?document.createTextNode(e):e,this);$b.call(d,this)}}})}bc(CharacterData);bc(Element);var cc=window.Element.prototype,dc=window.HTMLElement.prototype,ec=window.SVGElement.prototype;!dc.hasOwnProperty("classList")||cc.hasOwnProperty("classList")||ec.hasOwnProperty("classList")||Object.defineProperty(cc,"classList",Object.getOwnPropertyDescriptor(dc,"classList"));/*
1591
1610
 
1592
1611
  Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
1612
+ This code may only be used under the BSD style license found at
1613
+ http://polymer.github.io/LICENSE.txt The complete set of authors may be found
1614
+ at http://polymer.github.io/AUTHORS.txt The complete set of contributors may
1615
+ be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by
1616
+ Google as part of the polymer project is also subject to an additional IP
1617
+ rights grant found at http://polymer.github.io/PATENTS.txt
1618
+ */
1619
+ var fc=document.createElement("style");fc.textContent="body {transition: opacity ease-in 0.2s; } \nbody[unresolved] {opacity: 0; display: block; overflow: hidden; position: relative; } \n";var hc=document.querySelector("head");hc.insertBefore(fc,hc.firstChild);var ic=window;ic.WebComponents=ic.WebComponents||{flags:{}};var jc=document.querySelector('script[src*="webcomponents-bundle"]'),kc=/wc-(.+)/,lc={};if(!lc.noOpts){location.search.slice(1).split("&").forEach(function(a){a=a.split("=");var b;a[0]&&(b=a[0].match(kc))&&(lc[b[1]]=a[1]||!0)});if(jc)for(var mc=0,nc=void 0;nc=jc.attributes[mc];mc++)"src"!==nc.name&&(lc[nc.name]=nc.value||!0);var oc={};lc.log&&lc.log.split&&lc.log.split(",").forEach(function(a){oc[a]=!0});lc.log=oc}
1620
+ ic.WebComponents.flags=lc;var pc=lc.shadydom;if(pc){ic.ShadyDOM=ic.ShadyDOM||{};ic.ShadyDOM.force=pc;var qc=lc.noPatch;ic.ShadyDOM.noPatch="true"===qc?!0:qc}var rc=lc.register||lc.ce;rc&&window.customElements&&(ic.customElements.forcePolyfill=rc);/*
1621
+
1622
+ Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
1593
1623
  This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
1594
1624
  The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
1595
1625
  The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
1596
1626
  Code distributed by Google as part of the polymer project is also
1597
1627
  subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
1598
1628
  */
1599
- window.WebComponents=window.WebComponents||{flags:{}};var hb=document.querySelector('script[src*="webcomponents-bundle"]'),ib=/wc-(.+)/,A={};if(!A.noOpts){location.search.slice(1).split("&").forEach(function(a){a=a.split("=");var b;a[0]&&(b=a[0].match(ib))&&(A[b[1]]=a[1]||!0)});if(hb)for(var jb=0,kb=void 0;kb=hb.attributes[jb];jb++)"src"!==kb.name&&(A[kb.name]=kb.value||!0);if(A.log&&A.log.split){var lb=A.log.split(",");A.log={};lb.forEach(function(a){A.log[a]=!0})}else A.log={}}
1600
- window.WebComponents.flags=A;var mb=A.shadydom;if(mb){window.ShadyDOM=window.ShadyDOM||{};window.ShadyDOM.force=mb;var nb=A.noPatch;window.ShadyDOM.noPatch="true"===nb?!0:nb}var ob=A.register||A.ce;ob&&window.customElements&&(window.customElements.forcePolyfill=ob);/*
1629
+ (function(){function a(){}function b(p,r){if(!p.childNodes.length)return[];switch(p.nodeType){case Node.DOCUMENT_NODE:return F.call(p,r);case Node.DOCUMENT_FRAGMENT_NODE:return E.call(p,r);default:return t.call(p,r)}}var c="undefined"===typeof HTMLTemplateElement,d=!(document.createDocumentFragment().cloneNode()instanceof DocumentFragment),e=!1;/Trident/.test(navigator.userAgent)&&function(){function p(z,R){if(z instanceof DocumentFragment)for(var lb;lb=z.firstChild;)B.call(this,lb,R);else B.call(this,
1630
+ z,R);return z}e=!0;var r=Node.prototype.cloneNode;Node.prototype.cloneNode=function(z){z=r.call(this,z);this instanceof DocumentFragment&&(z.__proto__=DocumentFragment.prototype);return z};DocumentFragment.prototype.querySelectorAll=HTMLElement.prototype.querySelectorAll;DocumentFragment.prototype.querySelector=HTMLElement.prototype.querySelector;Object.defineProperties(DocumentFragment.prototype,{nodeType:{get:function(){return Node.DOCUMENT_FRAGMENT_NODE},configurable:!0},localName:{get:function(){},
1631
+ configurable:!0},nodeName:{get:function(){return"#document-fragment"},configurable:!0}});var B=Node.prototype.insertBefore;Node.prototype.insertBefore=p;var K=Node.prototype.appendChild;Node.prototype.appendChild=function(z){z instanceof DocumentFragment?p.call(this,z,null):K.call(this,z);return z};var aa=Node.prototype.removeChild,la=Node.prototype.replaceChild;Node.prototype.replaceChild=function(z,R){z instanceof DocumentFragment?(p.call(this,z,R),aa.call(this,R)):la.call(this,z,R);return R};Document.prototype.createDocumentFragment=
1632
+ function(){var z=this.createElement("df");z.__proto__=DocumentFragment.prototype;return z};var va=Document.prototype.importNode;Document.prototype.importNode=function(z,R){R=va.call(this,z,R||!1);z instanceof DocumentFragment&&(R.__proto__=DocumentFragment.prototype);return R}}();var f=Node.prototype.cloneNode,g=Document.prototype.createElement,h=Document.prototype.importNode,k=Node.prototype.removeChild,l=Node.prototype.appendChild,m=Node.prototype.replaceChild,q=DOMParser.prototype.parseFromString,
1633
+ H=Object.getOwnPropertyDescriptor(window.HTMLElement.prototype,"innerHTML")||{get:function(){return this.innerHTML},set:function(p){this.innerHTML=p}},C=Object.getOwnPropertyDescriptor(window.Node.prototype,"childNodes")||{get:function(){return this.childNodes}},t=Element.prototype.querySelectorAll,F=Document.prototype.querySelectorAll,E=DocumentFragment.prototype.querySelectorAll,M=function(){if(!c){var p=document.createElement("template"),r=document.createElement("template");r.content.appendChild(document.createElement("div"));
1634
+ p.content.appendChild(r);p=p.cloneNode(!0);return 0===p.content.childNodes.length||0===p.content.firstChild.content.childNodes.length||d}}();if(c){var y=document.implementation.createHTMLDocument("template"),W=!0,w=document.createElement("style");w.textContent="template{display:none;}";var ta=document.head;ta.insertBefore(w,ta.firstElementChild);a.prototype=Object.create(HTMLElement.prototype);var ha=!document.createElement("div").hasOwnProperty("innerHTML");a.Z=function(p){if(!p.content&&p.namespaceURI===
1635
+ document.documentElement.namespaceURI){p.content=y.createDocumentFragment();for(var r;r=p.firstChild;)l.call(p.content,r);if(ha)p.__proto__=a.prototype;else if(p.cloneNode=function(B){return a.sa(this,B)},W)try{n(p),J(p)}catch(B){W=!1}a.bootstrap(p.content)}};var sa={option:["select"],thead:["table"],col:["colgroup","table"],tr:["tbody","table"],th:["tr","tbody","table"],td:["tr","tbody","table"]},n=function(p){Object.defineProperty(p,"innerHTML",{get:function(){return wa(this)},set:function(r){var B=
1636
+ sa[(/<([a-z][^/\0>\x20\t\r\n\f]+)/i.exec(r)||["",""])[1].toLowerCase()];if(B)for(var K=0;K<B.length;K++)r="<"+B[K]+">"+r+"</"+B[K]+">";y.body.innerHTML=r;for(a.bootstrap(y);this.content.firstChild;)k.call(this.content,this.content.firstChild);r=y.body;if(B)for(K=0;K<B.length;K++)r=r.lastChild;for(;r.firstChild;)l.call(this.content,r.firstChild)},configurable:!0})},J=function(p){Object.defineProperty(p,"outerHTML",{get:function(){return"<template>"+this.innerHTML+"</template>"},set:function(r){if(this.parentNode){y.body.innerHTML=
1637
+ r;for(r=this.ownerDocument.createDocumentFragment();y.body.firstChild;)l.call(r,y.body.firstChild);m.call(this.parentNode,r,this)}else throw Error("Failed to set the 'outerHTML' property on 'Element': This element has no parent node.");},configurable:!0})};n(a.prototype);J(a.prototype);a.bootstrap=function(p){p=b(p,"template");for(var r=0,B=p.length,K;r<B&&(K=p[r]);r++)a.Z(K)};document.addEventListener("DOMContentLoaded",function(){a.bootstrap(document)});Document.prototype.createElement=function(){var p=
1638
+ g.apply(this,arguments);"template"===p.localName&&a.Z(p);return p};DOMParser.prototype.parseFromString=function(){var p=q.apply(this,arguments);a.bootstrap(p);return p};Object.defineProperty(HTMLElement.prototype,"innerHTML",{get:function(){return wa(this)},set:function(p){H.set.call(this,p);a.bootstrap(this)},configurable:!0,enumerable:!0});var fa=/[&\u00A0"]/g,gc=/[&\u00A0<>]/g,fb=function(p){switch(p){case "&":return"&amp;";case "<":return"&lt;";case ">":return"&gt;";case '"':return"&quot;";case "\u00a0":return"&nbsp;"}};
1639
+ w=function(p){for(var r={},B=0;B<p.length;B++)r[p[B]]=!0;return r};var Ua=w("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")),gb=w("style script xmp iframe noembed noframes plaintext noscript".split(" ")),wa=function(p,r){"template"===p.localName&&(p=p.content);for(var B="",K=r?r(p):C.get.call(p),aa=0,la=K.length,va;aa<la&&(va=K[aa]);aa++){a:{var z=va;var R=p;var lb=r;switch(z.nodeType){case Node.ELEMENT_NODE:for(var Fc=z.localName,mb="<"+Fc,Bh=z.attributes,
1640
+ oe=0;R=Bh[oe];oe++)mb+=" "+R.name+'="'+R.value.replace(fa,fb)+'"';mb+=">";z=Ua[Fc]?mb:mb+wa(z,lb)+"</"+Fc+">";break a;case Node.TEXT_NODE:z=z.data;z=R&&gb[R.localName]?z:z.replace(gc,fb);break a;case Node.COMMENT_NODE:z="\x3c!--"+z.data+"--\x3e";break a;default:throw window.console.error(z),Error("not implemented");}}B+=z}return B}}if(c||M){a.sa=function(p,r){var B=f.call(p,!1);this.Z&&this.Z(B);r&&(l.call(B.content,f.call(p.content,!0)),I(B.content,p.content));return B};var I=function(p,r){if(r.querySelectorAll&&
1641
+ (r=b(r,"template"),0!==r.length)){p=b(p,"template");for(var B=0,K=p.length,aa,la;B<K;B++)la=r[B],aa=p[B],a&&a.Z&&a.Z(la),m.call(aa.parentNode,u.call(la,!0),aa)}},u=Node.prototype.cloneNode=function(p){if(!e&&d&&this instanceof DocumentFragment)if(p)var r=G.call(this.ownerDocument,this,!0);else return this.ownerDocument.createDocumentFragment();else this.nodeType===Node.ELEMENT_NODE&&"template"===this.localName&&this.namespaceURI==document.documentElement.namespaceURI?r=a.sa(this,p):r=f.call(this,
1642
+ p);p&&I(r,this);return r},G=Document.prototype.importNode=function(p,r){r=r||!1;if("template"===p.localName)return a.sa(p,r);var B=h.call(this,p,r);if(r){I(B,p);p=b(B,'script:not([type]),script[type="application/javascript"],script[type="text/javascript"]');for(var K,aa=0;aa<p.length;aa++){K=p[aa];r=g.call(document,"script");r.textContent=K.textContent;for(var la=K.attributes,va=0,z;va<la.length;va++)z=la[va],r.setAttribute(z.name,z.value);m.call(K.parentNode,r,K)}}return B}}c&&(window.HTMLTemplateElement=
1643
+ a)})();/*
1601
1644
 
1602
1645
  Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
1603
1646
  This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
@@ -1606,217 +1649,223 @@ The complete set of contributors may be found at http://polymer.github.io/CONTRI
1606
1649
  Code distributed by Google as part of the polymer project is also
1607
1650
  subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
1608
1651
  */
1609
- function pb(){}pb.prototype.toJSON=function(){return{}};function B(a){a.__shady||(a.__shady=new pb);return a.__shady}function L(a){return a&&a.__shady};var N=window.ShadyDOM||{};N.Ua=!(!Element.prototype.attachShadow||!Node.prototype.getRootNode);var qb=Object.getOwnPropertyDescriptor(Node.prototype,"firstChild");N.B=!!(qb&&qb.configurable&&qb.get);N.sa=N.force||!N.Ua;N.D=N.noPatch||!1;N.la=N.preferPerformance;N.ua="on-demand"===N.D;N.Ia=navigator.userAgent.match("Trident");function rb(a){return(a=L(a))&&void 0!==a.firstChild}function O(a){return a instanceof ShadowRoot}function sb(a){return(a=(a=L(a))&&a.root)&&tb(a)}
1610
- var ub=Element.prototype,vb=ub.matches||ub.matchesSelector||ub.mozMatchesSelector||ub.msMatchesSelector||ub.oMatchesSelector||ub.webkitMatchesSelector,wb=document.createTextNode(""),xb=0,yb=[];(new MutationObserver(function(){for(;yb.length;)try{yb.shift()()}catch(a){throw wb.textContent=xb++,a;}})).observe(wb,{characterData:!0});function zb(a){yb.push(a);wb.textContent=xb++}var Ab=!!document.contains;function Bb(a,b){for(;b;){if(b==a)return!0;b=b.__shady_parentNode}return!1}
1611
- function Cb(a){for(var b=a.length-1;0<=b;b--){var c=a[b],d=c.getAttribute("id")||c.getAttribute("name");d&&"length"!==d&&isNaN(d)&&(a[d]=c)}a.item=function(e){return a[e]};a.namedItem=function(e){if("length"!==e&&isNaN(e)&&a[e])return a[e];for(var f=ca(a),g=f.next();!g.done;g=f.next())if(g=g.value,(g.getAttribute("id")||g.getAttribute("name"))==e)return g;return null};return a}function Db(a){var b=[];for(a=a.__shady_native_firstChild;a;a=a.__shady_native_nextSibling)b.push(a);return b}
1612
- function Eb(a){var b=[];for(a=a.__shady_firstChild;a;a=a.__shady_nextSibling)b.push(a);return b}function Fb(a,b,c){c.configurable=!0;if(c.value)a[b]=c.value;else try{Object.defineProperty(a,b,c)}catch(d){}}function P(a,b,c,d){c=void 0===c?"":c;for(var e in b)d&&0<=d.indexOf(e)||Fb(a,c+e,b[e])}function Gb(a,b){for(var c in b)c in a&&Fb(a,c,b[c])}function Q(a){var b={};Object.getOwnPropertyNames(a).forEach(function(c){b[c]=Object.getOwnPropertyDescriptor(a,c)});return b}
1613
- function Hb(a,b){for(var c=Object.getOwnPropertyNames(b),d=0,e;d<c.length;d++)e=c[d],a[e]=b[e]};var Ib=[],Jb;function Kb(a){Jb||(Jb=!0,zb(Lb));Ib.push(a)}function Lb(){Jb=!1;for(var a=!!Ib.length;Ib.length;)Ib.shift()();return a}Lb.list=Ib;function Mb(){this.a=!1;this.addedNodes=[];this.removedNodes=[];this.ia=new Set}function Nb(a){a.a||(a.a=!0,zb(function(){a.flush()}))}Mb.prototype.flush=function(){if(this.a){this.a=!1;var a=this.takeRecords();a.length&&this.ia.forEach(function(b){b(a)})}};Mb.prototype.takeRecords=function(){if(this.addedNodes.length||this.removedNodes.length){var a=[{addedNodes:this.addedNodes,removedNodes:this.removedNodes}];this.addedNodes=[];this.removedNodes=[];return a}return[]};
1614
- function Ob(a,b){var c=B(a);c.Z||(c.Z=new Mb);c.Z.ia.add(b);var d=c.Z;return{Ma:b,S:d,Na:a,takeRecords:function(){return d.takeRecords()}}}function Pb(a){var b=a&&a.S;b&&(b.ia.delete(a.Ma),b.ia.size||(B(a.Na).Z=null))}
1615
- function Qb(a,b){var c=b.getRootNode();return a.map(function(d){var e=c===d.target.getRootNode();if(e&&d.addedNodes){if(e=[].slice.call(d.addedNodes).filter(function(f){return c===f.getRootNode()}),e.length)return d=Object.create(d),Object.defineProperty(d,"addedNodes",{value:e,configurable:!0}),d}else if(e)return d}).filter(function(d){return d})};var Rb=/[&\u00A0"]/g,Sb=/[&\u00A0<>]/g;function Tb(a){switch(a){case "&":return"&amp;";case "<":return"&lt;";case ">":return"&gt;";case '"':return"&quot;";case "\u00a0":return"&nbsp;"}}function Ub(a){for(var b={},c=0;c<a.length;c++)b[a[c]]=!0;return b}var Vb=Ub("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")),Wb=Ub("style script xmp iframe noembed noframes plaintext noscript".split(" "));
1616
- function Zb(a,b){"template"===a.localName&&(a=a.content);for(var c="",d=b?b(a):a.childNodes,e=0,f=d.length,g=void 0;e<f&&(g=d[e]);e++){a:{var h=g;var k=a,l=b;switch(h.nodeType){case Node.ELEMENT_NODE:k=h.localName;for(var m="<"+k,q=h.attributes,H=0,E;E=q[H];H++)m+=" "+E.name+'="'+E.value.replace(Rb,Tb)+'"';m+=">";h=Vb[k]?m:m+Zb(h,l)+"</"+k+">";break a;case Node.TEXT_NODE:h=h.data;h=k&&Wb[k.localName]?h:h.replace(Sb,Tb);break a;case Node.COMMENT_NODE:h="\x3c!--"+h.data+"--\x3e";break a;default:throw window.console.error(h),
1617
- Error("not implemented");}}c+=h}return c};var $b=N.B,ac={querySelector:function(a){return this.__shady_native_querySelector(a)},querySelectorAll:function(a){return this.__shady_native_querySelectorAll(a)}},bc={};function cc(a){bc[a]=function(b){return b["__shady_native_"+a]}}function dc(a,b){P(a,b,"__shady_native_");for(var c in b)cc(c)}function S(a,b){b=void 0===b?[]:b;for(var c=0;c<b.length;c++){var d=b[c],e=Object.getOwnPropertyDescriptor(a,d);e&&(Object.defineProperty(a,"__shady_native_"+d,e),e.value?ac[d]||(ac[d]=e.value):cc(d))}}
1618
- var ec=document.createTreeWalker(document,NodeFilter.SHOW_ALL,null,!1),fc=document.createTreeWalker(document,NodeFilter.SHOW_ELEMENT,null,!1),gc=document.implementation.createHTMLDocument("inert");function hc(a){for(var b;b=a.__shady_native_firstChild;)a.__shady_native_removeChild(b)}var ic=["firstElementChild","lastElementChild","children","childElementCount"],jc=["querySelector","querySelectorAll"];
1619
- function kc(){var a=["dispatchEvent","addEventListener","removeEventListener"];window.EventTarget?S(window.EventTarget.prototype,a):(S(Node.prototype,a),S(Window.prototype,a));$b?S(Node.prototype,"parentNode firstChild lastChild previousSibling nextSibling childNodes parentElement textContent".split(" ")):dc(Node.prototype,{parentNode:{get:function(){ec.currentNode=this;return ec.parentNode()}},firstChild:{get:function(){ec.currentNode=this;return ec.firstChild()}},lastChild:{get:function(){ec.currentNode=
1620
- this;return ec.lastChild()}},previousSibling:{get:function(){ec.currentNode=this;return ec.previousSibling()}},nextSibling:{get:function(){ec.currentNode=this;return ec.nextSibling()}},childNodes:{get:function(){var b=[];ec.currentNode=this;for(var c=ec.firstChild();c;)b.push(c),c=ec.nextSibling();return b}},parentElement:{get:function(){fc.currentNode=this;return fc.parentNode()}},textContent:{get:function(){switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:for(var b=
1621
- document.createTreeWalker(this,NodeFilter.SHOW_TEXT,null,!1),c="",d;d=b.nextNode();)c+=d.nodeValue;return c;default:return this.nodeValue}},set:function(b){if("undefined"===typeof b||null===b)b="";switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:hc(this);(0<b.length||this.nodeType===Node.ELEMENT_NODE)&&this.__shady_native_insertBefore(document.createTextNode(b),void 0);break;default:this.nodeValue=b}}}});S(Node.prototype,"appendChild insertBefore removeChild replaceChild cloneNode contains".split(" "));
1622
- S(HTMLElement.prototype,["parentElement","contains"]);a={firstElementChild:{get:function(){fc.currentNode=this;return fc.firstChild()}},lastElementChild:{get:function(){fc.currentNode=this;return fc.lastChild()}},children:{get:function(){var b=[];fc.currentNode=this;for(var c=fc.firstChild();c;)b.push(c),c=fc.nextSibling();return Cb(b)}},childElementCount:{get:function(){return this.children?this.children.length:0}}};$b?(S(Element.prototype,ic),S(Element.prototype,["previousElementSibling","nextElementSibling",
1623
- "innerHTML","className"]),S(HTMLElement.prototype,["children","innerHTML","className"])):(dc(Element.prototype,a),dc(Element.prototype,{previousElementSibling:{get:function(){fc.currentNode=this;return fc.previousSibling()}},nextElementSibling:{get:function(){fc.currentNode=this;return fc.nextSibling()}},innerHTML:{get:function(){return Zb(this,Db)},set:function(b){var c="template"===this.localName?this.content:this;hc(c);var d=this.localName||"div";d=this.namespaceURI&&this.namespaceURI!==gc.namespaceURI?
1624
- gc.createElementNS(this.namespaceURI,d):gc.createElement(d);d.innerHTML=b;for(b="template"===this.localName?d.content:d;d=b.__shady_native_firstChild;)c.__shady_native_insertBefore(d,void 0)}},className:{get:function(){return this.getAttribute("class")||""},set:function(b){this.setAttribute("class",b)}}}));S(Element.prototype,"setAttribute getAttribute hasAttribute removeAttribute focus blur".split(" "));S(Element.prototype,jc);S(HTMLElement.prototype,["focus","blur"]);window.HTMLTemplateElement&&
1625
- S(window.HTMLTemplateElement.prototype,["innerHTML"]);$b?S(DocumentFragment.prototype,ic):dc(DocumentFragment.prototype,a);S(DocumentFragment.prototype,jc);$b?(S(Document.prototype,ic),S(Document.prototype,["activeElement"])):dc(Document.prototype,a);S(Document.prototype,["importNode","getElementById"]);S(Document.prototype,jc)};var lc=Q({get childNodes(){return this.__shady_childNodes},get firstChild(){return this.__shady_firstChild},get lastChild(){return this.__shady_lastChild},get childElementCount(){return this.__shady_childElementCount},get children(){return this.__shady_children},get firstElementChild(){return this.__shady_firstElementChild},get lastElementChild(){return this.__shady_lastElementChild},get shadowRoot(){return this.__shady_shadowRoot}}),mc=Q({get textContent(){return this.__shady_textContent},set textContent(a){this.__shady_textContent=
1626
- a},get innerHTML(){return this.__shady_innerHTML},set innerHTML(a){return this.__shady_innerHTML=a}}),nc=Q({get parentElement(){return this.__shady_parentElement},get parentNode(){return this.__shady_parentNode},get nextSibling(){return this.__shady_nextSibling},get previousSibling(){return this.__shady_previousSibling},get nextElementSibling(){return this.__shady_nextElementSibling},get previousElementSibling(){return this.__shady_previousElementSibling},get className(){return this.__shady_className},
1627
- set className(a){return this.__shady_className=a}});function oc(a){for(var b in a){var c=a[b];c&&(c.enumerable=!1)}}oc(lc);oc(mc);oc(nc);var pc=N.B||!0===N.D,qc=pc?function(){}:function(a){var b=B(a);b.Ka||(b.Ka=!0,Gb(a,nc))},rc=pc?function(){}:function(a){var b=B(a);b.Ja||(b.Ja=!0,Gb(a,lc),window.customElements&&window.customElements.polyfillWrapFlushCallback&&!N.D||Gb(a,mc))};var sc="__eventWrappers"+Date.now(),tc=function(){var a=Object.getOwnPropertyDescriptor(Event.prototype,"composed");return a?function(b){return a.get.call(b)}:null}(),uc=function(){function a(){}var b=!1,c={get capture(){b=!0;return!1}};window.addEventListener("test",a,c);window.removeEventListener("test",a,c);return b}();function vc(a){if(a&&"object"===typeof a){var b=!!a.capture;var c=!!a.once;var d=!!a.passive;var e=a.O}else b=!!a,d=c=!1;return{Ga:e,capture:b,once:c,passive:d,Fa:uc?a:b}}
1628
- var wc={blur:!0,focus:!0,focusin:!0,focusout:!0,click:!0,dblclick:!0,mousedown:!0,mouseenter:!0,mouseleave:!0,mousemove:!0,mouseout:!0,mouseover:!0,mouseup:!0,wheel:!0,beforeinput:!0,input:!0,keydown:!0,keyup:!0,compositionstart:!0,compositionupdate:!0,compositionend:!0,touchstart:!0,touchend:!0,touchmove:!0,touchcancel:!0,pointerover:!0,pointerenter:!0,pointerdown:!0,pointermove:!0,pointerup:!0,pointercancel:!0,pointerout:!0,pointerleave:!0,gotpointercapture:!0,lostpointercapture:!0,dragstart:!0,
1629
- drag:!0,dragenter:!0,dragleave:!0,dragover:!0,drop:!0,dragend:!0,DOMActivate:!0,DOMFocusIn:!0,DOMFocusOut:!0,keypress:!0},xc={DOMAttrModified:!0,DOMAttributeNameChanged:!0,DOMCharacterDataModified:!0,DOMElementNameChanged:!0,DOMNodeInserted:!0,DOMNodeInsertedIntoDocument:!0,DOMNodeRemoved:!0,DOMNodeRemovedFromDocument:!0,DOMSubtreeModified:!0};function yc(a){return a instanceof Node?a.__shady_getRootNode():a}
1630
- function zc(a,b){var c=[],d=a;for(a=yc(a);d;)c.push(d),d.__shady_assignedSlot?d=d.__shady_assignedSlot:d.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&d.host&&(b||d!==a)?d=d.host:d=d.__shady_parentNode;c[c.length-1]===document&&c.push(window);return c}function Ac(a){a.__composedPath||(a.__composedPath=zc(a.target,!0));return a.__composedPath}function Bc(a,b){if(!O)return a;a=zc(a,!0);for(var c=0,d,e=void 0,f,g=void 0;c<b.length;c++)if(d=b[c],f=yc(d),f!==e&&(g=a.indexOf(f),e=f),!O(f)||-1<g)return d}
1631
- function Cc(a){function b(c,d){c=new a(c,d);c.__composed=d&&!!d.composed;return c}b.__proto__=a;b.prototype=a.prototype;return b}var Dc={focus:!0,blur:!0};function Ec(a){return a.__target!==a.target||a.__relatedTarget!==a.relatedTarget}function Fc(a,b,c){if(c=b.__handlers&&b.__handlers[a.type]&&b.__handlers[a.type][c])for(var d=0,e;(e=c[d])&&(!Ec(a)||a.target!==a.relatedTarget)&&(e.call(b,a),!a.__immediatePropagationStopped);d++);}
1632
- function Gc(a){var b=a.composedPath();Object.defineProperty(a,"currentTarget",{get:function(){return d},configurable:!0});for(var c=b.length-1;0<=c;c--){var d=b[c];Fc(a,d,"capture");if(a.ma)return}Object.defineProperty(a,"eventPhase",{get:function(){return Event.AT_TARGET}});var e;for(c=0;c<b.length;c++){d=b[c];var f=L(d);f=f&&f.root;if(0===c||f&&f===e)if(Fc(a,d,"bubble"),d!==window&&(e=d.__shady_getRootNode()),a.ma)break}}
1633
- function Hc(a,b,c,d,e,f){for(var g=0;g<a.length;g++){var h=a[g],k=h.type,l=h.capture,m=h.once,q=h.passive;if(b===h.node&&c===k&&d===l&&e===m&&f===q)return g}return-1}function Ic(a){Lb();return this.__shady_native_dispatchEvent(a)}
1634
- function Jc(a,b,c){var d=vc(c),e=d.capture,f=d.once,g=d.passive,h=d.Ga;d=d.Fa;if(b){var k=typeof b;if("function"===k||"object"===k)if("object"!==k||b.handleEvent&&"function"===typeof b.handleEvent){if(xc[a])return this.__shady_native_addEventListener(a,b,d);var l=h||this;if(h=b[sc]){if(-1<Hc(h,l,a,e,f,g))return}else b[sc]=[];h=function(m){f&&this.__shady_removeEventListener(a,b,c);m.__target||Kc(m);if(l!==this){var q=Object.getOwnPropertyDescriptor(m,"currentTarget");Object.defineProperty(m,"currentTarget",
1635
- {get:function(){return l},configurable:!0})}m.__previousCurrentTarget=m.currentTarget;if(!O(l)&&"slot"!==l.localName||-1!=m.composedPath().indexOf(l))if(m.composed||-1<m.composedPath().indexOf(l))if(Ec(m)&&m.target===m.relatedTarget)m.eventPhase===Event.BUBBLING_PHASE&&m.stopImmediatePropagation();else if(m.eventPhase===Event.CAPTURING_PHASE||m.bubbles||m.target===l||l instanceof Window){var H="function"===k?b.call(l,m):b.handleEvent&&b.handleEvent(m);l!==this&&(q?(Object.defineProperty(m,"currentTarget",
1636
- q),q=null):delete m.currentTarget);return H}};b[sc].push({node:l,type:a,capture:e,once:f,passive:g,lb:h});Dc[a]?(this.__handlers=this.__handlers||{},this.__handlers[a]=this.__handlers[a]||{capture:[],bubble:[]},this.__handlers[a][e?"capture":"bubble"].push(h)):this.__shady_native_addEventListener(a,h,d)}}}
1637
- function Lc(a,b,c){if(b){var d=vc(c);c=d.capture;var e=d.once,f=d.passive,g=d.Ga;d=d.Fa;if(xc[a])return this.__shady_native_removeEventListener(a,b,d);var h=g||this;g=void 0;var k=null;try{k=b[sc]}catch(l){}k&&(e=Hc(k,h,a,c,e,f),-1<e&&(g=k.splice(e,1)[0].lb,k.length||(b[sc]=void 0)));this.__shady_native_removeEventListener(a,g||b,d);g&&Dc[a]&&this.__handlers&&this.__handlers[a]&&(a=this.__handlers[a][c?"capture":"bubble"],b=a.indexOf(g),-1<b&&a.splice(b,1))}}
1638
- function Mc(){for(var a in Dc)window.__shady_native_addEventListener(a,function(b){b.__target||(Kc(b),Gc(b))},!0)}
1639
- var Nc=Q({get composed(){void 0===this.__composed&&(tc?this.__composed="focusin"===this.type||"focusout"===this.type||tc(this):!1!==this.isTrusted&&(this.__composed=wc[this.type]));return this.__composed||!1},composedPath:function(){this.__composedPath||(this.__composedPath=zc(this.__target,this.composed));return this.__composedPath},get target(){return Bc(this.currentTarget||this.__previousCurrentTarget,this.composedPath())},get relatedTarget(){if(!this.__relatedTarget)return null;this.__relatedTargetComposedPath||
1640
- (this.__relatedTargetComposedPath=zc(this.__relatedTarget,!0));return Bc(this.currentTarget||this.__previousCurrentTarget,this.__relatedTargetComposedPath)},stopPropagation:function(){Event.prototype.stopPropagation.call(this);this.ma=!0},stopImmediatePropagation:function(){Event.prototype.stopImmediatePropagation.call(this);this.ma=this.__immediatePropagationStopped=!0}});
1641
- function Kc(a){a.__target=a.target;a.__relatedTarget=a.relatedTarget;if(N.B){var b=Object.getPrototypeOf(a);if(!b.hasOwnProperty("__shady_patchedProto")){var c=Object.create(b);c.__shady_sourceProto=b;P(c,Nc);b.__shady_patchedProto=c}a.__proto__=b.__shady_patchedProto}else P(a,Nc)}var Oc=Cc(Event),Pc=Cc(CustomEvent),Qc=Cc(MouseEvent);
1642
- function Rc(){if(!tc&&Object.getOwnPropertyDescriptor(Event.prototype,"isTrusted")){var a=function(){var b=new MouseEvent("click",{bubbles:!0,cancelable:!0,composed:!0});this.__shady_dispatchEvent(b)};Element.prototype.click?Element.prototype.click=a:HTMLElement.prototype.click&&(HTMLElement.prototype.click=a)}}
1643
- var Sc=Object.getOwnPropertyNames(Element.prototype).filter(function(a){return"on"===a.substring(0,2)}),Tc=Object.getOwnPropertyNames(HTMLElement.prototype).filter(function(a){return"on"===a.substring(0,2)});function Uc(a){return{set:function(b){var c=B(this),d=a.substring(2);c.N||(c.N={});c.N[a]&&this.removeEventListener(d,c.N[a]);this.__shady_addEventListener(d,b);c.N[a]=b},get:function(){var b=L(this);return b&&b.N&&b.N[a]},configurable:!0}};function Vc(a,b){return{index:a,aa:[],ha:b}}
1644
- function Wc(a,b,c,d){var e=0,f=0,g=0,h=0,k=Math.min(b-e,d-f);if(0==e&&0==f)a:{for(g=0;g<k;g++)if(a[g]!==c[g])break a;g=k}if(b==a.length&&d==c.length){h=a.length;for(var l=c.length,m=0;m<k-g&&Xc(a[--h],c[--l]);)m++;h=m}e+=g;f+=g;b-=h;d-=h;if(0==b-e&&0==d-f)return[];if(e==b){for(b=Vc(e,0);f<d;)b.aa.push(c[f++]);return[b]}if(f==d)return[Vc(e,b-e)];k=e;g=f;d=d-g+1;h=b-k+1;b=Array(d);for(l=0;l<d;l++)b[l]=Array(h),b[l][0]=l;for(l=0;l<h;l++)b[0][l]=l;for(l=1;l<d;l++)for(m=1;m<h;m++)if(a[k+m-1]===c[g+l-1])b[l][m]=
1645
- b[l-1][m-1];else{var q=b[l-1][m]+1,H=b[l][m-1]+1;b[l][m]=q<H?q:H}k=b.length-1;g=b[0].length-1;d=b[k][g];for(a=[];0<k||0<g;)0==k?(a.push(2),g--):0==g?(a.push(3),k--):(h=b[k-1][g-1],l=b[k-1][g],m=b[k][g-1],q=l<m?l<h?l:h:m<h?m:h,q==h?(h==d?a.push(0):(a.push(1),d=h),k--,g--):q==l?(a.push(3),k--,d=l):(a.push(2),g--,d=m));a.reverse();b=void 0;k=[];for(g=0;g<a.length;g++)switch(a[g]){case 0:b&&(k.push(b),b=void 0);e++;f++;break;case 1:b||(b=Vc(e,0));b.ha++;e++;b.aa.push(c[f]);f++;break;case 2:b||(b=Vc(e,
1646
- 0));b.ha++;e++;break;case 3:b||(b=Vc(e,0)),b.aa.push(c[f]),f++}b&&k.push(b);return k}function Xc(a,b){return a===b};var Yc=Q({dispatchEvent:Ic,addEventListener:Jc,removeEventListener:Lc});var Zc=null;function $c(){Zc||(Zc=window.ShadyCSS&&window.ShadyCSS.ScopingShim);return Zc||null}function ad(a,b,c){var d=$c();return d&&"class"===b?(d.setElementClass(a,c),!0):!1}function bd(a,b){var c=$c();c&&c.unscopeNode(a,b)}function cd(a,b){var c=$c();if(!c)return!0;if(a.nodeType===Node.DOCUMENT_FRAGMENT_NODE){c=!0;for(a=a.__shady_firstChild;a;a=a.__shady_nextSibling)c=c&&cd(a,b);return c}return a.nodeType!==Node.ELEMENT_NODE?!0:c.currentScopeForNode(a)===b}
1647
- function dd(a){if(a.nodeType!==Node.ELEMENT_NODE)return"";var b=$c();return b?b.currentScopeForNode(a):""}function ed(a,b){if(a)for(a.nodeType===Node.ELEMENT_NODE&&b(a),a=a.__shady_firstChild;a;a=a.__shady_nextSibling)a.nodeType===Node.ELEMENT_NODE&&ed(a,b)};var fd=window.document,gd=N.la,hd=Object.getOwnPropertyDescriptor(Node.prototype,"isConnected"),id=hd&&hd.get;function jd(a){for(var b;b=a.__shady_firstChild;)a.__shady_removeChild(b)}function kd(a){var b=L(a);if(b&&void 0!==b.ka)for(b=a.__shady_firstChild;b;b=b.__shady_nextSibling)kd(b);if(a=L(a))a.ka=void 0}function ld(a){var b=a;if(a&&"slot"===a.localName){var c=L(a);(c=c&&c.V)&&(b=c.length?c[0]:ld(a.__shady_nextSibling))}return b}
1648
- function md(a,b,c){if(a=(a=L(a))&&a.Z){if(b)if(b.nodeType===Node.DOCUMENT_FRAGMENT_NODE)for(var d=0,e=b.childNodes.length;d<e;d++)a.addedNodes.push(b.childNodes[d]);else a.addedNodes.push(b);c&&a.removedNodes.push(c);Nb(a)}}
1649
- var td=Q({get parentNode(){var a=L(this);a=a&&a.parentNode;return void 0!==a?a:this.__shady_native_parentNode},get firstChild(){var a=L(this);a=a&&a.firstChild;return void 0!==a?a:this.__shady_native_firstChild},get lastChild(){var a=L(this);a=a&&a.lastChild;return void 0!==a?a:this.__shady_native_lastChild},get nextSibling(){var a=L(this);a=a&&a.nextSibling;return void 0!==a?a:this.__shady_native_nextSibling},get previousSibling(){var a=L(this);a=a&&a.previousSibling;return void 0!==a?a:this.__shady_native_previousSibling},
1650
- get childNodes(){if(rb(this)){var a=L(this);if(!a.childNodes){a.childNodes=[];for(var b=this.__shady_firstChild;b;b=b.__shady_nextSibling)a.childNodes.push(b)}var c=a.childNodes}else c=this.__shady_native_childNodes;c.item=function(d){return c[d]};return c},get parentElement(){var a=L(this);(a=a&&a.parentNode)&&a.nodeType!==Node.ELEMENT_NODE&&(a=null);return void 0!==a?a:this.__shady_native_parentElement},get isConnected(){if(id&&id.call(this))return!0;if(this.nodeType==Node.DOCUMENT_FRAGMENT_NODE)return!1;
1651
- var a=this.ownerDocument;if(Ab){if(a.__shady_native_contains(this))return!0}else if(a.documentElement&&a.documentElement.__shady_native_contains(this))return!0;for(a=this;a&&!(a instanceof Document);)a=a.__shady_parentNode||(O(a)?a.host:void 0);return!!(a&&a instanceof Document)},get textContent(){if(rb(this)){for(var a=[],b=this.__shady_firstChild;b;b=b.__shady_nextSibling)b.nodeType!==Node.COMMENT_NODE&&a.push(b.__shady_textContent);return a.join("")}return this.__shady_native_textContent},set textContent(a){if("undefined"===
1652
- typeof a||null===a)a="";switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:if(!rb(this)&&N.B){var b=this.__shady_firstChild;(b!=this.__shady_lastChild||b&&b.nodeType!=Node.TEXT_NODE)&&jd(this);this.__shady_native_textContent=a}else jd(this),(0<a.length||this.nodeType===Node.ELEMENT_NODE)&&this.__shady_insertBefore(document.createTextNode(a));break;default:this.nodeValue=a}},insertBefore:function(a,b){if(this.ownerDocument!==fd&&a.ownerDocument!==fd)return this.__shady_native_insertBefore(a,
1653
- b),a;if(a===this)throw Error("Failed to execute 'appendChild' on 'Node': The new child element contains the parent.");if(b){var c=L(b);c=c&&c.parentNode;if(void 0!==c&&c!==this||void 0===c&&b.__shady_native_parentNode!==this)throw Error("Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.");}if(b===a)return a;md(this,a);var d=[],e=(c=nd(this))?c.host.localName:dd(this),f=a.__shady_parentNode;if(f){var g=dd(a);var h=!!c||!nd(a)||
1654
- gd&&void 0!==this.__noInsertionPoint;f.__shady_removeChild(a,h)}f=!0;var k=(!gd||void 0===a.__noInsertionPoint&&void 0===this.__noInsertionPoint)&&!cd(a,e),l=c&&!a.__noInsertionPoint&&(!gd||a.nodeType===Node.DOCUMENT_FRAGMENT_NODE);if(l||k)k&&(g=g||dd(a)),ed(a,function(m){l&&"slot"===m.localName&&d.push(m);if(k){var q=g;$c()&&(q&&bd(m,q),(q=$c())&&q.scopeNode(m,e))}});d.length&&(od(c),c.c.push.apply(c.c,d instanceof Array?d:da(ca(d))),pd(c));rb(this)&&(qd(a,this,b),h=L(this),h.root?(f=!1,sb(this)&&
1655
- pd(h.root)):c&&"slot"===this.localName&&(f=!1,pd(c)));f?(c=O(this)?this.host:this,b?(b=ld(b),c.__shady_native_insertBefore(a,b)):c.__shady_native_appendChild(a)):a.ownerDocument!==this.ownerDocument&&this.ownerDocument.adoptNode(a);return a},appendChild:function(a){if(this!=a||!O(a))return this.__shady_insertBefore(a)},removeChild:function(a,b){b=void 0===b?!1:b;if(this.ownerDocument!==fd)return this.__shady_native_removeChild(a);if(a.__shady_parentNode!==this)throw Error("The node to be removed is not a child of this node: "+
1656
- a);md(this,null,a);var c=nd(a),d=c&&rd(c,a),e=L(this);if(rb(this)&&(sd(a,this),sb(this))){pd(e.root);var f=!0}if($c()&&!b&&c&&a.nodeType!==Node.TEXT_NODE){var g=dd(a);ed(a,function(h){bd(h,g)})}kd(a);c&&((b="slot"===this.localName)&&(f=!0),(d||b)&&pd(c));f||(f=O(this)?this.host:this,(!e.root&&"slot"!==a.localName||f===a.__shady_native_parentNode)&&f.__shady_native_removeChild(a));return a},replaceChild:function(a,b){this.__shady_insertBefore(a,b);this.__shady_removeChild(b);return a},cloneNode:function(a){if("template"==
1657
- this.localName)return this.__shady_native_cloneNode(a);var b=this.__shady_native_cloneNode(!1);if(a&&b.nodeType!==Node.ATTRIBUTE_NODE){a=this.__shady_firstChild;for(var c;a;a=a.__shady_nextSibling)c=a.__shady_cloneNode(!0),b.__shady_appendChild(c)}return b},getRootNode:function(a){if(this&&this.nodeType){var b=B(this),c=b.ka;void 0===c&&(O(this)?(c=this,b.ka=c):(c=(c=this.__shady_parentNode)?c.__shady_getRootNode(a):this,document.documentElement.__shady_native_contains(this)&&(b.ka=c)));return c}},
1658
- contains:function(a){return Bb(this,a)}});var wd=Q({get assignedSlot(){var a=this.__shady_parentNode;(a=a&&a.__shady_shadowRoot)&&vd(a);return(a=L(this))&&a.assignedSlot||null}});function xd(a,b,c){var d=[];yd(a,b,c,d);return d}function yd(a,b,c,d){for(a=a.__shady_firstChild;a;a=a.__shady_nextSibling){var e;if(e=a.nodeType===Node.ELEMENT_NODE){e=a;var f=b,g=c,h=d,k=f(e);k&&h.push(e);g&&g(k)?e=k:(yd(e,f,g,h),e=void 0)}if(e)break}}
1659
- var zd=Q({get firstElementChild(){var a=L(this);if(a&&void 0!==a.firstChild){for(a=this.__shady_firstChild;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.__shady_nextSibling;return a}return this.__shady_native_firstElementChild},get lastElementChild(){var a=L(this);if(a&&void 0!==a.lastChild){for(a=this.__shady_lastChild;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.__shady_previousSibling;return a}return this.__shady_native_lastElementChild},get children(){return rb(this)?Cb(Array.prototype.filter.call(Eb(this),
1660
- function(a){return a.nodeType===Node.ELEMENT_NODE})):this.__shady_native_children},get childElementCount(){var a=this.__shady_children;return a?a.length:0}}),Ad=Q({querySelector:function(a){return xd(this,function(b){return vb.call(b,a)},function(b){return!!b})[0]||null},querySelectorAll:function(a,b){if(b){b=Array.prototype.slice.call(this.__shady_native_querySelectorAll(a));var c=this.__shady_getRootNode();return Cb(b.filter(function(d){return d.__shady_getRootNode()==c}))}return Cb(xd(this,function(d){return vb.call(d,
1661
- a)}))}}),Bd=N.la&&!N.D?Hb({},zd):zd;Hb(zd,Ad);var Cd=window.document;function Dd(a,b){if("slot"===b)a=a.__shady_parentNode,sb(a)&&pd(L(a).root);else if("slot"===a.localName&&"name"===b&&(b=nd(a))){if(b.a){Ed(b);var c=a.La,d=Fd(a);if(d!==c){c=b.b[c];var e=c.indexOf(a);0<=e&&c.splice(e,1);c=b.b[d]||(b.b[d]=[]);c.push(a);1<c.length&&(b.b[d]=Gd(c))}}pd(b)}}
1662
- var Hd=Q({get previousElementSibling(){var a=L(this);if(a&&void 0!==a.previousSibling){for(a=this.__shady_previousSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.__shady_previousSibling;return a}return this.__shady_native_previousElementSibling},get nextElementSibling(){var a=L(this);if(a&&void 0!==a.nextSibling){for(a=this.__shady_nextSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.__shady_nextSibling;return a}return this.__shady_native_nextElementSibling},get slot(){return this.getAttribute("slot")},
1663
- set slot(a){this.__shady_setAttribute("slot",a)},get className(){return this.getAttribute("class")||""},set className(a){this.__shady_setAttribute("class",a)},setAttribute:function(a,b){this.ownerDocument!==Cd?this.__shady_native_setAttribute(a,b):ad(this,a,b)||(this.__shady_native_setAttribute(a,b),Dd(this,a))},removeAttribute:function(a){this.ownerDocument!==Cd?this.__shady_native_removeAttribute(a):ad(this,a,"")?""===this.getAttribute(a)&&this.__shady_native_removeAttribute(a):(this.__shady_native_removeAttribute(a),
1664
- Dd(this,a))}});N.la||Sc.forEach(function(a){Hd[a]=Uc(a)});
1665
- var Md=Q({attachShadow:function(a){if(!this)throw Error("Must provide a host.");if(!a)throw Error("Not enough arguments.");if(a.shadyUpgradeFragment&&!N.Ia){var b=a.shadyUpgradeFragment;b.__proto__=ShadowRoot.prototype;Id(b,this,a);Jd(b,b);a=b.__noInsertionPoint?null:b.querySelectorAll("slot");b.__noInsertionPoint=void 0;if(a&&a.length){var c=b;od(c);c.c.push.apply(c.c,a instanceof Array?a:da(ca(a)));pd(b)}b.host.__shady_native_appendChild(b)}else b=new Kd(Ld,this,a);return this.__CE_shadowRoot=b},
1666
- get shadowRoot(){var a=L(this);return a&&a.bb||null}});Hb(Hd,Md);var Nd=document.implementation.createHTMLDocument("inert"),Od=Q({get innerHTML(){return rb(this)?Zb("template"===this.localName?this.content:this,Eb):this.__shady_native_innerHTML},set innerHTML(a){if("template"===this.localName)this.__shady_native_innerHTML=a;else{jd(this);var b=this.localName||"div";b=this.namespaceURI&&this.namespaceURI!==Nd.namespaceURI?Nd.createElementNS(this.namespaceURI,b):Nd.createElement(b);for(N.B?b.__shady_native_innerHTML=a:b.innerHTML=a;a=b.__shady_firstChild;)this.__shady_insertBefore(a)}}});var Pd=Q({blur:function(){var a=L(this);(a=(a=a&&a.root)&&a.activeElement)?a.__shady_blur():this.__shady_native_blur()}});N.la||Tc.forEach(function(a){Pd[a]=Uc(a)});var Qd=Q({assignedNodes:function(a){if("slot"===this.localName){var b=this.__shady_getRootNode();b&&O(b)&&vd(b);return(b=L(this))?(a&&a.flatten?b.V:b.assignedNodes)||[]:[]}},addEventListener:function(a,b,c){if("slot"!==this.localName||"slotchange"===a)Jc.call(this,a,b,c);else{"object"!==typeof c&&(c={capture:!!c});var d=this.__shady_parentNode;if(!d)throw Error("ShadyDOM cannot attach event to slot unless it has a `parentNode`");c.O=this;d.__shady_addEventListener(a,b,c)}},removeEventListener:function(a,
1667
- b,c){if("slot"!==this.localName||"slotchange"===a)Lc.call(this,a,b,c);else{"object"!==typeof c&&(c={capture:!!c});var d=this.__shady_parentNode;if(!d)throw Error("ShadyDOM cannot attach event to slot unless it has a `parentNode`");c.O=this;d.__shady_removeEventListener(a,b,c)}}});var Rd=Q({getElementById:function(a){return""===a?null:xd(this,function(b){return b.id==a},function(b){return!!b})[0]||null}});var Sd=Q({get activeElement(){var a=N.B?document.__shady_native_activeElement:document.activeElement;if(!a||!a.nodeType)return null;var b=!!O(this);if(!(this===document||b&&this.host!==a&&this.host.__shady_native_contains(a)))return null;for(b=nd(a);b&&b!==this;)a=b.host,b=nd(a);return this===document?b?null:a:b===this?a:null}});var Td=window.document,Ud=Q({importNode:function(a,b){if(a.ownerDocument!==Td||"template"===a.localName)return this.__shady_native_importNode(a,b);var c=this.__shady_native_importNode(a,!1);if(b)for(a=a.__shady_firstChild;a;a=a.__shady_nextSibling)b=this.__shady_importNode(a,!0),c.__shady_appendChild(b);return c}});var Vd=Q({dispatchEvent:Ic,addEventListener:Jc.bind(window),removeEventListener:Lc.bind(window)});var Wd={};Object.getOwnPropertyDescriptor(HTMLElement.prototype,"parentElement")&&(Wd.parentElement=td.parentElement);Object.getOwnPropertyDescriptor(HTMLElement.prototype,"contains")&&(Wd.contains=td.contains);Object.getOwnPropertyDescriptor(HTMLElement.prototype,"children")&&(Wd.children=zd.children);Object.getOwnPropertyDescriptor(HTMLElement.prototype,"innerHTML")&&(Wd.innerHTML=Od.innerHTML);Object.getOwnPropertyDescriptor(HTMLElement.prototype,"className")&&(Wd.className=Hd.className);
1668
- var Xd={EventTarget:[Yc],Node:[td,window.EventTarget?null:Yc],Text:[wd],Comment:[wd],CDATASection:[wd],ProcessingInstruction:[wd],Element:[Hd,zd,wd,!N.B||"innerHTML"in Element.prototype?Od:null,window.HTMLSlotElement?null:Qd],HTMLElement:[Pd,Wd],HTMLSlotElement:[Qd],DocumentFragment:[Bd,Rd],Document:[Ud,Bd,Rd,Sd],Window:[Vd]},Yd=N.B?null:["innerHTML","textContent"];function Zd(a,b,c,d){b.forEach(function(e){return a&&e&&P(a,e,c,d)})}
1669
- function $d(a){var b=a?null:Yd,c;for(c in Xd)Zd(window[c]&&window[c].prototype,Xd[c],a,b)}["Text","Comment","CDATASection","ProcessingInstruction"].forEach(function(a){var b=window[a],c=Object.create(b.prototype);c.__shady_protoIsPatched=!0;Zd(c,Xd.EventTarget);Zd(c,Xd.Node);Xd[a]&&Zd(c,Xd[a]);b.prototype.__shady_patchedProto=c});function ae(a){a.__shady_protoIsPatched=!0;Zd(a,Xd.EventTarget);Zd(a,Xd.Node);Zd(a,Xd.Element);Zd(a,Xd.HTMLElement);Zd(a,Xd.HTMLSlotElement);return a};var be=N.ua,ce=N.B;function de(a,b){if(be&&!a.__shady_protoIsPatched&&!O(a)){var c=Object.getPrototypeOf(a),d=c.hasOwnProperty("__shady_patchedProto")&&c.__shady_patchedProto;d||(d=Object.create(c),ae(d),c.__shady_patchedProto=d);Object.setPrototypeOf(a,d)}ce||(1===b?qc(a):2===b&&rc(a))}
1670
- function ee(a,b,c,d){de(a,1);d=d||null;var e=B(a),f=d?B(d):null;e.previousSibling=d?f.previousSibling:b.__shady_lastChild;if(f=L(e.previousSibling))f.nextSibling=a;if(f=L(e.nextSibling=d))f.previousSibling=a;e.parentNode=b;d?d===c.firstChild&&(c.firstChild=a):(c.lastChild=a,c.firstChild||(c.firstChild=a));c.childNodes=null}
1671
- function qd(a,b,c){de(b,2);var d=B(b);void 0!==d.firstChild&&(d.childNodes=null);if(a.nodeType===Node.DOCUMENT_FRAGMENT_NODE)for(a=a.__shady_native_firstChild;a;a=a.__shady_native_nextSibling)ee(a,b,d,c);else ee(a,b,d,c)}
1672
- function sd(a,b){var c=B(a);b=B(b);a===b.firstChild&&(b.firstChild=c.nextSibling);a===b.lastChild&&(b.lastChild=c.previousSibling);a=c.previousSibling;var d=c.nextSibling;a&&(B(a).nextSibling=d);d&&(B(d).previousSibling=a);c.parentNode=c.previousSibling=c.nextSibling=void 0;void 0!==b.childNodes&&(b.childNodes=null)}
1673
- function Jd(a,b){var c=B(a);if(b||void 0===c.firstChild){c.childNodes=null;var d=c.firstChild=a.__shady_native_firstChild;c.lastChild=a.__shady_native_lastChild;de(a,2);c=d;for(d=void 0;c;c=c.__shady_native_nextSibling){var e=B(c);e.parentNode=b||a;e.nextSibling=c.__shady_native_nextSibling;e.previousSibling=d||null;d=c;de(c,1)}}};var fe=Q({addEventListener:function(a,b,c){"object"!==typeof c&&(c={capture:!!c});c.O=c.O||this;this.host.__shady_addEventListener(a,b,c)},removeEventListener:function(a,b,c){"object"!==typeof c&&(c={capture:!!c});c.O=c.O||this;this.host.__shady_removeEventListener(a,b,c)}});function ge(a,b){P(a,fe,b);P(a,Sd,b);P(a,Od,b);P(a,zd,b);N.D&&!b?(P(a,td,b),P(a,Rd,b)):N.B||(P(a,nc),P(a,lc),P(a,mc))};var Ld={},he=N.deferConnectionCallbacks&&"loading"===document.readyState,ie;function je(a){var b=[];do b.unshift(a);while(a=a.__shady_parentNode);return b}function Kd(a,b,c){if(a!==Ld)throw new TypeError("Illegal constructor");this.a=null;Id(this,b,c)}
1674
- function Id(a,b,c){a.host=b;a.mode=c&&c.mode;Jd(a.host);b=B(a.host);b.root=a;b.bb="closed"!==a.mode?a:null;b=B(a);b.firstChild=b.lastChild=b.parentNode=b.nextSibling=b.previousSibling=null;if(N.preferPerformance)for(;b=a.host.__shady_native_firstChild;)a.host.__shady_native_removeChild(b);else pd(a)}function pd(a){a.T||(a.T=!0,Kb(function(){return vd(a)}))}
1675
- function vd(a){var b;if(b=a.T){for(var c;a;)a:{a.T&&(c=a),b=a;a=b.host.__shady_getRootNode();if(O(a)&&(b=L(b.host))&&0<b.ca)break a;a=void 0}b=c}(c=b)&&c._renderSelf()}
1676
- Kd.prototype._renderSelf=function(){var a=he;he=!0;this.T=!1;if(this.a){Ed(this);for(var b=0,c;b<this.a.length;b++){c=this.a[b];var d=L(c),e=d.assignedNodes;d.assignedNodes=[];d.V=[];if(d.Ba=e)for(d=0;d<e.length;d++){var f=L(e[d]);f.oa=f.assignedSlot;f.assignedSlot===c&&(f.assignedSlot=null)}}for(b=this.host.__shady_firstChild;b;b=b.__shady_nextSibling)ke(this,b);for(b=0;b<this.a.length;b++){c=this.a[b];e=L(c);if(!e.assignedNodes.length)for(d=c.__shady_firstChild;d;d=d.__shady_nextSibling)ke(this,
1677
- d,c);(d=(d=L(c.__shady_parentNode))&&d.root)&&(tb(d)||d.T)&&d._renderSelf();le(this,e.V,e.assignedNodes);if(d=e.Ba){for(f=0;f<d.length;f++)L(d[f]).oa=null;e.Ba=null;d.length>e.assignedNodes.length&&(e.ra=!0)}e.ra&&(e.ra=!1,me(this,c))}c=this.a;b=[];for(e=0;e<c.length;e++)d=c[e].__shady_parentNode,(f=L(d))&&f.root||!(0>b.indexOf(d))||b.push(d);for(c=0;c<b.length;c++){f=b[c];e=f===this?this.host:f;d=[];for(f=f.__shady_firstChild;f;f=f.__shady_nextSibling)if("slot"==f.localName)for(var g=L(f).V,h=0;h<
1678
- g.length;h++)d.push(g[h]);else d.push(f);f=Db(e);g=Wc(d,d.length,f,f.length);for(var k=h=0,l=void 0;h<g.length&&(l=g[h]);h++){for(var m=0,q=void 0;m<l.aa.length&&(q=l.aa[m]);m++)q.__shady_native_parentNode===e&&e.__shady_native_removeChild(q),f.splice(l.index+k,1);k-=l.ha}k=0;for(l=void 0;k<g.length&&(l=g[k]);k++)for(h=f[l.index],m=l.index;m<l.index+l.ha;m++)q=d[m],e.__shady_native_insertBefore(q,h),f.splice(m,0,q)}}if(!N.preferPerformance&&!this.Aa)for(b=this.host.__shady_firstChild;b;b=b.__shady_nextSibling)c=
1679
- L(b),b.__shady_native_parentNode!==this.host||"slot"!==b.localName&&c.assignedSlot||this.host.__shady_native_removeChild(b);this.Aa=!0;he=a;ie&&ie()};function ke(a,b,c){var d=B(b),e=d.oa;d.oa=null;c||(c=(a=a.b[b.__shady_slot||"__catchall"])&&a[0]);c?(B(c).assignedNodes.push(b),d.assignedSlot=c):d.assignedSlot=void 0;e!==d.assignedSlot&&d.assignedSlot&&(B(d.assignedSlot).ra=!0)}
1680
- function le(a,b,c){for(var d=0,e=void 0;d<c.length&&(e=c[d]);d++)if("slot"==e.localName){var f=L(e).assignedNodes;f&&f.length&&le(a,b,f)}else b.push(c[d])}function me(a,b){b.__shady_native_dispatchEvent(new Event("slotchange"));b=L(b);b.assignedSlot&&me(a,b.assignedSlot)}function od(a){a.c=a.c||[];a.a=a.a||[];a.b=a.b||{}}
1681
- function Ed(a){if(a.c&&a.c.length){for(var b=a.c,c,d=0;d<b.length;d++){var e=b[d];Jd(e);var f=e.__shady_parentNode;Jd(f);f=L(f);f.ca=(f.ca||0)+1;f=Fd(e);a.b[f]?(c=c||{},c[f]=!0,a.b[f].push(e)):a.b[f]=[e];a.a.push(e)}if(c)for(var g in c)a.b[g]=Gd(a.b[g]);a.c=[]}}function Fd(a){var b=a.name||a.getAttribute("name")||"__catchall";return a.La=b}
1682
- function Gd(a){return a.sort(function(b,c){b=je(b);for(var d=je(c),e=0;e<b.length;e++){c=b[e];var f=d[e];if(c!==f)return b=Eb(c.__shady_parentNode),b.indexOf(c)-b.indexOf(f)}})}
1683
- function rd(a,b){if(a.a){Ed(a);var c=a.b,d;for(d in c)for(var e=c[d],f=0;f<e.length;f++){var g=e[f];if(Bb(b,g)){e.splice(f,1);var h=a.a.indexOf(g);0<=h&&(a.a.splice(h,1),(h=L(g.__shady_parentNode))&&h.ca&&h.ca--);f--;g=L(g);if(h=g.V)for(var k=0;k<h.length;k++){var l=h[k],m=l.__shady_native_parentNode;m&&m.__shady_native_removeChild(l)}g.V=[];g.assignedNodes=[];h=!0}}return h}}function tb(a){Ed(a);return!(!a.a||!a.a.length)}
1684
- (function(a){a.__proto__=DocumentFragment.prototype;ge(a,"__shady_");ge(a);Object.defineProperties(a,{nodeType:{value:Node.DOCUMENT_FRAGMENT_NODE,configurable:!0},nodeName:{value:"#document-fragment",configurable:!0},nodeValue:{value:null,configurable:!0}});["localName","namespaceURI","prefix"].forEach(function(b){Object.defineProperty(a,b,{value:void 0,configurable:!0})});["ownerDocument","baseURI","isConnected"].forEach(function(b){Object.defineProperty(a,b,{get:function(){return this.host[b]},
1685
- configurable:!0})})})(Kd.prototype);
1686
- if(window.customElements&&window.customElements.define&&N.sa&&!N.preferPerformance){var ne=new Map;ie=function(){var a=[];ne.forEach(function(d,e){a.push([e,d])});ne.clear();for(var b=0;b<a.length;b++){var c=a[b][0];a[b][1]?c.__shadydom_connectedCallback():c.__shadydom_disconnectedCallback()}};he&&document.addEventListener("readystatechange",function(){he=!1;ie()},{once:!0});var oe=function(a,b,c){var d=0,e="__isConnected"+d++;if(b||c)a.prototype.connectedCallback=a.prototype.__shadydom_connectedCallback=
1687
- function(){he?ne.set(this,!0):this[e]||(this[e]=!0,b&&b.call(this))},a.prototype.disconnectedCallback=a.prototype.__shadydom_disconnectedCallback=function(){he?this.isConnected||ne.set(this,!1):this[e]&&(this[e]=!1,c&&c.call(this))};return a},pe=window.customElements.define,qe=function(a,b){var c=b.prototype.connectedCallback,d=b.prototype.disconnectedCallback;pe.call(window.customElements,a,oe(b,c,d));b.prototype.connectedCallback=c;b.prototype.disconnectedCallback=d};window.customElements.define=
1688
- qe;Object.defineProperty(window.CustomElementRegistry.prototype,"define",{value:qe,configurable:!0})}function nd(a){a=a.__shady_getRootNode();if(O(a))return a};function re(a){this.node=a}w=re.prototype;w.addEventListener=function(a,b,c){return this.node.__shady_addEventListener(a,b,c)};w.removeEventListener=function(a,b,c){return this.node.__shady_removeEventListener(a,b,c)};w.appendChild=function(a){return this.node.__shady_appendChild(a)};w.insertBefore=function(a,b){return this.node.__shady_insertBefore(a,b)};w.removeChild=function(a){return this.node.__shady_removeChild(a)};w.replaceChild=function(a,b){return this.node.__shady_replaceChild(a,b)};
1689
- w.cloneNode=function(a){return this.node.__shady_cloneNode(a)};w.getRootNode=function(a){return this.node.__shady_getRootNode(a)};w.contains=function(a){return this.node.__shady_contains(a)};w.dispatchEvent=function(a){return this.node.__shady_dispatchEvent(a)};w.setAttribute=function(a,b){this.node.__shady_setAttribute(a,b)};w.getAttribute=function(a){return this.node.__shady_native_getAttribute(a)};w.hasAttribute=function(a){return this.node.__shady_native_hasAttribute(a)};w.removeAttribute=function(a){this.node.__shady_removeAttribute(a)};
1690
- w.attachShadow=function(a){return this.node.__shady_attachShadow(a)};w.focus=function(){this.node.__shady_native_focus()};w.blur=function(){this.node.__shady_blur()};w.importNode=function(a,b){if(this.node.nodeType===Node.DOCUMENT_NODE)return this.node.__shady_importNode(a,b)};w.getElementById=function(a){if(this.node.nodeType===Node.DOCUMENT_NODE)return this.node.__shady_getElementById(a)};w.querySelector=function(a){return this.node.__shady_querySelector(a)};
1691
- w.querySelectorAll=function(a,b){return this.node.__shady_querySelectorAll(a,b)};w.assignedNodes=function(a){if("slot"===this.node.localName)return this.node.__shady_assignedNodes(a)};
1692
- fa.Object.defineProperties(re.prototype,{activeElement:{configurable:!0,enumerable:!0,get:function(){if(O(this.node)||this.node.nodeType===Node.DOCUMENT_NODE)return this.node.__shady_activeElement}},_activeElement:{configurable:!0,enumerable:!0,get:function(){return this.activeElement}},host:{configurable:!0,enumerable:!0,get:function(){if(O(this.node))return this.node.host}},parentNode:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_parentNode}},firstChild:{configurable:!0,
1652
+ function sc(){}sc.prototype.toJSON=function(){return{}};function D(a){a.__shady||(a.__shady=new sc);return a.__shady}function L(a){return a&&a.__shady};var N=window.ShadyDOM||{};N.Ya=!(!Element.prototype.attachShadow||!Node.prototype.getRootNode);var tc=Object.getOwnPropertyDescriptor(Node.prototype,"firstChild");N.H=!!(tc&&tc.configurable&&tc.get);N.ya=N.force||!N.Ya;N.J=N.noPatch||!1;N.fa=N.preferPerformance;N.Aa="on-demand"===N.J;N.Na=navigator.userAgent.match("Trident");function uc(){return Document.prototype.msElementsFromPoint?"msElementsFromPoint":"elementsFromPoint"}function vc(a){return(a=L(a))&&void 0!==a.firstChild}
1653
+ function O(a){return a instanceof ShadowRoot}function wc(a){return(a=(a=L(a))&&a.root)&&xc(a)}var yc=Element.prototype,zc=yc.matches||yc.matchesSelector||yc.mozMatchesSelector||yc.msMatchesSelector||yc.oMatchesSelector||yc.webkitMatchesSelector,Ac=document.createTextNode(""),Bc=0,Cc=[];(new MutationObserver(function(){for(;Cc.length;)try{Cc.shift()()}catch(a){throw Ac.textContent=Bc++,a;}})).observe(Ac,{characterData:!0});function Dc(a){Cc.push(a);Ac.textContent=Bc++}
1654
+ var Ec=document.contains?function(a,b){return a.__shady_native_contains(b)}:function(a,b){return a===b||a.documentElement&&a.documentElement.__shady_native_contains(b)};function Gc(a,b){for(;b;){if(b==a)return!0;b=b.__shady_parentNode}return!1}
1655
+ function Hc(a){for(var b=a.length-1;0<=b;b--){var c=a[b],d=c.getAttribute("id")||c.getAttribute("name");d&&"length"!==d&&isNaN(d)&&(a[d]=c)}a.item=function(e){return a[e]};a.namedItem=function(e){if("length"!==e&&isNaN(e)&&a[e])return a[e];for(var f=ka(a),g=f.next();!g.done;g=f.next())if(g=g.value,(g.getAttribute("id")||g.getAttribute("name"))==e)return g;return null};return a}function Ic(a){var b=[];for(a=a.__shady_native_firstChild;a;a=a.__shady_native_nextSibling)b.push(a);return b}
1656
+ function Jc(a){var b=[];for(a=a.__shady_firstChild;a;a=a.__shady_nextSibling)b.push(a);return b}function Kc(a,b,c){c.configurable=!0;if(c.value)a[b]=c.value;else try{Object.defineProperty(a,b,c)}catch(d){}}function P(a,b,c,d){c=void 0===c?"":c;for(var e in b)d&&0<=d.indexOf(e)||Kc(a,c+e,b[e])}function Lc(a,b){for(var c in b)c in a&&Kc(a,c,b[c])}function Q(a){var b={};Object.getOwnPropertyNames(a).forEach(function(c){b[c]=Object.getOwnPropertyDescriptor(a,c)});return b}
1657
+ function Mc(a,b){for(var c=Object.getOwnPropertyNames(b),d=0,e;d<c.length;d++)e=c[d],a[e]=b[e]}function Nc(a){return a instanceof Node?a:document.createTextNode(""+a)}function Oc(a){for(var b=[],c=0;c<arguments.length;++c)b[c]=arguments[c];if(1===b.length)return Nc(b[0]);c=document.createDocumentFragment();b=ka(b);for(var d=b.next();!d.done;d=b.next())c.appendChild(Nc(d.value));return c};var Pc=[],Qc;function Rc(a){Qc||(Qc=!0,Dc(Sc));Pc.push(a)}function Sc(){Qc=!1;for(var a=!!Pc.length;Pc.length;)Pc.shift()();return a}Sc.list=Pc;function Tc(){this.g=!1;this.addedNodes=[];this.removedNodes=[];this.oa=new Set}function Uc(a){a.g||(a.g=!0,Dc(function(){a.flush()}))}Tc.prototype.flush=function(){if(this.g){this.g=!1;var a=this.takeRecords();a.length&&this.oa.forEach(function(b){b(a)})}};Tc.prototype.takeRecords=function(){if(this.addedNodes.length||this.removedNodes.length){var a=[{addedNodes:this.addedNodes,removedNodes:this.removedNodes}];this.addedNodes=[];this.removedNodes=[];return a}return[]};
1658
+ function Vc(a,b){var c=D(a);c.ea||(c.ea=new Tc);c.ea.oa.add(b);var d=c.ea;return{Ra:b,X:d,Sa:a,takeRecords:function(){return d.takeRecords()}}}function Wc(a){var b=a&&a.X;b&&(b.oa.delete(a.Ra),b.oa.size||(D(a.Sa).ea=null))}
1659
+ function Xc(a,b){var c=b.getRootNode();return a.map(function(d){var e=c===d.target.getRootNode();if(e&&d.addedNodes){if(e=[].slice.call(d.addedNodes).filter(function(f){return c===f.getRootNode()}),e.length)return d=Object.create(d),Object.defineProperty(d,"addedNodes",{value:e,configurable:!0}),d}else if(e)return d}).filter(function(d){return d})};var Yc=/[&\u00A0"]/g,Zc=/[&\u00A0<>]/g;function $c(a){switch(a){case "&":return"&amp;";case "<":return"&lt;";case ">":return"&gt;";case '"':return"&quot;";case "\u00a0":return"&nbsp;"}}function ad(a){for(var b={},c=0;c<a.length;c++)b[a[c]]=!0;return b}var bd=ad("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")),cd=ad("style script xmp iframe noembed noframes plaintext noscript".split(" "));
1660
+ function dd(a,b){"template"===a.localName&&(a=a.content);for(var c="",d=b?b(a):a.childNodes,e=0,f=d.length,g=void 0;e<f&&(g=d[e]);e++){a:{var h=g;var k=a,l=b;switch(h.nodeType){case Node.ELEMENT_NODE:k=h.localName;for(var m="<"+k,q=h.attributes,H=0,C;C=q[H];H++)m+=" "+C.name+'="'+C.value.replace(Yc,$c)+'"';m+=">";h=bd[k]?m:m+dd(h,l)+"</"+k+">";break a;case Node.TEXT_NODE:h=h.data;h=k&&cd[k.localName]?h:h.replace(Zc,$c);break a;case Node.COMMENT_NODE:h="\x3c!--"+h.data+"--\x3e";break a;default:throw window.console.error(h),
1661
+ Error("not implemented");}}c+=h}return c};var ed=N.H,fd={querySelector:function(a){return this.__shady_native_querySelector(a)},querySelectorAll:function(a){return this.__shady_native_querySelectorAll(a)}},gd={};function hd(a){gd[a]=function(b){return b["__shady_native_"+a]}}function id(a,b){P(a,b,"__shady_native_");for(var c in b)hd(c)}function S(a,b){b=void 0===b?[]:b;for(var c=0;c<b.length;c++){var d=b[c],e=Object.getOwnPropertyDescriptor(a,d);e&&(Object.defineProperty(a,"__shady_native_"+d,e),e.value?fd[d]||(fd[d]=e.value):hd(d))}}
1662
+ var jd=document.createTreeWalker(document,NodeFilter.SHOW_ALL,null,!1),kd=document.createTreeWalker(document,NodeFilter.SHOW_ELEMENT,null,!1),ld=document.implementation.createHTMLDocument("inert");function md(a){for(var b;b=a.__shady_native_firstChild;)a.__shady_native_removeChild(b)}var nd=["firstElementChild","lastElementChild","children","childElementCount"],od=["querySelector","querySelectorAll","append","prepend","replaceChildren"];
1663
+ function pd(){var a=["dispatchEvent","addEventListener","removeEventListener"];window.EventTarget?(S(window.EventTarget.prototype,a),void 0===window.__shady_native_addEventListener&&S(Window.prototype,a)):(S(Node.prototype,a),S(Window.prototype,a));ed?S(Node.prototype,"parentNode firstChild lastChild previousSibling nextSibling childNodes parentElement textContent".split(" ")):id(Node.prototype,{parentNode:{get:function(){jd.currentNode=this;return jd.parentNode()}},firstChild:{get:function(){jd.currentNode=
1664
+ this;return jd.firstChild()}},lastChild:{get:function(){jd.currentNode=this;return jd.lastChild()}},previousSibling:{get:function(){jd.currentNode=this;return jd.previousSibling()}},nextSibling:{get:function(){jd.currentNode=this;return jd.nextSibling()}},childNodes:{get:function(){var b=[];jd.currentNode=this;for(var c=jd.firstChild();c;)b.push(c),c=jd.nextSibling();return b}},parentElement:{get:function(){kd.currentNode=this;return kd.parentNode()}},textContent:{get:function(){switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:for(var b=
1665
+ document.createTreeWalker(this,NodeFilter.SHOW_TEXT,null,!1),c="",d;d=b.nextNode();)c+=d.nodeValue;return c;default:return this.nodeValue}},set:function(b){if("undefined"===typeof b||null===b)b="";switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:md(this);(0<b.length||this.nodeType===Node.ELEMENT_NODE)&&this.__shady_native_insertBefore(document.createTextNode(b),void 0);break;default:this.nodeValue=b}}}});S(Node.prototype,"appendChild insertBefore removeChild replaceChild cloneNode contains".split(" "));
1666
+ S(HTMLElement.prototype,["parentElement","contains"]);a={firstElementChild:{get:function(){kd.currentNode=this;return kd.firstChild()}},lastElementChild:{get:function(){kd.currentNode=this;return kd.lastChild()}},children:{get:function(){var b=[];kd.currentNode=this;for(var c=kd.firstChild();c;)b.push(c),c=kd.nextSibling();return Hc(b)}},childElementCount:{get:function(){return this.children?this.children.length:0}}};ed?(S(Element.prototype,nd),S(Element.prototype,["previousElementSibling","nextElementSibling",
1667
+ "innerHTML","className"]),S(HTMLElement.prototype,["children","innerHTML","className"])):(id(Element.prototype,a),id(Element.prototype,{previousElementSibling:{get:function(){kd.currentNode=this;return kd.previousSibling()}},nextElementSibling:{get:function(){kd.currentNode=this;return kd.nextSibling()}},innerHTML:{get:function(){return dd(this,Ic)},set:function(b){var c="template"===this.localName?this.content:this;md(c);var d=this.localName||"div";d=this.namespaceURI&&this.namespaceURI!==ld.namespaceURI?
1668
+ ld.createElementNS(this.namespaceURI,d):ld.createElement(d);d.innerHTML=b;for(b="template"===this.localName?d.content:d;d=b.__shady_native_firstChild;)c.__shady_native_insertBefore(d,void 0)}},className:{get:function(){return this.getAttribute("class")||""},set:function(b){this.setAttribute("class",b)}}}));S(Element.prototype,"setAttribute getAttribute hasAttribute removeAttribute focus blur".split(" "));S(Element.prototype,od);S(HTMLElement.prototype,["focus","blur"]);window.HTMLTemplateElement&&
1669
+ S(window.HTMLTemplateElement.prototype,["innerHTML"]);ed?S(DocumentFragment.prototype,nd):id(DocumentFragment.prototype,a);S(DocumentFragment.prototype,od);ed?(S(Document.prototype,nd),S(Document.prototype,["activeElement"])):id(Document.prototype,a);S(Document.prototype,["importNode","getElementById","elementFromPoint",uc()]);S(Document.prototype,od)};var qd=Q({get childNodes(){return this.__shady_childNodes},get firstChild(){return this.__shady_firstChild},get lastChild(){return this.__shady_lastChild},get childElementCount(){return this.__shady_childElementCount},get children(){return this.__shady_children},get firstElementChild(){return this.__shady_firstElementChild},get lastElementChild(){return this.__shady_lastElementChild},get shadowRoot(){return this.__shady_shadowRoot}}),rd=Q({get textContent(){return this.__shady_textContent},set textContent(a){this.__shady_textContent=
1670
+ a},get innerHTML(){return this.__shady_innerHTML},set innerHTML(a){this.__shady_innerHTML=a}}),sd=Q({get parentElement(){return this.__shady_parentElement},get parentNode(){return this.__shady_parentNode},get nextSibling(){return this.__shady_nextSibling},get previousSibling(){return this.__shady_previousSibling},get nextElementSibling(){return this.__shady_nextElementSibling},get previousElementSibling(){return this.__shady_previousElementSibling},get className(){return this.__shady_className},set className(a){this.__shady_className=
1671
+ a}});function td(a){for(var b in a){var c=a[b];c&&(c.enumerable=!1)}}td(qd);td(rd);td(sd);var ud=N.H||!0===N.J,vd=ud?function(){}:function(a){var b=D(a);b.Pa||(b.Pa=!0,Lc(a,sd))},wd=ud?function(){}:function(a){var b=D(a);b.Oa||(b.Oa=!0,Lc(a,qd),window.customElements&&window.customElements.polyfillWrapFlushCallback&&!N.J||Lc(a,rd))};var xd="__eventWrappers"+Date.now(),yd=function(){var a=Object.getOwnPropertyDescriptor(Event.prototype,"composed");return a?function(b){return a.get.call(b)}:null}(),zd=function(){function a(){}var b=!1,c={get capture(){b=!0;return!1}};window.addEventListener("test",a,c);window.removeEventListener("test",a,c);return b}();function Ad(a){if(a&&"object"===typeof a){var b=!!a.capture;var c=!!a.once;var d=!!a.passive;var e=a.U}else b=!!a,d=c=!1;return{La:e,capture:b,once:c,passive:d,Ja:zd?a:b}}
1672
+ var Bd={blur:!0,focus:!0,focusin:!0,focusout:!0,click:!0,dblclick:!0,mousedown:!0,mouseenter:!0,mouseleave:!0,mousemove:!0,mouseout:!0,mouseover:!0,mouseup:!0,wheel:!0,beforeinput:!0,input:!0,keydown:!0,keyup:!0,compositionstart:!0,compositionupdate:!0,compositionend:!0,touchstart:!0,touchend:!0,touchmove:!0,touchcancel:!0,pointerover:!0,pointerenter:!0,pointerdown:!0,pointermove:!0,pointerup:!0,pointercancel:!0,pointerout:!0,pointerleave:!0,gotpointercapture:!0,lostpointercapture:!0,dragstart:!0,
1673
+ drag:!0,dragenter:!0,dragleave:!0,dragover:!0,drop:!0,dragend:!0,DOMActivate:!0,DOMFocusIn:!0,DOMFocusOut:!0,keypress:!0},Cd={DOMAttrModified:!0,DOMAttributeNameChanged:!0,DOMCharacterDataModified:!0,DOMElementNameChanged:!0,DOMNodeInserted:!0,DOMNodeInsertedIntoDocument:!0,DOMNodeRemoved:!0,DOMNodeRemovedFromDocument:!0,DOMSubtreeModified:!0};function Dd(a){return a instanceof Node?a.__shady_getRootNode():a}
1674
+ function Ed(a,b){var c=[],d=a;for(a=Dd(a);d;)c.push(d),d=d.__shady_assignedSlot?d.__shady_assignedSlot:d.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&d.host&&(b||d!==a)?d.host:d.__shady_parentNode;c[c.length-1]===document&&c.push(window);return c}function Fd(a){a.__composedPath||(a.__composedPath=Ed(a.target,!0));return a.__composedPath}function Gd(a,b){if(!O)return a;a=Ed(a,!0);for(var c=0,d,e=void 0,f,g=void 0;c<b.length;c++)if(d=b[c],f=Dd(d),f!==e&&(g=a.indexOf(f),e=f),!O(f)||-1<g)return d}
1675
+ function Hd(a){function b(c,d){c=new a(c,d);c.__composed=d&&!!d.composed;return c}b.__proto__=a;b.prototype=a.prototype;return b}var Id={focus:!0,blur:!0};function Jd(a){return a.__target!==a.target||a.__relatedTarget!==a.relatedTarget}function Kd(a,b,c){if(c=b.__handlers&&b.__handlers[a.type]&&b.__handlers[a.type][c])for(var d=0,e;(e=c[d])&&(!Jd(a)||a.target!==a.relatedTarget)&&(e.call(b,a),!a.__immediatePropagationStopped);d++);}
1676
+ function Ld(a){var b=a.composedPath(),c=b.map(function(k){return Gd(k,b)}),d=a.bubbles;Object.defineProperty(a,"currentTarget",{configurable:!0,enumerable:!0,get:function(){return g}});var e=Event.CAPTURING_PHASE;Object.defineProperty(a,"eventPhase",{configurable:!0,enumerable:!0,get:function(){return e}});for(var f=b.length-1;0<=f;f--){var g=b[f];e=g===c[f]?Event.AT_TARGET:Event.CAPTURING_PHASE;Kd(a,g,"capture");if(a.ra)return}for(f=0;f<b.length;f++){g=b[f];var h=g===c[f];if(h||d)if(e=h?Event.AT_TARGET:
1677
+ Event.BUBBLING_PHASE,Kd(a,g,"bubble"),a.ra)return}e=0;g=null}function Md(a,b,c,d,e,f){for(var g=0;g<a.length;g++){var h=a[g],k=h.type,l=h.capture,m=h.once,q=h.passive;if(b===h.node&&c===k&&d===l&&e===m&&f===q)return g}return-1}function Nd(a){Sc();return!N.fa&&this instanceof Node&&!Ec(document,this)?(a.__target||Od(a,this),Ld(a)):this.__shady_native_dispatchEvent(a)}
1678
+ function Pd(a,b,c){var d=Ad(c),e=d.capture,f=d.once,g=d.passive,h=d.La;d=d.Ja;if(b){var k=typeof b;if("function"===k||"object"===k)if("object"!==k||b.handleEvent&&"function"===typeof b.handleEvent){if(Cd[a])return this.__shady_native_addEventListener(a,b,d);var l=h||this;if(h=b[xd]){if(-1<Md(h,l,a,e,f,g))return}else b[xd]=[];h=function(m){f&&this.__shady_removeEventListener(a,b,c);m.__target||Od(m);if(l!==this){var q=Object.getOwnPropertyDescriptor(m,"currentTarget");Object.defineProperty(m,"currentTarget",
1679
+ {get:function(){return l},configurable:!0});var H=Object.getOwnPropertyDescriptor(m,"eventPhase");Object.defineProperty(m,"eventPhase",{configurable:!0,enumerable:!0,get:function(){return e?Event.CAPTURING_PHASE:Event.BUBBLING_PHASE}})}m.__previousCurrentTarget=m.currentTarget;if(!O(l)&&"slot"!==l.localName||-1!=m.composedPath().indexOf(l))if(m.composed||-1<m.composedPath().indexOf(l))if(Jd(m)&&m.target===m.relatedTarget)m.eventPhase===Event.BUBBLING_PHASE&&m.stopImmediatePropagation();else if(m.eventPhase===
1680
+ Event.CAPTURING_PHASE||m.bubbles||m.target===l||l instanceof Window){var C="function"===k?b.call(l,m):b.handleEvent&&b.handleEvent(m);l!==this&&(q?(Object.defineProperty(m,"currentTarget",q),q=null):delete m.currentTarget,H?(Object.defineProperty(m,"eventPhase",H),H=null):delete m.eventPhase);return C}};b[xd].push({node:l,type:a,capture:e,once:f,passive:g,pb:h});this.__handlers=this.__handlers||{};this.__handlers[a]=this.__handlers[a]||{capture:[],bubble:[]};this.__handlers[a][e?"capture":"bubble"].push(h);
1681
+ Id[a]||this.__shady_native_addEventListener(a,h,d)}}}
1682
+ function Qd(a,b,c){if(b){var d=Ad(c);c=d.capture;var e=d.once,f=d.passive,g=d.La;d=d.Ja;if(Cd[a])return this.__shady_native_removeEventListener(a,b,d);var h=g||this;g=void 0;var k=null;try{k=b[xd]}catch(l){}k&&(e=Md(k,h,a,c,e,f),-1<e&&(g=k.splice(e,1)[0].pb,k.length||(b[xd]=void 0)));this.__shady_native_removeEventListener(a,g||b,d);g&&this.__handlers&&this.__handlers[a]&&(a=this.__handlers[a][c?"capture":"bubble"],b=a.indexOf(g),-1<b&&a.splice(b,1))}}
1683
+ function Rd(){for(var a in Id)window.__shady_native_addEventListener(a,function(b){b.__target||(Od(b),Ld(b))},!0)}
1684
+ var Sd=Q({get composed(){void 0===this.__composed&&(yd?this.__composed="focusin"===this.type||"focusout"===this.type||yd(this):!1!==this.isTrusted&&(this.__composed=Bd[this.type]));return this.__composed||!1},composedPath:function(){this.__composedPath||(this.__composedPath=Ed(this.__target,this.composed));return this.__composedPath},get target(){return Gd(this.currentTarget||this.__previousCurrentTarget,this.composedPath())},get relatedTarget(){if(!this.__relatedTarget)return null;this.__relatedTargetComposedPath||
1685
+ (this.__relatedTargetComposedPath=Ed(this.__relatedTarget,!0));return Gd(this.currentTarget||this.__previousCurrentTarget,this.__relatedTargetComposedPath)},stopPropagation:function(){Event.prototype.stopPropagation.call(this);this.ra=!0},stopImmediatePropagation:function(){Event.prototype.stopImmediatePropagation.call(this);this.ra=this.__immediatePropagationStopped=!0}});
1686
+ function Od(a,b){b=void 0===b?a.target:b;a.__target=b;a.__relatedTarget=a.relatedTarget;if(N.H){b=Object.getPrototypeOf(a);if(!b.hasOwnProperty("__shady_patchedProto")){var c=Object.create(b);c.__shady_sourceProto=b;P(c,Sd);b.__shady_patchedProto=c}a.__proto__=b.__shady_patchedProto}else P(a,Sd)}var Td=Hd(Event),Ud=Hd(CustomEvent),Vd=Hd(MouseEvent);
1687
+ function Wd(){if(!yd&&Object.getOwnPropertyDescriptor(Event.prototype,"isTrusted")){var a=function(){var b=new MouseEvent("click",{bubbles:!0,cancelable:!0,composed:!0});this.__shady_dispatchEvent(b)};Element.prototype.click?Element.prototype.click=a:HTMLElement.prototype.click&&(HTMLElement.prototype.click=a)}}
1688
+ var Xd=Object.getOwnPropertyNames(Element.prototype).filter(function(a){return"on"===a.substring(0,2)}),Yd=Object.getOwnPropertyNames(HTMLElement.prototype).filter(function(a){return"on"===a.substring(0,2)});function Zd(a){return{set:function(b){var c=D(this),d=a.substring(2);c.T||(c.T={});c.T[a]&&this.removeEventListener(d,c.T[a]);this.__shady_addEventListener(d,b);c.T[a]=b},get:function(){var b=L(this);return b&&b.T&&b.T[a]},configurable:!0}};function $d(a,b){return{index:a,ga:[],na:b}}
1689
+ function ae(a,b,c,d){var e=0,f=0,g=0,h=0,k=Math.min(b-e,d-f);if(0==e&&0==f)a:{for(g=0;g<k;g++)if(a[g]!==c[g])break a;g=k}if(b==a.length&&d==c.length){h=a.length;for(var l=c.length,m=0;m<k-g&&be(a[--h],c[--l]);)m++;h=m}e+=g;f+=g;b-=h;d-=h;if(0==b-e&&0==d-f)return[];if(e==b){for(b=$d(e,0);f<d;)b.ga.push(c[f++]);return[b]}if(f==d)return[$d(e,b-e)];k=e;g=f;d=d-g+1;h=b-k+1;b=Array(d);for(l=0;l<d;l++)b[l]=Array(h),b[l][0]=l;for(l=0;l<h;l++)b[0][l]=l;for(l=1;l<d;l++)for(m=1;m<h;m++)if(a[k+m-1]===c[g+l-1])b[l][m]=
1690
+ b[l-1][m-1];else{var q=b[l-1][m]+1,H=b[l][m-1]+1;b[l][m]=q<H?q:H}k=b.length-1;g=b[0].length-1;d=b[k][g];for(a=[];0<k||0<g;)0==k?(a.push(2),g--):0==g?(a.push(3),k--):(h=b[k-1][g-1],l=b[k-1][g],m=b[k][g-1],q=l<m?l<h?l:h:m<h?m:h,q==h?(h==d?a.push(0):(a.push(1),d=h),k--,g--):q==l?(a.push(3),k--,d=l):(a.push(2),g--,d=m));a.reverse();b=void 0;k=[];for(g=0;g<a.length;g++)switch(a[g]){case 0:b&&(k.push(b),b=void 0);e++;f++;break;case 1:b||(b=$d(e,0));b.na++;e++;b.ga.push(c[f]);f++;break;case 2:b||(b=$d(e,
1691
+ 0));b.na++;e++;break;case 3:b||(b=$d(e,0)),b.ga.push(c[f]),f++}b&&k.push(b);return k}function be(a,b){return a===b};var ce=Q({dispatchEvent:Nd,addEventListener:Pd,removeEventListener:Qd});var de=null;function ee(){de||(de=window.ShadyCSS&&window.ShadyCSS.ScopingShim);return de||null}function fe(a,b,c){var d=ee();return d&&"class"===b?(d.setElementClass(a,c),!0):!1}function ge(a,b){var c=ee();c&&c.unscopeNode(a,b)}function he(a,b){var c=ee();if(!c)return!0;if(a.nodeType===Node.DOCUMENT_FRAGMENT_NODE){c=!0;for(a=a.__shady_firstChild;a;a=a.__shady_nextSibling)c=c&&he(a,b);return c}return a.nodeType!==Node.ELEMENT_NODE?!0:c.currentScopeForNode(a)===b}
1692
+ function ie(a){if(a.nodeType!==Node.ELEMENT_NODE)return"";var b=ee();return b?b.currentScopeForNode(a):""}function je(a,b){if(a)for(a.nodeType===Node.ELEMENT_NODE&&b(a),a=a.__shady_firstChild;a;a=a.__shady_nextSibling)a.nodeType===Node.ELEMENT_NODE&&je(a,b)};var ke=window.document,le=N.fa,me=Object.getOwnPropertyDescriptor(Node.prototype,"isConnected"),ne=me&&me.get;function pe(a){for(var b;b=a.__shady_firstChild;)a.__shady_removeChild(b)}function qe(a){var b=L(a);if(b&&void 0!==b.qa)for(b=a.__shady_firstChild;b;b=b.__shady_nextSibling)qe(b);if(a=L(a))a.qa=void 0}function re(a){var b=a;if(a&&"slot"===a.localName){var c=L(a);(c=c&&c.aa)&&(b=c.length?c[0]:re(a.__shady_nextSibling))}return b}
1693
+ function se(a,b,c){if(a=(a=L(a))&&a.ea){if(b)if(b.nodeType===Node.DOCUMENT_FRAGMENT_NODE)for(var d=0,e=b.childNodes.length;d<e;d++)a.addedNodes.push(b.childNodes[d]);else a.addedNodes.push(b);c&&a.removedNodes.push(c);Uc(a)}}
1694
+ var ze=Q({get parentNode(){var a=L(this);a=a&&a.parentNode;return void 0!==a?a:this.__shady_native_parentNode},get firstChild(){var a=L(this);a=a&&a.firstChild;return void 0!==a?a:this.__shady_native_firstChild},get lastChild(){var a=L(this);a=a&&a.lastChild;return void 0!==a?a:this.__shady_native_lastChild},get nextSibling(){var a=L(this);a=a&&a.nextSibling;return void 0!==a?a:this.__shady_native_nextSibling},get previousSibling(){var a=L(this);a=a&&a.previousSibling;return void 0!==a?a:this.__shady_native_previousSibling},
1695
+ get childNodes(){if(vc(this)){var a=L(this);if(!a.childNodes){a.childNodes=[];for(var b=this.__shady_firstChild;b;b=b.__shady_nextSibling)a.childNodes.push(b)}var c=a.childNodes}else c=this.__shady_native_childNodes;c.item=function(d){return c[d]};return c},get parentElement(){var a=L(this);(a=a&&a.parentNode)&&a.nodeType!==Node.ELEMENT_NODE&&(a=null);return void 0!==a?a:this.__shady_native_parentElement},get isConnected(){if(ne&&ne.call(this))return!0;if(this.nodeType==Node.DOCUMENT_FRAGMENT_NODE)return!1;
1696
+ var a=this.ownerDocument;if(null===a||Ec(a,this))return!0;for(a=this;a&&!(a instanceof Document);)a=a.__shady_parentNode||(O(a)?a.host:void 0);return!!(a&&a instanceof Document)},get textContent(){if(vc(this)){for(var a=[],b=this.__shady_firstChild;b;b=b.__shady_nextSibling)b.nodeType!==Node.COMMENT_NODE&&a.push(b.__shady_textContent);return a.join("")}return this.__shady_native_textContent},set textContent(a){if("undefined"===typeof a||null===a)a="";switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:if(!vc(this)&&
1697
+ N.H){var b=this.__shady_firstChild;(b!=this.__shady_lastChild||b&&b.nodeType!=Node.TEXT_NODE)&&pe(this);this.__shady_native_textContent=a}else pe(this),(0<a.length||this.nodeType===Node.ELEMENT_NODE)&&this.__shady_insertBefore(document.createTextNode(a));break;default:this.nodeValue=a}},insertBefore:function(a,b){if(this.ownerDocument!==ke&&a.ownerDocument!==ke)return this.__shady_native_insertBefore(a,b),a;if(a===this)throw Error("Failed to execute 'appendChild' on 'Node': The new child element contains the parent.");
1698
+ if(b){var c=L(b);c=c&&c.parentNode;if(void 0!==c&&c!==this||void 0===c&&b.__shady_native_parentNode!==this)throw Error("Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.");}if(b===a)return a;se(this,a);var d=[],e=(c=te(this))?c.host.localName:ie(this),f=a.__shady_parentNode;if(f){var g=ie(a);var h=!!c||!te(a)||le&&void 0!==this.__noInsertionPoint;f.__shady_removeChild(a,h)}f=!0;var k=(!le||void 0===a.__noInsertionPoint&&void 0===
1699
+ this.__noInsertionPoint)&&!he(a,e),l=c&&!a.__noInsertionPoint&&(!le||a.nodeType===Node.DOCUMENT_FRAGMENT_NODE);if(l||k)k&&(g=g||ie(a)),je(a,function(m){l&&"slot"===m.localName&&d.push(m);if(k){var q=g;ee()&&(q&&ge(m,q),(q=ee())&&q.scopeNode(m,e))}});d.length&&(ue(c),c.i.push.apply(c.i,x(d)),ve(c));vc(this)&&(we(a,this,b),h=L(this),h.root?(f=!1,wc(this)&&ve(h.root)):c&&"slot"===this.localName&&(f=!1,ve(c)));f?(c=O(this)?this.host:this,b?(b=re(b),c.__shady_native_insertBefore(a,b)):c.__shady_native_appendChild(a)):
1700
+ a.ownerDocument!==this.ownerDocument&&this.ownerDocument.adoptNode(a);return a},appendChild:function(a){if(this!=a||!O(a))return this.__shady_insertBefore(a)},removeChild:function(a,b){b=void 0===b?!1:b;if(this.ownerDocument!==ke)return this.__shady_native_removeChild(a);if(a.__shady_parentNode!==this)throw Error("The node to be removed is not a child of this node: "+a);se(this,null,a);var c=te(a),d=c&&xe(c,a),e=L(this);if(vc(this)&&(ye(a,this),wc(this))){ve(e.root);var f=!0}if(ee()&&!b&&c&&a.nodeType!==
1701
+ Node.TEXT_NODE){var g=ie(a);je(a,function(h){ge(h,g)})}qe(a);c&&((b="slot"===this.localName)&&(f=!0),(d||b)&&ve(c));f||(f=O(this)?this.host:this,(!e.root&&"slot"!==a.localName||f===a.__shady_native_parentNode)&&f.__shady_native_removeChild(a));return a},replaceChild:function(a,b){this.__shady_insertBefore(a,b);this.__shady_removeChild(b);return a},cloneNode:function(a){if("template"==this.localName)return this.__shady_native_cloneNode(a);var b=this.__shady_native_cloneNode(!1);if(a&&b.nodeType!==
1702
+ Node.ATTRIBUTE_NODE){a=this.__shady_firstChild;for(var c;a;a=a.__shady_nextSibling)c=a.__shady_cloneNode(!0),b.__shady_appendChild(c)}return b},getRootNode:function(a){if(this&&this.nodeType){var b=D(this),c=b.qa;void 0===c&&(O(this)?(c=this,b.qa=c):(c=(c=this.__shady_parentNode)?c.__shady_getRootNode(a):this,document.documentElement.__shady_native_contains(this)&&(b.qa=c)));return c}},contains:function(a){return Gc(this,a)}});var Be=Q({get assignedSlot(){var a=this.__shady_parentNode;(a=a&&a.__shady_shadowRoot)&&Ae(a);return(a=L(this))&&a.assignedSlot||null}});function Ce(a,b,c){var d=[];De(a,b,c,d);return d}function De(a,b,c,d){for(a=a.__shady_firstChild;a;a=a.__shady_nextSibling){var e;if(e=a.nodeType===Node.ELEMENT_NODE){e=a;var f=b,g=c,h=d,k=f(e);k&&h.push(e);g&&g(k)?e=k:(De(e,f,g,h),e=void 0)}if(e)break}}
1703
+ var Ee={get firstElementChild(){var a=L(this);if(a&&void 0!==a.firstChild){for(a=this.__shady_firstChild;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.__shady_nextSibling;return a}return this.__shady_native_firstElementChild},get lastElementChild(){var a=L(this);if(a&&void 0!==a.lastChild){for(a=this.__shady_lastChild;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.__shady_previousSibling;return a}return this.__shady_native_lastElementChild},get children(){return vc(this)?Hc(Array.prototype.filter.call(Jc(this),
1704
+ function(a){return a.nodeType===Node.ELEMENT_NODE})):this.__shady_native_children},get childElementCount(){var a=this.__shady_children;return a?a.length:0}},Fe=Q((Ee.append=function(a){for(var b=[],c=0;c<arguments.length;++c)b[c]=arguments[c];this.__shady_insertBefore(Oc.apply(null,x(b)),null)},Ee.prepend=function(a){for(var b=[],c=0;c<arguments.length;++c)b[c]=arguments[c];this.__shady_insertBefore(Oc.apply(null,x(b)),this.__shady_firstChild)},Ee.replaceChildren=function(a){for(var b=[],c=0;c<arguments.length;++c)b[c]=
1705
+ arguments[c];for(;null!==(c=this.__shady_firstChild);)this.__shady_removeChild(c);this.__shady_insertBefore(Oc.apply(null,x(b)),null)},Ee)),Ge=Q({querySelector:function(a){return Ce(this,function(b){return zc.call(b,a)},function(b){return!!b})[0]||null},querySelectorAll:function(a,b){if(b){b=Array.prototype.slice.call(this.__shady_native_querySelectorAll(a));var c=this.__shady_getRootNode();return Hc(b.filter(function(d){return d.__shady_getRootNode()==c}))}return Hc(Ce(this,function(d){return zc.call(d,
1706
+ a)}))}}),He=N.fa&&!N.J?Mc({},Fe):Fe;Mc(Fe,Ge);var Ie=Q({after:function(a){for(var b=[],c=0;c<arguments.length;++c)b[c]=arguments[c];c=this.__shady_parentNode;if(null!==c){var d=this.__shady_nextSibling;c.__shady_insertBefore(Oc.apply(null,x(b)),d)}},before:function(a){for(var b=[],c=0;c<arguments.length;++c)b[c]=arguments[c];c=this.__shady_parentNode;null!==c&&c.__shady_insertBefore(Oc.apply(null,x(b)),this)},remove:function(){var a=this.__shady_parentNode;null!==a&&a.__shady_removeChild(this)},replaceWith:function(a){for(var b=[],c=0;c<arguments.length;++c)b[c]=
1707
+ arguments[c];c=this.__shady_parentNode;if(null!==c){var d=this.__shady_nextSibling;c.__shady_removeChild(this);c.__shady_insertBefore(Oc.apply(null,x(b)),d)}}});var Je=window.document;function Ke(a,b){if("slot"===b)a=a.__shady_parentNode,wc(a)&&ve(L(a).root);else if("slot"===a.localName&&"name"===b&&(b=te(a))){if(b.g){Le(b);var c=a.Qa,d=Me(a);if(d!==c){c=b.h[c];var e=c.indexOf(a);0<=e&&c.splice(e,1);c=b.h[d]||(b.h[d]=[]);c.push(a);1<c.length&&(b.h[d]=Ne(c))}}ve(b)}}
1708
+ var Oe=Q({get previousElementSibling(){var a=L(this);if(a&&void 0!==a.previousSibling){for(a=this.__shady_previousSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.__shady_previousSibling;return a}return this.__shady_native_previousElementSibling},get nextElementSibling(){var a=L(this);if(a&&void 0!==a.nextSibling){for(a=this.__shady_nextSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.__shady_nextSibling;return a}return this.__shady_native_nextElementSibling},get slot(){return this.getAttribute("slot")},
1709
+ set slot(a){this.__shady_setAttribute("slot",a)},get className(){return this.getAttribute("class")||""},set className(a){this.__shady_setAttribute("class",a)},setAttribute:function(a,b){this.ownerDocument!==Je?this.__shady_native_setAttribute(a,b):fe(this,a,b)||(this.__shady_native_setAttribute(a,b),Ke(this,a))},removeAttribute:function(a){this.ownerDocument!==Je?this.__shady_native_removeAttribute(a):fe(this,a,"")?""===this.getAttribute(a)&&this.__shady_native_removeAttribute(a):(this.__shady_native_removeAttribute(a),
1710
+ Ke(this,a))}});N.fa||Xd.forEach(function(a){Oe[a]=Zd(a)});
1711
+ var Te=Q({attachShadow:function(a){if(!this)throw Error("Must provide a host.");if(!a)throw Error("Not enough arguments.");if(a.shadyUpgradeFragment&&!N.Na){var b=a.shadyUpgradeFragment;b.__proto__=ShadowRoot.prototype;Pe(b,this,a);Qe(b,b);a=b.__noInsertionPoint?null:b.querySelectorAll("slot");b.__noInsertionPoint=void 0;if(a&&a.length){var c=b;ue(c);c.i.push.apply(c.i,x(a));ve(b)}b.host.__shady_native_appendChild(b)}else b=new Re(Se,this,a);return this.__CE_shadowRoot=b},get shadowRoot(){var a=L(this);
1712
+ return a&&a.gb||null}});Mc(Oe,Te);var Ue=document.implementation.createHTMLDocument("inert"),Ve=Q({get innerHTML(){return vc(this)?dd("template"===this.localName?this.content:this,Jc):this.__shady_native_innerHTML},set innerHTML(a){if("template"===this.localName)this.__shady_native_innerHTML=a;else{pe(this);var b=this.localName||"div";b=this.namespaceURI&&this.namespaceURI!==Ue.namespaceURI?Ue.createElementNS(this.namespaceURI,b):Ue.createElement(b);for(N.H?b.__shady_native_innerHTML=a:b.innerHTML=a;a=b.__shady_firstChild;)this.__shady_insertBefore(a)}}});var We=Q({blur:function(){var a=L(this);(a=(a=a&&a.root)&&a.activeElement)?a.__shady_blur():this.__shady_native_blur()}});N.fa||Yd.forEach(function(a){We[a]=Zd(a)});var Xe=Q({assignedNodes:function(a){if("slot"===this.localName){var b=this.__shady_getRootNode();b&&O(b)&&Ae(b);return(b=L(this))?(a&&a.flatten?b.aa:b.assignedNodes)||[]:[]}},addEventListener:function(a,b,c){if("slot"!==this.localName||"slotchange"===a)Pd.call(this,a,b,c);else{"object"!==typeof c&&(c={capture:!!c});var d=this.__shady_parentNode;if(!d)throw Error("ShadyDOM cannot attach event to slot unless it has a `parentNode`");c.U=this;d.__shady_addEventListener(a,b,c)}},removeEventListener:function(a,
1713
+ b,c){if("slot"!==this.localName||"slotchange"===a)Qd.call(this,a,b,c);else{"object"!==typeof c&&(c={capture:!!c});var d=this.__shady_parentNode;if(!d)throw Error("ShadyDOM cannot attach event to slot unless it has a `parentNode`");c.U=this;d.__shady_removeEventListener(a,b,c)}}});var Ye=Q({getElementById:function(a){return""===a?null:Ce(this,function(b){return b.id==a},function(b){return!!b})[0]||null}});function Ze(a,b){for(var c;b&&!a.has(c=b.__shady_getRootNode());)b=c.host;return b}function $e(a){var b=new Set;for(b.add(a);O(a)&&a.host;)a=a.host.__shady_getRootNode(),b.add(a);return b}
1714
+ var af="__shady_native_"+uc(),bf=Q({get activeElement(){var a=N.H?document.__shady_native_activeElement:document.activeElement;if(!a||!a.nodeType)return null;var b=!!O(this);if(!(this===document||b&&this.host!==a&&this.host.__shady_native_contains(a)))return null;for(b=te(a);b&&b!==this;)a=b.host,b=te(a);return this===document?b?null:a:b===this?a:null},elementsFromPoint:function(a,b){a=[].slice.call(document[af](a,b));b=$e(this);for(var c=new Set,d=0;d<a.length;d++)c.add(Ze(b,a[d]));var e=[];c.forEach(function(f){return e.push(f)});
1715
+ return e},elementFromPoint:function(a,b){return this.__shady_elementsFromPoint(a,b)[0]||null}});var cf=window.document,df=Q({importNode:function(a,b){if(a.ownerDocument!==cf||"template"===a.localName)return this.__shady_native_importNode(a,b);var c=this.__shady_native_importNode(a,!1);if(b)for(a=a.__shady_firstChild;a;a=a.__shady_nextSibling)b=this.__shady_importNode(a,!0),c.__shady_appendChild(b);return c}});var ef=Q({dispatchEvent:Nd,addEventListener:Pd.bind(window),removeEventListener:Qd.bind(window)});var ff={};Object.getOwnPropertyDescriptor(HTMLElement.prototype,"parentElement")&&(ff.parentElement=ze.parentElement);Object.getOwnPropertyDescriptor(HTMLElement.prototype,"contains")&&(ff.contains=ze.contains);Object.getOwnPropertyDescriptor(HTMLElement.prototype,"children")&&(ff.children=Fe.children);Object.getOwnPropertyDescriptor(HTMLElement.prototype,"innerHTML")&&(ff.innerHTML=Ve.innerHTML);Object.getOwnPropertyDescriptor(HTMLElement.prototype,"className")&&(ff.className=Oe.className);
1716
+ var gf={EventTarget:[ce],Node:[ze,window.EventTarget?null:ce],Text:[Be],Comment:[Be],CDATASection:[Be],ProcessingInstruction:[Be],Element:[Oe,Fe,Ie,Be,!N.H||"innerHTML"in Element.prototype?Ve:null,window.HTMLSlotElement?null:Xe],HTMLElement:[We,ff],HTMLSlotElement:[Xe],DocumentFragment:[He,Ye],Document:[df,He,Ye,bf],Window:[ef],CharacterData:[Ie]},hf=N.H?null:["innerHTML","textContent"];function jf(a,b,c,d){b.forEach(function(e){return a&&e&&P(a,e,c,d)})}
1717
+ function kf(a){var b=a?null:hf,c;for(c in gf)jf(window[c]&&window[c].prototype,gf[c],a,b)}["Text","Comment","CDATASection","ProcessingInstruction"].forEach(function(a){var b=window[a],c=Object.create(b.prototype);c.__shady_protoIsPatched=!0;jf(c,gf.EventTarget);jf(c,gf.Node);gf[a]&&jf(c,gf[a]);b.prototype.__shady_patchedProto=c});function lf(a){a.__shady_protoIsPatched=!0;jf(a,gf.EventTarget);jf(a,gf.Node);jf(a,gf.Element);jf(a,gf.HTMLElement);jf(a,gf.HTMLSlotElement);return a};var mf=N.Aa,nf=N.H;function of(a,b){if(mf&&!a.__shady_protoIsPatched&&!O(a)){var c=Object.getPrototypeOf(a),d=c.hasOwnProperty("__shady_patchedProto")&&c.__shady_patchedProto;d||(d=Object.create(c),lf(d),c.__shady_patchedProto=d);Object.setPrototypeOf(a,d)}nf||(1===b?vd(a):2===b&&wd(a))}
1718
+ function pf(a,b,c,d){of(a,1);d=d||null;var e=D(a),f=d?D(d):null;e.previousSibling=d?f.previousSibling:b.__shady_lastChild;if(f=L(e.previousSibling))f.nextSibling=a;if(f=L(e.nextSibling=d))f.previousSibling=a;e.parentNode=b;d?d===c.firstChild&&(c.firstChild=a):(c.lastChild=a,c.firstChild||(c.firstChild=a));c.childNodes=null}
1719
+ function we(a,b,c){of(b,2);var d=D(b);void 0!==d.firstChild&&(d.childNodes=null);if(a.nodeType===Node.DOCUMENT_FRAGMENT_NODE)for(a=a.__shady_native_firstChild;a;a=a.__shady_native_nextSibling)pf(a,b,d,c);else pf(a,b,d,c)}
1720
+ function ye(a,b){var c=D(a);b=D(b);a===b.firstChild&&(b.firstChild=c.nextSibling);a===b.lastChild&&(b.lastChild=c.previousSibling);a=c.previousSibling;var d=c.nextSibling;a&&(D(a).nextSibling=d);d&&(D(d).previousSibling=a);c.parentNode=c.previousSibling=c.nextSibling=void 0;void 0!==b.childNodes&&(b.childNodes=null)}
1721
+ function Qe(a,b){var c=D(a);if(b||void 0===c.firstChild){c.childNodes=null;var d=c.firstChild=a.__shady_native_firstChild;c.lastChild=a.__shady_native_lastChild;of(a,2);c=d;for(d=void 0;c;c=c.__shady_native_nextSibling){var e=D(c);e.parentNode=b||a;e.nextSibling=c.__shady_native_nextSibling;e.previousSibling=d||null;d=c;of(c,1)}}};var qf=Q({addEventListener:function(a,b,c){"object"!==typeof c&&(c={capture:!!c});c.U=c.U||this;this.host.__shady_addEventListener(a,b,c)},removeEventListener:function(a,b,c){"object"!==typeof c&&(c={capture:!!c});c.U=c.U||this;this.host.__shady_removeEventListener(a,b,c)}});function rf(a,b){P(a,qf,b);P(a,bf,b);P(a,Ve,b);P(a,Fe,b);N.J&&!b?(P(a,ze,b),P(a,Ye,b)):N.H||(P(a,sd),P(a,qd),P(a,rd))};var Se={},sf=N.deferConnectionCallbacks&&"loading"===document.readyState,tf;function uf(a){var b=[];do b.unshift(a);while(a=a.__shady_parentNode);return b}function Re(a,b,c){if(a!==Se)throw new TypeError("Illegal constructor");this.g=null;Pe(this,b,c)}
1722
+ function Pe(a,b,c){a.host=b;a.mode=c&&c.mode;Qe(a.host);b=D(a.host);b.root=a;b.gb="closed"!==a.mode?a:null;b=D(a);b.firstChild=b.lastChild=b.parentNode=b.nextSibling=b.previousSibling=null;if(N.preferPerformance)for(;b=a.host.__shady_native_firstChild;)a.host.__shady_native_removeChild(b);else ve(a)}function ve(a){a.Y||(a.Y=!0,Rc(function(){return Ae(a)}))}
1723
+ function Ae(a){var b;if(b=a.Y){for(var c;a;)a:{a.Y&&(c=a),b=a;a=b.host.__shady_getRootNode();if(O(a)&&(b=L(b.host))&&0<b.ia)break a;a=void 0}b=c}(c=b)&&c._renderSelf()}
1724
+ Re.prototype._renderSelf=function(){var a=sf;sf=!0;this.Y=!1;if(this.g){Le(this);for(var b=0,c;b<this.g.length;b++){c=this.g[b];var d=L(c),e=d.assignedNodes;d.assignedNodes=[];d.aa=[];if(d.Ga=e)for(d=0;d<e.length;d++){var f=L(e[d]);f.ua=f.assignedSlot;f.assignedSlot===c&&(f.assignedSlot=null)}}for(b=this.host.__shady_firstChild;b;b=b.__shady_nextSibling)vf(this,b);for(b=0;b<this.g.length;b++){c=this.g[b];e=L(c);if(!e.assignedNodes.length)for(d=c.__shady_firstChild;d;d=d.__shady_nextSibling)vf(this,
1725
+ d,c);(d=(d=L(c.__shady_parentNode))&&d.root)&&(xc(d)||d.Y)&&d._renderSelf();wf(this,e.aa,e.assignedNodes);if(d=e.Ga){for(f=0;f<d.length;f++)L(d[f]).ua=null;e.Ga=null;d.length>e.assignedNodes.length&&(e.xa=!0)}e.xa&&(e.xa=!1,xf(this,c))}c=this.g;b=[];for(e=0;e<c.length;e++)d=c[e].__shady_parentNode,(f=L(d))&&f.root||!(0>b.indexOf(d))||b.push(d);for(c=0;c<b.length;c++){f=b[c];e=f===this?this.host:f;d=[];for(f=f.__shady_firstChild;f;f=f.__shady_nextSibling)if("slot"==f.localName)for(var g=L(f).aa,h=
1726
+ 0;h<g.length;h++)d.push(g[h]);else d.push(f);f=Ic(e);g=ae(d,d.length,f,f.length);for(var k=h=0,l=void 0;h<g.length&&(l=g[h]);h++){for(var m=0,q=void 0;m<l.ga.length&&(q=l.ga[m]);m++)q.__shady_native_parentNode===e&&e.__shady_native_removeChild(q),f.splice(l.index+k,1);k-=l.na}k=0;for(l=void 0;k<g.length&&(l=g[k]);k++)for(h=f[l.index],m=l.index;m<l.index+l.na;m++)q=d[m],e.__shady_native_insertBefore(q,h),f.splice(m,0,q)}}if(!N.preferPerformance&&!this.Fa)for(b=this.host.__shady_firstChild;b;b=b.__shady_nextSibling)c=
1727
+ L(b),b.__shady_native_parentNode!==this.host||"slot"!==b.localName&&c.assignedSlot||this.host.__shady_native_removeChild(b);this.Fa=!0;sf=a;tf&&tf()};function vf(a,b,c){var d=D(b),e=d.ua;d.ua=null;c||(c=(a=a.h[b.__shady_slot||"__catchall"])&&a[0]);c?(D(c).assignedNodes.push(b),d.assignedSlot=c):d.assignedSlot=void 0;e!==d.assignedSlot&&d.assignedSlot&&(D(d.assignedSlot).xa=!0)}
1728
+ function wf(a,b,c){for(var d=0,e=void 0;d<c.length&&(e=c[d]);d++)if("slot"==e.localName){var f=L(e).assignedNodes;f&&f.length&&wf(a,b,f)}else b.push(c[d])}function xf(a,b){b.__shady_native_dispatchEvent(new Event("slotchange"));b=L(b);b.assignedSlot&&xf(a,b.assignedSlot)}function ue(a){a.i=a.i||[];a.g=a.g||[];a.h=a.h||{}}
1729
+ function Le(a){if(a.i&&a.i.length){for(var b=a.i,c,d=0;d<b.length;d++){var e=b[d];Qe(e);var f=e.__shady_parentNode;Qe(f);f=L(f);f.ia=(f.ia||0)+1;f=Me(e);a.h[f]?(c=c||{},c[f]=!0,a.h[f].push(e)):a.h[f]=[e];a.g.push(e)}if(c)for(var g in c)a.h[g]=Ne(a.h[g]);a.i=[]}}function Me(a){var b=a.name||a.getAttribute("name")||"__catchall";return a.Qa=b}
1730
+ function Ne(a){return a.sort(function(b,c){b=uf(b);for(var d=uf(c),e=0;e<b.length;e++){c=b[e];var f=d[e];if(c!==f)return b=Jc(c.__shady_parentNode),b.indexOf(c)-b.indexOf(f)}})}
1731
+ function xe(a,b){if(a.g){Le(a);var c=a.h,d;for(d in c)for(var e=c[d],f=0;f<e.length;f++){var g=e[f];if(Gc(b,g)){e.splice(f,1);var h=a.g.indexOf(g);0<=h&&(a.g.splice(h,1),(h=L(g.__shady_parentNode))&&h.ia&&h.ia--);f--;g=L(g);if(h=g.aa)for(var k=0;k<h.length;k++){var l=h[k],m=l.__shady_native_parentNode;m&&m.__shady_native_removeChild(l)}g.aa=[];g.assignedNodes=[];h=!0}}return h}}function xc(a){Le(a);return!(!a.g||!a.g.length)}
1732
+ (function(a){a.__proto__=DocumentFragment.prototype;rf(a,"__shady_");rf(a);Object.defineProperties(a,{nodeType:{value:Node.DOCUMENT_FRAGMENT_NODE,configurable:!0},nodeName:{value:"#document-fragment",configurable:!0},nodeValue:{value:null,configurable:!0}});["localName","namespaceURI","prefix"].forEach(function(b){Object.defineProperty(a,b,{value:void 0,configurable:!0})});["ownerDocument","baseURI","isConnected"].forEach(function(b){Object.defineProperty(a,b,{get:function(){return this.host[b]},
1733
+ configurable:!0})})})(Re.prototype);
1734
+ if(window.customElements&&window.customElements.define&&N.ya&&!N.preferPerformance){var yf=new Map;tf=function(){var a=[];yf.forEach(function(d,e){a.push([e,d])});yf.clear();for(var b=0;b<a.length;b++){var c=a[b][0];a[b][1]?c.__shadydom_connectedCallback():c.__shadydom_disconnectedCallback()}};sf&&document.addEventListener("readystatechange",function(){sf=!1;tf()},{once:!0});var zf=function(a,b,c){var d=0,e="__isConnected"+d++;if(b||c)a.prototype.connectedCallback=a.prototype.__shadydom_connectedCallback=
1735
+ function(){sf?yf.set(this,!0):this[e]||(this[e]=!0,b&&b.call(this))},a.prototype.disconnectedCallback=a.prototype.__shadydom_disconnectedCallback=function(){sf?this.isConnected||yf.set(this,!1):this[e]&&(this[e]=!1,c&&c.call(this))};return a},Af=window.customElements.define,Bf=function(a,b){var c=b.prototype.connectedCallback,d=b.prototype.disconnectedCallback;Af.call(window.customElements,a,zf(b,c,d));b.prototype.connectedCallback=c;b.prototype.disconnectedCallback=d};window.customElements.define=
1736
+ Bf;Object.defineProperty(window.CustomElementRegistry.prototype,"define",{value:Bf,configurable:!0})}function te(a){a=a.__shady_getRootNode();if(O(a))return a};function Cf(a){this.node=a}v=Cf.prototype;v.addEventListener=function(a,b,c){return this.node.__shady_addEventListener(a,b,c)};v.removeEventListener=function(a,b,c){return this.node.__shady_removeEventListener(a,b,c)};v.appendChild=function(a){return this.node.__shady_appendChild(a)};v.insertBefore=function(a,b){return this.node.__shady_insertBefore(a,b)};v.removeChild=function(a){return this.node.__shady_removeChild(a)};v.replaceChild=function(a,b){return this.node.__shady_replaceChild(a,b)};
1737
+ v.cloneNode=function(a){return this.node.__shady_cloneNode(a)};v.getRootNode=function(a){return this.node.__shady_getRootNode(a)};v.contains=function(a){return this.node.__shady_contains(a)};v.dispatchEvent=function(a){return this.node.__shady_dispatchEvent(a)};v.setAttribute=function(a,b){this.node.__shady_setAttribute(a,b)};v.getAttribute=function(a){return this.node.__shady_native_getAttribute(a)};v.hasAttribute=function(a){return this.node.__shady_native_hasAttribute(a)};v.removeAttribute=function(a){this.node.__shady_removeAttribute(a)};
1738
+ v.attachShadow=function(a){return this.node.__shady_attachShadow(a)};v.focus=function(){this.node.__shady_native_focus()};v.blur=function(){this.node.__shady_blur()};v.importNode=function(a,b){if(this.node.nodeType===Node.DOCUMENT_NODE)return this.node.__shady_importNode(a,b)};v.getElementById=function(a){if(this.node.nodeType===Node.DOCUMENT_NODE)return this.node.__shady_getElementById(a)};v.elementsFromPoint=function(a,b){return this.node.__shady_elementsFromPoint(a,b)};
1739
+ v.elementFromPoint=function(a,b){return this.node.__shady_elementFromPoint(a,b)};v.querySelector=function(a){return this.node.__shady_querySelector(a)};v.querySelectorAll=function(a,b){return this.node.__shady_querySelectorAll(a,b)};v.assignedNodes=function(a){if("slot"===this.node.localName)return this.node.__shady_assignedNodes(a)};v.append=function(a){for(var b=[],c=0;c<arguments.length;++c)b[c]=arguments[c];return this.node.__shady_append.apply(this.node,x(b))};
1740
+ v.prepend=function(a){for(var b=[],c=0;c<arguments.length;++c)b[c]=arguments[c];return this.node.__shady_prepend.apply(this.node,x(b))};v.after=function(a){for(var b=[],c=0;c<arguments.length;++c)b[c]=arguments[c];return this.node.__shady_after.apply(this.node,x(b))};v.before=function(a){for(var b=[],c=0;c<arguments.length;++c)b[c]=arguments[c];return this.node.__shady_before.apply(this.node,x(b))};v.remove=function(){return this.node.__shady_remove()};
1741
+ v.replaceWith=function(a){for(var b=[],c=0;c<arguments.length;++c)b[c]=arguments[c];return this.node.__shady_replaceWith.apply(this.node,x(b))};
1742
+ ea.Object.defineProperties(Cf.prototype,{activeElement:{configurable:!0,enumerable:!0,get:function(){if(O(this.node)||this.node.nodeType===Node.DOCUMENT_NODE)return this.node.__shady_activeElement}},_activeElement:{configurable:!0,enumerable:!0,get:function(){return this.activeElement}},host:{configurable:!0,enumerable:!0,get:function(){if(O(this.node))return this.node.host}},parentNode:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_parentNode}},firstChild:{configurable:!0,
1693
1743
  enumerable:!0,get:function(){return this.node.__shady_firstChild}},lastChild:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_lastChild}},nextSibling:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_nextSibling}},previousSibling:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_previousSibling}},childNodes:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_childNodes}},parentElement:{configurable:!0,enumerable:!0,
1694
1744
  get:function(){return this.node.__shady_parentElement}},firstElementChild:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_firstElementChild}},lastElementChild:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_lastElementChild}},nextElementSibling:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_nextElementSibling}},previousElementSibling:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_previousElementSibling}},
1695
1745
  children:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_children}},childElementCount:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_childElementCount}},shadowRoot:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_shadowRoot}},assignedSlot:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_assignedSlot}},isConnected:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_isConnected}},innerHTML:{configurable:!0,
1696
- enumerable:!0,get:function(){return this.node.__shady_innerHTML},set:function(a){this.node.__shady_innerHTML=a}},textContent:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_textContent},set:function(a){this.node.__shady_textContent=a}},slot:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_slot},set:function(a){this.node.__shady_slot=a}},className:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_className},set:function(a){return this.node.__shady_className=
1697
- a}}});function se(a){Object.defineProperty(re.prototype,a,{get:function(){return this.node["__shady_"+a]},set:function(b){this.node["__shady_"+a]=b},configurable:!0})}Sc.forEach(function(a){return se(a)});Tc.forEach(function(a){return se(a)});var te=new WeakMap;function ue(a){if(O(a)||a instanceof re)return a;var b=te.get(a);b||(b=new re(a),te.set(a,b));return b};if(N.sa){var ve=N.B?function(a){return a}:function(a){rc(a);qc(a);return a},ShadyDOM={inUse:N.sa,patch:ve,isShadyRoot:O,enqueue:Kb,flush:Lb,flushInitial:function(a){!a.Aa&&a.T&&vd(a)},settings:N,filterMutations:Qb,observeChildren:Ob,unobserveChildren:Pb,deferConnectionCallbacks:N.deferConnectionCallbacks,preferPerformance:N.preferPerformance,handlesDynamicScoping:!0,wrap:N.D?ue:ve,wrapIfNeeded:!0===N.D?ue:function(a){return a},Wrapper:re,composedPath:Ac,noPatch:N.D,patchOnDemand:N.ua,nativeMethods:ac,
1698
- nativeTree:bc,patchElementProto:ae};window.ShadyDOM=ShadyDOM;kc();$d("__shady_");Object.defineProperty(document,"_activeElement",Sd.activeElement);P(Window.prototype,Vd,"__shady_");N.D?N.ua&&P(Element.prototype,Md):($d(),Rc());Mc();window.Event=Oc;window.CustomEvent=Pc;window.MouseEvent=Qc;window.ShadowRoot=Kd};/*
1746
+ enumerable:!0,get:function(){return this.node.__shady_innerHTML},set:function(a){this.node.__shady_innerHTML=a}},textContent:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_textContent},set:function(a){this.node.__shady_textContent=a}},slot:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_slot},set:function(a){this.node.__shady_slot=a}},className:{configurable:!0,enumerable:!0,get:function(){return this.node.__shady_className},set:function(a){this.node.__shady_className=
1747
+ a}}});function Df(a){Object.defineProperty(Cf.prototype,a,{get:function(){return this.node["__shady_"+a]},set:function(b){this.node["__shady_"+a]=b},configurable:!0})}Xd.forEach(function(a){return Df(a)});Yd.forEach(function(a){return Df(a)});var Ef=new WeakMap;function Ff(a){if(O(a)||a instanceof Cf)return a;var b=Ef.get(a);b||(b=new Cf(a),Ef.set(a,b));return b};if(N.ya){var Gf=N.H?function(a){return a}:function(a){wd(a);vd(a);return a},ShadyDOM={inUse:N.ya,patch:Gf,isShadyRoot:O,enqueue:Rc,flush:Sc,flushInitial:function(a){!a.Fa&&a.Y&&Ae(a)},settings:N,filterMutations:Xc,observeChildren:Vc,unobserveChildren:Wc,deferConnectionCallbacks:N.deferConnectionCallbacks,preferPerformance:N.preferPerformance,handlesDynamicScoping:!0,wrap:N.J?Ff:Gf,wrapIfNeeded:!0===N.J?Ff:function(a){return a},Wrapper:Cf,composedPath:Fd,noPatch:N.J,patchOnDemand:N.Aa,nativeMethods:fd,
1748
+ nativeTree:gd,patchElementProto:lf};window.ShadyDOM=ShadyDOM;pd();kf("__shady_");Object.defineProperty(document,"_activeElement",bf.activeElement);P(Window.prototype,ef,"__shady_");N.J?N.Aa&&P(Element.prototype,Te):(kf(),Wd());Rd();window.Event=Td;window.CustomEvent=Ud;window.MouseEvent=Vd;window.ShadowRoot=Re};var Hf=window.Document.prototype.createElement,If=window.Document.prototype.createElementNS,Jf=window.Document.prototype.importNode,Kf=window.Document.prototype.prepend,Lf=window.Document.prototype.append,Mf=window.DocumentFragment.prototype.prepend,Nf=window.DocumentFragment.prototype.append,Of=window.Node.prototype.cloneNode,Pf=window.Node.prototype.appendChild,Qf=window.Node.prototype.insertBefore,Rf=window.Node.prototype.removeChild,Sf=window.Node.prototype.replaceChild,Tf=Object.getOwnPropertyDescriptor(window.Node.prototype,
1749
+ "textContent"),Uf=window.Element.prototype.attachShadow,Vf=Object.getOwnPropertyDescriptor(window.Element.prototype,"innerHTML"),Wf=window.Element.prototype.getAttribute,Xf=window.Element.prototype.setAttribute,Yf=window.Element.prototype.removeAttribute,Zf=window.Element.prototype.getAttributeNS,$f=window.Element.prototype.setAttributeNS,ag=window.Element.prototype.removeAttributeNS,bg=window.Element.prototype.insertAdjacentElement,cg=window.Element.prototype.insertAdjacentHTML,dg=window.Element.prototype.prepend,
1750
+ eg=window.Element.prototype.append,fg=window.Element.prototype.before,gg=window.Element.prototype.after,hg=window.Element.prototype.replaceWith,ig=window.Element.prototype.remove,jg=window.HTMLElement,kg=Object.getOwnPropertyDescriptor(window.HTMLElement.prototype,"innerHTML"),lg=window.HTMLElement.prototype.insertAdjacentElement,mg=window.HTMLElement.prototype.insertAdjacentHTML;var ng=new Set;"annotation-xml color-profile font-face font-face-src font-face-uri font-face-format font-face-name missing-glyph".split(" ").forEach(function(a){return ng.add(a)});function og(a){var b=ng.has(a);a=/^[a-z][.0-9_a-z]*-[-.0-9_a-z]*$/.test(a);return!b&&a}var pg=document.contains?document.contains.bind(document):document.documentElement.contains.bind(document.documentElement);
1751
+ function T(a){var b=a.isConnected;if(void 0!==b)return b;if(pg(a))return!0;for(;a&&!(a.__CE_isImportDocument||a instanceof Document);)a=a.parentNode||(window.ShadowRoot&&a instanceof ShadowRoot?a.host:void 0);return!(!a||!(a.__CE_isImportDocument||a instanceof Document))}function qg(a){var b=a.children;if(b)return Array.prototype.slice.call(b);b=[];for(a=a.firstChild;a;a=a.nextSibling)a.nodeType===Node.ELEMENT_NODE&&b.push(a);return b}
1752
+ function rg(a,b){for(;b&&b!==a&&!b.nextSibling;)b=b.parentNode;return b&&b!==a?b.nextSibling:null}
1753
+ function sg(a,b,c){for(var d=a;d;){if(d.nodeType===Node.ELEMENT_NODE){var e=d;b(e);var f=e.localName;if("link"===f&&"import"===e.getAttribute("rel")){d=e.import;void 0===c&&(c=new Set);if(d instanceof Node&&!c.has(d))for(c.add(d),d=d.firstChild;d;d=d.nextSibling)sg(d,b,c);d=rg(a,e);continue}else if("template"===f){d=rg(a,e);continue}if(e=e.__CE_shadowRoot)for(e=e.firstChild;e;e=e.nextSibling)sg(e,b,c)}d=d.firstChild?d.firstChild:rg(a,d)}};function tg(){var a=!(null===ug||void 0===ug||!ug.noDocumentConstructionObserver),b=!(null===ug||void 0===ug||!ug.shadyDomFastWalk);this.ca=[];this.g=[];this.W=!1;this.shadyDomFastWalk=b;this.nb=!a}function vg(a,b,c,d){var e=window.ShadyDOM;if(a.shadyDomFastWalk&&e&&e.inUse){if(b.nodeType===Node.ELEMENT_NODE&&c(b),b.querySelectorAll)for(a=e.nativeMethods.querySelectorAll.call(b,"*"),b=0;b<a.length;b++)c(a[b])}else sg(b,c,d)}function wg(a,b){a.W=!0;a.ca.push(b)}
1754
+ function xg(a,b){a.W=!0;a.g.push(b)}function yg(a,b){a.W&&vg(a,b,function(c){return zg(a,c)})}function zg(a,b){if(a.W&&!b.__CE_patched){b.__CE_patched=!0;for(var c=0;c<a.ca.length;c++)a.ca[c](b);for(c=0;c<a.g.length;c++)a.g[c](b)}}function Ag(a,b){var c=[];vg(a,b,function(e){return c.push(e)});for(b=0;b<c.length;b++){var d=c[b];1===d.__CE_state?a.connectedCallback(d):Bg(a,d)}}
1755
+ function Cg(a,b){var c=[];vg(a,b,function(e){return c.push(e)});for(b=0;b<c.length;b++){var d=c[b];1===d.__CE_state&&a.disconnectedCallback(d)}}
1756
+ function Dg(a,b,c){c=void 0===c?{}:c;var d=c.ob,e=c.upgrade||function(g){return Bg(a,g)},f=[];vg(a,b,function(g){a.W&&zg(a,g);if("link"===g.localName&&"import"===g.getAttribute("rel")){var h=g.import;h instanceof Node&&(h.__CE_isImportDocument=!0,h.__CE_registry=document.__CE_registry);h&&"complete"===h.readyState?h.__CE_documentLoadHandled=!0:g.addEventListener("load",function(){var k=g.import;if(!k.__CE_documentLoadHandled){k.__CE_documentLoadHandled=!0;var l=new Set;d&&(d.forEach(function(m){return l.add(m)}),
1757
+ l.delete(k));Dg(a,k,{ob:l,upgrade:e})}})}else f.push(g)},d);for(b=0;b<f.length;b++)e(f[b])}
1758
+ function Bg(a,b){try{var c=b.ownerDocument,d=c.__CE_registry;var e=d&&(c.defaultView||c.__CE_isImportDocument)?Eg(d,b.localName):void 0;if(e&&void 0===b.__CE_state){e.constructionStack.push(b);try{try{if(new e.constructorFunction!==b)throw Error("The custom element constructor did not produce the element being upgraded.");}finally{e.constructionStack.pop()}}catch(k){throw b.__CE_state=2,k;}b.__CE_state=1;b.__CE_definition=e;if(e.attributeChangedCallback&&b.hasAttributes()){var f=e.observedAttributes;
1759
+ for(e=0;e<f.length;e++){var g=f[e],h=b.getAttribute(g);null!==h&&a.attributeChangedCallback(b,g,null,h,null)}}T(b)&&a.connectedCallback(b)}}catch(k){Fg(k)}}tg.prototype.connectedCallback=function(a){var b=a.__CE_definition;if(b.connectedCallback)try{b.connectedCallback.call(a)}catch(c){Fg(c)}};tg.prototype.disconnectedCallback=function(a){var b=a.__CE_definition;if(b.disconnectedCallback)try{b.disconnectedCallback.call(a)}catch(c){Fg(c)}};
1760
+ tg.prototype.attributeChangedCallback=function(a,b,c,d,e){var f=a.__CE_definition;if(f.attributeChangedCallback&&-1<f.observedAttributes.indexOf(b))try{f.attributeChangedCallback.call(a,b,c,d,e)}catch(g){Fg(g)}};
1761
+ function Gg(a,b,c,d){var e=b.__CE_registry;if(e&&(null===d||"http://www.w3.org/1999/xhtml"===d)&&(e=Eg(e,c)))try{var f=new e.constructorFunction;if(void 0===f.__CE_state||void 0===f.__CE_definition)throw Error("Failed to construct '"+c+"': The returned value was not constructed with the HTMLElement constructor.");if("http://www.w3.org/1999/xhtml"!==f.namespaceURI)throw Error("Failed to construct '"+c+"': The constructed element's namespace must be the HTML namespace.");if(f.hasAttributes())throw Error("Failed to construct '"+
1762
+ c+"': The constructed element must not have any attributes.");if(null!==f.firstChild)throw Error("Failed to construct '"+c+"': The constructed element must not have any children.");if(null!==f.parentNode)throw Error("Failed to construct '"+c+"': The constructed element must not have a parent node.");if(f.ownerDocument!==b)throw Error("Failed to construct '"+c+"': The constructed element's owner document is incorrect.");if(f.localName!==c)throw Error("Failed to construct '"+c+"': The constructed element's local name is incorrect.");
1763
+ return f}catch(g){return Fg(g),b=null===d?Hf.call(b,c):If.call(b,d,c),Object.setPrototypeOf(b,HTMLUnknownElement.prototype),b.__CE_state=2,b.__CE_definition=void 0,zg(a,b),b}b=null===d?Hf.call(b,c):If.call(b,d,c);zg(a,b);return b}
1764
+ function Fg(a){var b=a.message,c=a.sourceURL||a.fileName||"",d=a.line||a.lineNumber||0,e=a.column||a.columnNumber||0,f=void 0;void 0===ErrorEvent.prototype.initErrorEvent?f=new ErrorEvent("error",{cancelable:!0,message:b,filename:c,lineno:d,colno:e,error:a}):(f=document.createEvent("ErrorEvent"),f.initErrorEvent("error",!1,!0,b,c,d),f.preventDefault=function(){Object.defineProperty(this,"defaultPrevented",{configurable:!0,get:function(){return!0}})});void 0===f.error&&Object.defineProperty(f,"error",
1765
+ {configurable:!0,enumerable:!0,get:function(){return a}});window.dispatchEvent(f);f.defaultPrevented||console.error(a)};function Hg(){var a=this;this.I=void 0;this.Ha=new Promise(function(b){a.g=b})}Hg.prototype.resolve=function(a){if(this.I)throw Error("Already resolved.");this.I=a;this.g(a)};function Ig(a){var b=document;this.X=void 0;this.S=a;this.g=b;Dg(this.S,this.g);"loading"===this.g.readyState&&(this.X=new MutationObserver(this.h.bind(this)),this.X.observe(this.g,{childList:!0,subtree:!0}))}function Jg(a){a.X&&a.X.disconnect()}Ig.prototype.h=function(a){var b=this.g.readyState;"interactive"!==b&&"complete"!==b||Jg(this);for(b=0;b<a.length;b++)for(var c=a[b].addedNodes,d=0;d<c.length;d++)Dg(this.S,c[d])};function U(a){this.ka=new Map;this.la=new Map;this.Ca=new Map;this.ta=!1;this.wa=new Map;this.ja=function(b){return b()};this.V=!1;this.ma=[];this.S=a;this.Da=a.nb?new Ig(a):void 0}v=U.prototype;v.eb=function(a,b){var c=this;if(!(b instanceof Function))throw new TypeError("Custom element constructor getters must be functions.");Kg(this,a);this.ka.set(a,b);this.ma.push(a);this.V||(this.V=!0,this.ja(function(){return Lg(c)}))};
1766
+ v.define=function(a,b){var c=this;if(!(b instanceof Function))throw new TypeError("Custom element constructors must be functions.");Kg(this,a);Mg(this,a,b);this.ma.push(a);this.V||(this.V=!0,this.ja(function(){return Lg(c)}))};function Kg(a,b){if(!og(b))throw new SyntaxError("The element name '"+b+"' is not valid.");if(Eg(a,b))throw Error("A custom element with name '"+(b+"' has already been defined."));if(a.ta)throw Error("A custom element is already being defined.");}
1767
+ function Mg(a,b,c){a.ta=!0;var d;try{var e=c.prototype;if(!(e instanceof Object))throw new TypeError("The custom element constructor's prototype is not an object.");var f=function(m){var q=e[m];if(void 0!==q&&!(q instanceof Function))throw Error("The '"+m+"' callback must be a function.");return q};var g=f("connectedCallback");var h=f("disconnectedCallback");var k=f("adoptedCallback");var l=(d=f("attributeChangedCallback"))&&c.observedAttributes||[]}catch(m){throw m;}finally{a.ta=!1}c={localName:b,
1768
+ constructorFunction:c,connectedCallback:g,disconnectedCallback:h,adoptedCallback:k,attributeChangedCallback:d,observedAttributes:l,constructionStack:[]};a.la.set(b,c);a.Ca.set(c.constructorFunction,c);return c}v.upgrade=function(a){Dg(this.S,a)};
1769
+ function Lg(a){if(!1!==a.V){a.V=!1;for(var b=[],c=a.ma,d=new Map,e=0;e<c.length;e++)d.set(c[e],[]);Dg(a.S,document,{upgrade:function(k){if(void 0===k.__CE_state){var l=k.localName,m=d.get(l);m?m.push(k):a.la.has(l)&&b.push(k)}}});for(e=0;e<b.length;e++)Bg(a.S,b[e]);for(e=0;e<c.length;e++){for(var f=c[e],g=d.get(f),h=0;h<g.length;h++)Bg(a.S,g[h]);(f=a.wa.get(f))&&f.resolve(void 0)}c.length=0}}v.get=function(a){if(a=Eg(this,a))return a.constructorFunction};
1770
+ v.whenDefined=function(a){if(!og(a))return Promise.reject(new SyntaxError("'"+a+"' is not a valid custom element name."));var b=this.wa.get(a);if(b)return b.Ha;b=new Hg;this.wa.set(a,b);var c=this.la.has(a)||this.ka.has(a);a=-1===this.ma.indexOf(a);c&&a&&b.resolve(void 0);return b.Ha};v.polyfillWrapFlushCallback=function(a){this.Da&&Jg(this.Da);var b=this.ja;this.ja=function(c){return a(function(){return b(c)})}};
1771
+ function Eg(a,b){var c=a.la.get(b);if(c)return c;if(c=a.ka.get(b)){a.ka.delete(b);try{return Mg(a,b,c())}catch(d){Fg(d)}}}window.CustomElementRegistry=U;U.prototype.define=U.prototype.define;U.prototype.upgrade=U.prototype.upgrade;U.prototype.get=U.prototype.get;U.prototype.whenDefined=U.prototype.whenDefined;U.prototype.polyfillDefineLazy=U.prototype.eb;U.prototype.polyfillWrapFlushCallback=U.prototype.polyfillWrapFlushCallback;function Ng(a,b,c){function d(e){return function(f){for(var g=[],h=0;h<arguments.length;++h)g[h]=arguments[h];h=[];for(var k=[],l=0;l<g.length;l++){var m=g[l];m instanceof Element&&T(m)&&k.push(m);if(m instanceof DocumentFragment)for(m=m.firstChild;m;m=m.nextSibling)h.push(m);else h.push(m)}e.apply(this,g);for(g=0;g<k.length;g++)Cg(a,k[g]);if(T(this))for(g=0;g<h.length;g++)k=h[g],k instanceof Element&&Ag(a,k)}}void 0!==c.prepend&&(b.prepend=d(c.prepend));void 0!==c.append&&(b.append=d(c.append))}
1772
+ ;function Og(a){Document.prototype.createElement=function(b){return Gg(a,this,b,null)};Document.prototype.importNode=function(b,c){b=Jf.call(this,b,!!c);this.__CE_registry?Dg(a,b):yg(a,b);return b};Document.prototype.createElementNS=function(b,c){return Gg(a,this,c,b)};Ng(a,Document.prototype,{prepend:Kf,append:Lf})};function Pg(a){function b(d){return function(e){for(var f=[],g=0;g<arguments.length;++g)f[g]=arguments[g];g=[];for(var h=[],k=0;k<f.length;k++){var l=f[k];l instanceof Element&&T(l)&&h.push(l);if(l instanceof DocumentFragment)for(l=l.firstChild;l;l=l.nextSibling)g.push(l);else g.push(l)}d.apply(this,f);for(f=0;f<h.length;f++)Cg(a,h[f]);if(T(this))for(f=0;f<g.length;f++)h=g[f],h instanceof Element&&Ag(a,h)}}var c=Element.prototype;void 0!==fg&&(c.before=b(fg));void 0!==gg&&(c.after=b(gg));void 0!==
1773
+ hg&&(c.replaceWith=function(d){for(var e=[],f=0;f<arguments.length;++f)e[f]=arguments[f];f=[];for(var g=[],h=0;h<e.length;h++){var k=e[h];k instanceof Element&&T(k)&&g.push(k);if(k instanceof DocumentFragment)for(k=k.firstChild;k;k=k.nextSibling)f.push(k);else f.push(k)}h=T(this);hg.apply(this,e);for(e=0;e<g.length;e++)Cg(a,g[e]);if(h)for(Cg(a,this),e=0;e<f.length;e++)g=f[e],g instanceof Element&&Ag(a,g)});void 0!==ig&&(c.remove=function(){var d=T(this);ig.call(this);d&&Cg(a,this)})};function Qg(a){function b(e,f){Object.defineProperty(e,"innerHTML",{enumerable:f.enumerable,configurable:!0,get:f.get,set:function(g){var h=this,k=void 0;T(this)&&(k=[],vg(a,this,function(q){q!==h&&k.push(q)}));f.set.call(this,g);if(k)for(var l=0;l<k.length;l++){var m=k[l];1===m.__CE_state&&a.disconnectedCallback(m)}this.ownerDocument.__CE_registry?Dg(a,this):yg(a,this);return g}})}function c(e,f){e.insertAdjacentElement=function(g,h){var k=T(h);g=f.call(this,g,h);k&&Cg(a,h);T(g)&&Ag(a,h);return g}}
1774
+ function d(e,f){function g(h,k){for(var l=[];h!==k;h=h.nextSibling)l.push(h);for(k=0;k<l.length;k++)Dg(a,l[k])}e.insertAdjacentHTML=function(h,k){h=h.toLowerCase();if("beforebegin"===h){var l=this.previousSibling;f.call(this,h,k);g(l||this.parentNode.firstChild,this)}else if("afterbegin"===h)l=this.firstChild,f.call(this,h,k),g(this.firstChild,l);else if("beforeend"===h)l=this.lastChild,f.call(this,h,k),g(l||this.firstChild,null);else if("afterend"===h)l=this.nextSibling,f.call(this,h,k),g(this.nextSibling,
1775
+ l);else throw new SyntaxError("The value provided ("+String(h)+") is not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'.");}}Uf&&(Element.prototype.attachShadow=function(e){e=Uf.call(this,e);if(a.W&&!e.__CE_patched){e.__CE_patched=!0;for(var f=0;f<a.ca.length;f++)a.ca[f](e)}return this.__CE_shadowRoot=e});Vf&&Vf.get?b(Element.prototype,Vf):kg&&kg.get?b(HTMLElement.prototype,kg):xg(a,function(e){b(e,{enumerable:!0,configurable:!0,get:function(){return Of.call(this,!0).innerHTML},set:function(f){var g=
1776
+ "template"===this.localName,h=g?this.content:this,k=If.call(document,this.namespaceURI,this.localName);for(k.innerHTML=f;0<h.childNodes.length;)Rf.call(h,h.childNodes[0]);for(f=g?k.content:k;0<f.childNodes.length;)Pf.call(h,f.childNodes[0])}})});Element.prototype.setAttribute=function(e,f){if(1!==this.__CE_state)return Xf.call(this,e,f);var g=Wf.call(this,e);Xf.call(this,e,f);f=Wf.call(this,e);a.attributeChangedCallback(this,e,g,f,null)};Element.prototype.setAttributeNS=function(e,f,g){if(1!==this.__CE_state)return $f.call(this,
1777
+ e,f,g);var h=Zf.call(this,e,f);$f.call(this,e,f,g);g=Zf.call(this,e,f);a.attributeChangedCallback(this,f,h,g,e)};Element.prototype.removeAttribute=function(e){if(1!==this.__CE_state)return Yf.call(this,e);var f=Wf.call(this,e);Yf.call(this,e);null!==f&&a.attributeChangedCallback(this,e,f,null,null)};Element.prototype.removeAttributeNS=function(e,f){if(1!==this.__CE_state)return ag.call(this,e,f);var g=Zf.call(this,e,f);ag.call(this,e,f);var h=Zf.call(this,e,f);g!==h&&a.attributeChangedCallback(this,
1778
+ f,g,h,e)};lg?c(HTMLElement.prototype,lg):bg&&c(Element.prototype,bg);mg?d(HTMLElement.prototype,mg):cg&&d(Element.prototype,cg);Ng(a,Element.prototype,{prepend:dg,append:eg});Pg(a)};var Rg={};function Sg(a){function b(){var c=this.constructor;var d=document.__CE_registry.Ca.get(c);if(!d)throw Error("Failed to construct a custom element: The constructor was not registered with `customElements`.");var e=d.constructionStack;if(0===e.length)return e=Hf.call(document,d.localName),Object.setPrototypeOf(e,c.prototype),e.__CE_state=1,e.__CE_definition=d,zg(a,e),e;var f=e.length-1,g=e[f];if(g===Rg)throw Error("Failed to construct '"+d.localName+"': This element was already constructed.");e[f]=
1779
+ Rg;Object.setPrototypeOf(g,c.prototype);zg(a,g);return g}b.prototype=jg.prototype;Object.defineProperty(HTMLElement.prototype,"constructor",{writable:!0,configurable:!0,enumerable:!1,value:b});window.HTMLElement=b};function Tg(a){function b(c,d){Object.defineProperty(c,"textContent",{enumerable:d.enumerable,configurable:!0,get:d.get,set:function(e){if(this.nodeType===Node.TEXT_NODE)d.set.call(this,e);else{var f=void 0;if(this.firstChild){var g=this.childNodes,h=g.length;if(0<h&&T(this)){f=Array(h);for(var k=0;k<h;k++)f[k]=g[k]}}d.set.call(this,e);if(f)for(e=0;e<f.length;e++)Cg(a,f[e])}}})}Node.prototype.insertBefore=function(c,d){if(c instanceof DocumentFragment){var e=qg(c);c=Qf.call(this,c,d);if(T(this))for(d=
1780
+ 0;d<e.length;d++)Ag(a,e[d]);return c}e=c instanceof Element&&T(c);d=Qf.call(this,c,d);e&&Cg(a,c);T(this)&&Ag(a,c);return d};Node.prototype.appendChild=function(c){if(c instanceof DocumentFragment){var d=qg(c);c=Pf.call(this,c);if(T(this))for(var e=0;e<d.length;e++)Ag(a,d[e]);return c}d=c instanceof Element&&T(c);e=Pf.call(this,c);d&&Cg(a,c);T(this)&&Ag(a,c);return e};Node.prototype.cloneNode=function(c){c=Of.call(this,!!c);this.ownerDocument.__CE_registry?Dg(a,c):yg(a,c);return c};Node.prototype.removeChild=
1781
+ function(c){var d=c instanceof Element&&T(c),e=Rf.call(this,c);d&&Cg(a,c);return e};Node.prototype.replaceChild=function(c,d){if(c instanceof DocumentFragment){var e=qg(c);c=Sf.call(this,c,d);if(T(this))for(Cg(a,d),d=0;d<e.length;d++)Ag(a,e[d]);return c}e=c instanceof Element&&T(c);var f=Sf.call(this,c,d),g=T(this);g&&Cg(a,d);e&&Cg(a,c);g&&Ag(a,c);return f};Tf&&Tf.get?b(Node.prototype,Tf):wg(a,function(c){b(c,{enumerable:!0,configurable:!0,get:function(){for(var d=[],e=this.firstChild;e;e=e.nextSibling)e.nodeType!==
1782
+ Node.COMMENT_NODE&&d.push(e.textContent);return d.join("")},set:function(d){for(;this.firstChild;)Rf.call(this,this.firstChild);null!=d&&""!==d&&Pf.call(this,document.createTextNode(d))}})})};var ug=window.customElements;function Ug(){var a=new tg;Sg(a);Og(a);Ng(a,DocumentFragment.prototype,{prepend:Mf,append:Nf});Tg(a);Qg(a);a=new U(a);document.__CE_registry=a;Object.defineProperty(window,"customElements",{configurable:!0,enumerable:!0,value:a})}ug&&!ug.forcePolyfill&&"function"==typeof ug.define&&"function"==typeof ug.get||Ug();window.__CE_installPolyfill=Ug;/*
1699
1783
 
1700
- Copyright (c) 2020 The Polymer Project Authors. All rights reserved.
1701
- This code may only be used under the BSD style license found at
1702
- http://polymer.github.io/LICENSE.txt The complete set of authors may be found
1703
- at http://polymer.github.io/AUTHORS.txt The complete set of contributors may
1704
- be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by
1705
- Google as part of the polymer project is also subject to an additional IP
1706
- rights grant found at http://polymer.github.io/PATENTS.txt
1784
+ Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
1785
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
1786
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
1787
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
1788
+ Code distributed by Google as part of the polymer project is also
1789
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
1707
1790
  */
1708
- /*
1791
+ function Vg(){this.end=this.start=0;this.rules=this.parent=this.previous=null;this.cssText=this.parsedCssText="";this.atRule=!1;this.type=0;this.parsedSelector=this.selector=this.keyframesName=""}
1792
+ function Wg(a){var b=a=a.replace(Xg,"").replace(Yg,""),c=new Vg;c.start=0;c.end=b.length;for(var d=c,e=0,f=b.length;e<f;e++)if("{"===b[e]){d.rules||(d.rules=[]);var g=d,h=g.rules[g.rules.length-1]||null;d=new Vg;d.start=e+1;d.parent=g;d.previous=h;g.rules.push(d)}else"}"===b[e]&&(d.end=e+1,d=d.parent||c);return Zg(c,a)}
1793
+ function Zg(a,b){var c=b.substring(a.start,a.end-1);a.parsedCssText=a.cssText=c.trim();a.parent&&(c=b.substring(a.previous?a.previous.end:a.parent.start,a.start-1),c=$g(c),c=c.replace(ah," "),c=c.substring(c.lastIndexOf(";")+1),c=a.parsedSelector=a.selector=c.trim(),a.atRule=0===c.indexOf("@"),a.atRule?0===c.indexOf("@media")?a.type=bh:c.match(ch)&&(a.type=dh,a.keyframesName=a.selector.split(ah).pop()):a.type=0===c.indexOf("--")?eh:fh);if(c=a.rules)for(var d=0,e=c.length,f=void 0;d<e&&(f=c[d]);d++)Zg(f,
1794
+ b);return a}function $g(a){return a.replace(/\\([0-9a-f]{1,6})\s/gi,function(b,c){b=c;for(c=6-b.length;c--;)b="0"+b;return"\\"+b})}
1795
+ function gh(a,b,c){c=void 0===c?"":c;var d="";if(a.cssText||a.rules){var e=a.rules,f;if(f=e)f=e[0],f=!(f&&f.selector&&0===f.selector.indexOf("--"));if(f){f=0;for(var g=e.length,h=void 0;f<g&&(h=e[f]);f++)d=gh(h,b,d)}else b?b=a.cssText:(b=a.cssText,b=b.replace(hh,"").replace(ih,""),b=b.replace(jh,"").replace(kh,"")),(d=b.trim())&&(d=" "+d+"\n")}d&&(a.selector&&(c+=a.selector+" {\n"),c+=d,a.selector&&(c+="}\n\n"));return c}
1796
+ var fh=1,dh=7,bh=4,eh=1E3,Xg=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,Yg=/@import[^;]*;/gim,hh=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,ih=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,jh=/@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,kh=/[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,ch=/^@[^\s]*keyframes/,ah=/\s+/g;var V=!(window.ShadyDOM&&window.ShadyDOM.inUse),lh;function mh(a){lh=a&&a.shimcssproperties?!1:V||!(navigator.userAgent.match(/AppleWebKit\/601|Edge\/15/)||!window.CSS||!CSS.supports||!CSS.supports("box-shadow","0 0 0 var(--foo)"))}var nh;window.ShadyCSS&&void 0!==window.ShadyCSS.cssBuild&&(nh=window.ShadyCSS.cssBuild);var oh=!(!window.ShadyCSS||!window.ShadyCSS.disableRuntime);
1797
+ window.ShadyCSS&&void 0!==window.ShadyCSS.nativeCss?lh=window.ShadyCSS.nativeCss:window.ShadyCSS?(mh(window.ShadyCSS),window.ShadyCSS=void 0):mh(window.WebComponents&&window.WebComponents.flags);var X=lh;var ph=/(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};{])+)|\{([^}]*)\}(?:(?=[;\s}])|$))/gi,qh=/(?:^|\W+)@apply\s*\(?([^);\n]*)\)?/gi,rh=/(--[\w-]+)\s*([:,;)]|$)/gi,sh=/(animation\s*:)|(animation-name\s*:)/,th=/@media\s(.*)/,uh=/\{[^}]*\}/g;var vh=new Set;function wh(a,b){if(!a)return"";"string"===typeof a&&(a=Wg(a));b&&xh(a,b);return gh(a,X)}function yh(a){!a.__cssRules&&a.textContent&&(a.__cssRules=Wg(a.textContent));return a.__cssRules||null}function zh(a){return!!a.parent&&a.parent.type===dh}function xh(a,b,c,d){if(a){var e=!1,f=a.type;if(d&&f===bh){var g=a.selector.match(th);g&&(window.matchMedia(g[1]).matches||(e=!0))}f===fh?b(a):c&&f===dh?c(a):f===eh&&(e=!0);if((a=a.rules)&&!e)for(e=0,f=a.length,g=void 0;e<f&&(g=a[e]);e++)xh(g,b,c,d)}}
1798
+ function Ah(a,b,c,d){var e=document.createElement("style");b&&e.setAttribute("scope",b);e.textContent=a;Ch(e,c,d);return e}var Dh=null;function Eh(a){a=document.createComment(" Shady DOM styles for "+a+" ");var b=document.head;b.insertBefore(a,(Dh?Dh.nextSibling:null)||b.firstChild);return Dh=a}function Ch(a,b,c){b=b||document.head;b.insertBefore(a,c&&c.nextSibling||b.firstChild);Dh?a.compareDocumentPosition(Dh)===Node.DOCUMENT_POSITION_PRECEDING&&(Dh=a):Dh=a}
1799
+ function Fh(a,b){for(var c=0,d=a.length;b<d;b++)if("("===a[b])c++;else if(")"===a[b]&&0===--c)return b;return-1}function Gh(a,b){var c=a.indexOf("var(");if(-1===c)return b(a,"","","");var d=Fh(a,c+3),e=a.substring(c+4,d);c=a.substring(0,c);a=Gh(a.substring(d+1),b);d=e.indexOf(",");return-1===d?b(c,e.trim(),"",a):b(c,e.substring(0,d).trim(),e.substring(d+1).trim(),a)}function Hh(a,b){V?a.setAttribute("class",b):window.ShadyDOM.nativeMethods.setAttribute.call(a,"class",b)}
1800
+ var Ih=window.ShadyDOM&&window.ShadyDOM.wrap||function(a){return a};function Jh(a){var b=a.localName,c="";b?-1<b.indexOf("-")||(c=b,b=a.getAttribute&&a.getAttribute("is")||""):(b=a.is,c=a.extends);return{is:b,ha:c}}function Kh(a){for(var b=[],c="",d=0;0<=d&&d<a.length;d++)if("("===a[d]){var e=Fh(a,d);c+=a.slice(d,e+1);d=e}else","===a[d]?(b.push(c),c=""):c+=a[d];c&&b.push(c);return b}
1801
+ function Lh(a){if(void 0!==nh)return nh;if(void 0===a.__cssBuild){var b=a.getAttribute("css-build");if(b)a.__cssBuild=b;else{a:{b="template"===a.localName?a.content.firstChild:a.firstChild;if(b instanceof Comment&&(b=b.textContent.trim().split(":"),"css-build"===b[0])){b=b[1];break a}b=""}if(""!==b){var c="template"===a.localName?a.content.firstChild:a.firstChild;c.parentNode.removeChild(c)}a.__cssBuild=b}}return a.__cssBuild||""}
1802
+ function Mh(a){a=void 0===a?"":a;return""!==a&&X?V?"shadow"===a:"shady"===a:!1};function Nh(){}function Oh(a,b){Ph(Qh,a,function(c){Rh(c,b||"")})}function Ph(a,b,c){b.nodeType===Node.ELEMENT_NODE&&c(b);var d;"template"===b.localName?d=(b.content||b._content||b).childNodes:d=b.children||b.childNodes;if(d)for(b=0;b<d.length;b++)Ph(a,d[b],c)}
1803
+ function Rh(a,b,c){if(b)if(a.classList)c?(a.classList.remove("style-scope"),a.classList.remove(b)):(a.classList.add("style-scope"),a.classList.add(b));else if(a.getAttribute){var d=a.getAttribute("class");c?d&&(b=d.replace("style-scope","").replace(b,""),Hh(a,b)):Hh(a,(d?d+" ":"")+"style-scope "+b)}}function Sh(a,b,c){Ph(Qh,a,function(d){Rh(d,b,!0);Rh(d,c)})}function Th(a,b){Ph(Qh,a,function(c){Rh(c,b||"",!0)})}
1804
+ function Uh(a,b,c,d,e){var f=Qh;e=void 0===e?"":e;""===e&&(V||"shady"===(void 0===d?"":d)?e=wh(b,c):(a=Jh(a),e=Vh(f,b,a.is,a.ha,c)+"\n\n"));return e.trim()}function Vh(a,b,c,d,e){var f=Wh(c,d);c=c?"."+c:"";return wh(b,function(g){g.i||(g.selector=g.F=Xh(a,g,a.h,c,f),g.i=!0);e&&e(g,c,f)})}function Wh(a,b){return b?"[is="+a+"]":a}
1805
+ function Xh(a,b,c,d,e){var f=Kh(b.selector);if(!zh(b)){b=0;for(var g=f.length,h=void 0;b<g&&(h=f[b]);b++)f[b]=c.call(a,h,d,e)}return f.filter(function(k){return!!k}).join(",")}function Yh(a){return a.replace(Zh,function(b,c,d){-1<d.indexOf("+")?d=d.replace(/\+/g,"___"):-1<d.indexOf("___")&&(d=d.replace(/___/g,"+"));return":"+c+"("+d+")"})}
1806
+ function $h(a){for(var b=[],c;c=a.match(ai);){var d=c.index,e=Fh(a,d);if(-1===e)throw Error(c.input+" selector missing ')'");c=a.slice(d,e+1);a=a.replace(c,"\ue000");b.push(c)}return{Ba:a,matches:b}}function bi(a,b){var c=a.split("\ue000");return b.reduce(function(d,e,f){return d+e+c[f+1]},c[0])}
1807
+ Nh.prototype.h=function(a,b,c){var d=!1;a=a.trim();var e=Zh.test(a);e&&(a=a.replace(Zh,function(h,k,l){return":"+k+"("+l.replace(/\s/g,"")+")"}),a=Yh(a));var f=ai.test(a);if(f){var g=$h(a);a=g.Ba;g=g.matches}a=a.replace(ci,":host $1");a=a.replace(di,function(h,k,l){d||(h=ei(l,k,b,c),d=d||h.stop,k=h.Ua,l=h.value);return k+l});f&&(a=bi(a,g));e&&(a=Yh(a));return a=a.replace(fi,function(h,k,l,m){return'[dir="'+l+'"] '+k+m+", "+k+'[dir="'+l+'"]'+m})};
1808
+ function ei(a,b,c,d){var e=a.indexOf("::slotted");0<=a.indexOf(":host")?a=gi(a,d):0!==e&&(a=c?hi(a,c):a);c=!1;0<=e&&(b="",c=!0);if(c){var f=!0;c&&(a=a.replace(ii,function(g,h){return" > "+h}))}return{value:a,Ua:b,stop:f}}function hi(a,b){a=a.split(/(\[.+?\])/);for(var c=[],d=0;d<a.length;d++)if(1===d%2)c.push(a[d]);else{var e=a[d];if(""!==e||d!==a.length-1)e=e.split(":"),e[0]+=b,c.push(e.join(":"))}return c.join("")}
1809
+ function gi(a,b){var c=a.match(ji);return(c=c&&c[2].trim()||"")?c[0].match(ki)?a.replace(ji,function(d,e,f){return b+f}):c.split(ki)[0]===b?c:"should_not_match":a.replace(":host",b)}function li(a){":root"===a.selector&&(a.selector="html")}Nh.prototype.i=function(a){return a.match(":host")?"":a.match("::slotted")?this.h(a,":not(.style-scope)"):hi(a.trim(),":not(.style-scope)")};ea.Object.defineProperties(Nh.prototype,{g:{configurable:!0,enumerable:!0,get:function(){return"style-scope"}}});
1810
+ var Zh=/:(nth[-\w]+)\(([^)]+)\)/,di=/(^|[\s>+~]+)((?:\[.+?\]|[^\s>+~=[])+)/g,ki=/[[.:#*]/,ci=/^(::slotted)/,ji=/(:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,ii=/(?:::slotted)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,fi=/(.*):dir\((?:(ltr|rtl))\)(.*)/,ai=/:(?:matches|any|-(?:webkit|moz)-any)/,Qh=new Nh;function mi(a,b,c,d,e){this.M=a||null;this.h=b||null;this.za=c||[];this.K=null;this.cssBuild=e||"";this.ha=d||"";this.g=this.L=this.R=null}function ni(a){return a?a.__styleInfo:null}function oi(a,b){return a.__styleInfo=b}mi.prototype.i=function(){return this.M};mi.prototype._getStyleRules=mi.prototype.i;function pi(a){var b=this.matches||this.matchesSelector||this.mozMatchesSelector||this.msMatchesSelector||this.oMatchesSelector||this.webkitMatchesSelector;return b&&b.call(this,a)}var qi=/:host\s*>\s*/,ri=navigator.userAgent.match("Trident");function si(){}function ti(a){var b={},c=[],d=0;xh(a,function(f){ui(f);f.index=d++;f=f.D.cssText;for(var g;g=rh.exec(f);){var h=g[1];":"!==g[2]&&(b[h]=!0)}},function(f){c.push(f)});a.h=c;a=[];for(var e in b)a.push(e);return a}
1811
+ function ui(a){if(!a.D){var b={},c={};vi(a,c)&&(b.P=c,a.rules=null);b.cssText=a.parsedCssText.replace(uh,"").replace(ph,"");a.D=b}}function vi(a,b){var c=a.D;if(c){if(c.P)return Object.assign(b,c.P),!0}else{c=a.parsedCssText;for(var d;a=ph.exec(c);){d=(a[2]||a[3]).trim();if("inherit"!==d||"unset"!==d)b[a[1].trim()]=d;d=!0}return d}}
1812
+ function wi(a,b,c){b&&(b=0<=b.indexOf(";")?xi(a,b,c):Gh(b,function(d,e,f,g){if(!e)return d+g;(e=wi(a,c[e],c))&&"initial"!==e?"apply-shim-inherit"===e&&(e="inherit"):e=wi(a,c[f]||f,c)||f;return d+(e||"")+g}));return b&&b.trim()||""}
1813
+ function xi(a,b,c){b=b.split(";");for(var d=0,e,f;d<b.length;d++)if(e=b[d]){qh.lastIndex=0;if(f=qh.exec(e))e=wi(a,c[f[1]],c);else if(f=e.indexOf(":"),-1!==f){var g=e.substring(f);g=g.trim();g=wi(a,g,c)||g;e=e.substring(0,f)+g}b[d]=e&&e.lastIndexOf(";")===e.length-1?e.slice(0,-1):e||""}return b.join(";")}
1814
+ function yi(a,b){var c={},d=[];xh(a,function(e){e.D||ui(e);var f=e.F||e.parsedSelector;b&&e.D.P&&f&&pi.call(b,f)&&(vi(e,c),e=e.index,f=parseInt(e/32,10),d[f]=(d[f]||0)|1<<e%32)},null,!0);return{P:c,key:d}}
1815
+ function zi(a,b,c,d){b.D||ui(b);if(b.D.P){var e=Jh(a);a=e.is;e=e.ha;e=a?Wh(a,e):"html";var f=b.parsedSelector;var g=!!f.match(qi)||"html"===e&&-1<f.indexOf("html");var h=0===f.indexOf(":host")&&!g;"shady"===c&&(g=f===e+" > *."+e||-1!==f.indexOf("html"),h=!g&&0===f.indexOf(e));if(g||h)c=e,h&&(b.F||(b.F=Xh(Qh,b,Qh.h,a?"."+a:"",e)),c=b.F||e),g&&"html"===e&&(c=b.F||b.O),d({Ba:c,ab:h,qb:g})}}
1816
+ function Ai(a,b,c){var d={},e={};xh(b,function(f){zi(a,f,c,function(g){pi.call(a._element||a,g.Ba)&&(g.ab?vi(f,d):vi(f,e))})},null,!0);return{hb:e,Za:d}}
1817
+ function Bi(a,b,c,d){var e=Jh(b),f=Wh(e.is,e.ha),g=new RegExp("(?:^|[^.#[:])"+(b.extends?"\\"+f.slice(0,-1)+"\\]":f)+"($|[.:[\\s>+~])"),h=ni(b);e=h.M;h=h.cssBuild;var k=Ci(e,d);return Uh(b,e,function(l){var m="";l.D||ui(l);l.D.cssText&&(m=xi(a,l.D.cssText,c));l.cssText=m;if(!V&&!zh(l)&&l.cssText){var q=m=l.cssText;null==l.Ia&&(l.Ia=sh.test(m));if(l.Ia)if(null==l.pa){l.pa=[];for(var H in k)q=k[H],q=q(m),m!==q&&(m=q,l.pa.push(H))}else{for(H=0;H<l.pa.length;++H)q=k[l.pa[H]],m=q(m);q=m}l.cssText=q;l.F=
1818
+ l.F||l.selector;m="."+d;H=Kh(l.F);q=0;for(var C=H.length,t=void 0;q<C&&(t=H[q]);q++)H[q]=t.match(g)?t.replace(f,m):m+" "+t;l.selector=H.join(",")}},h)}function Ci(a,b){a=a.h;var c={};if(!V&&a)for(var d=0,e=a[d];d<a.length;e=a[++d]){var f=e,g=b;f.u=new RegExp("\\b"+f.keyframesName+"(?!\\B|-)","g");f.g=f.keyframesName+"-"+g;f.F=f.F||f.selector;f.selector=f.F.replace(f.keyframesName,f.g);c[e.keyframesName]=Di(e)}return c}function Di(a){return function(b){return b.replace(a.u,a.g)}}
1819
+ function Ei(a,b){var c=Fi,d=yh(a);a.textContent=wh(d,function(e){var f=e.cssText=e.parsedCssText;e.D&&e.D.cssText&&(f=f.replace(hh,"").replace(ih,""),e.cssText=xi(c,f,b))})}ea.Object.defineProperties(si.prototype,{g:{configurable:!0,enumerable:!0,get:function(){return"x-scope"}}});var Fi=new si;var Gi={},Hi=window.customElements;if(Hi&&!V&&!oh){var Ii=Hi.define;Hi.define=function(a,b,c){Gi[a]||(Gi[a]=Eh(a));Ii.call(Hi,a,b,c)}};function Ji(){this.cache={}}Ji.prototype.store=function(a,b,c,d){var e=this.cache[a]||[];e.push({P:b,styleElement:c,L:d});100<e.length&&e.shift();this.cache[a]=e};function Ki(){}var Li=new RegExp(Qh.g+"\\s*([^\\s]*)");function Mi(a){return(a=(a.classList&&a.classList.value?a.classList.value:a.getAttribute("class")||"").match(Li))?a[1]:""}function Ni(a){var b=Ih(a).getRootNode();return b===a||b===a.ownerDocument?"":(a=b.host)?Jh(a).is:""}
1820
+ function Oi(a){for(var b=0;b<a.length;b++){var c=a[b];if(c.target!==document.documentElement&&c.target!==document.head)for(var d=0;d<c.addedNodes.length;d++){var e=c.addedNodes[d];if(e.nodeType===Node.ELEMENT_NODE){var f=e.getRootNode(),g=Mi(e);if(g&&f===e.ownerDocument&&("style"!==e.localName&&"template"!==e.localName||""===Lh(e)))Th(e,g);else if(f instanceof ShadowRoot)for(f=Ni(e),f!==g&&Sh(e,g,f),e=window.ShadyDOM.nativeMethods.querySelectorAll.call(e,":not(."+Qh.g+")"),g=0;g<e.length;g++){f=e[g];
1821
+ var h=Ni(f);h&&Rh(f,h)}}}}}
1822
+ if(!(V||window.ShadyDOM&&window.ShadyDOM.handlesDynamicScoping)){var Pi=new MutationObserver(Oi),Qi=function(a){Pi.observe(a,{childList:!0,subtree:!0})};if(window.customElements&&!window.customElements.polyfillWrapFlushCallback)Qi(document);else{var Ri=function(){Qi(document.body)};window.HTMLImports?window.HTMLImports.whenReady(Ri):requestAnimationFrame(function(){if("loading"===document.readyState){var a=function(){Ri();document.removeEventListener("readystatechange",a)};document.addEventListener("readystatechange",
1823
+ a)}else Ri()})}Ki=function(){Oi(Pi.takeRecords())}};var Si={};var Ti=Promise.resolve();function Ui(a){if(a=Si[a])a._applyShimCurrentVersion=a._applyShimCurrentVersion||0,a._applyShimValidatingVersion=a._applyShimValidatingVersion||0,a._applyShimNextVersion=(a._applyShimNextVersion||0)+1}function Vi(a){return a._applyShimCurrentVersion===a._applyShimNextVersion}function Wi(a){a._applyShimValidatingVersion=a._applyShimNextVersion;a._validating||(a._validating=!0,Ti.then(function(){a._applyShimCurrentVersion=a._applyShimNextVersion;a._validating=!1}))};var Xi={},Yi=new Ji;function Y(){this.da={};this.i=document.documentElement;var a=new Vg;a.rules=[];this.u=oi(this.i,new mi(a));this.O=!1;this.g=this.h=null}v=Y.prototype;v.flush=function(){Ki()};v.Xa=function(a){return yh(a)};v.lb=function(a){return wh(a)};v.prepareTemplate=function(a,b,c){this.prepareTemplateDom(a,b);this.prepareTemplateStyles(a,b,c)};
1824
+ v.prepareTemplateStyles=function(a,b,c){if(!a._prepared&&!oh){V||Gi[b]||(Gi[b]=Eh(b));a._prepared=!0;a.name=b;a.extends=c;Si[b]=a;var d=Lh(a),e=Mh(d);c={is:b,extends:c};for(var f=[],g=a.content.querySelectorAll("style"),h=0;h<g.length;h++){var k=g[h];if(k.hasAttribute("shady-unscoped")){if(!V){var l=k.textContent;if(!vh.has(l)){vh.add(l);var m=document.createElement("style");m.setAttribute("shady-unscoped","");m.textContent=l;document.head.appendChild(m)}k.parentNode.removeChild(k)}}else f.push(k.textContent),
1825
+ k.parentNode.removeChild(k)}f=f.join("").trim()+(Xi[b]||"");Zi(this);if(!e){if(g=!d)g=qh.test(f)||ph.test(f),qh.lastIndex=0,ph.lastIndex=0;h=Wg(f);g&&X&&this.h&&this.h.transformRules(h,b);a._styleAst=h}g=[];X||(g=ti(a._styleAst));if(!g.length||X)h=V?a.content:null,b=Gi[b]||null,d=Uh(c,a._styleAst,null,d,e?f:""),d=d.length?Ah(d,c.is,h,b):null,a._style=d;a.g=g}};v.fb=function(a,b){Xi[b]=a.join(" ")};
1826
+ v.prepareTemplateDom=function(a,b){if(!oh){var c=Lh(a);V||"shady"===c||a._domPrepared||(a._domPrepared=!0,Oh(a.content,b))}};function $i(a){var b=Jh(a),c=b.is;b=b.ha;var d=Gi[c]||null,e=Si[c];if(e){c=e._styleAst;var f=e.g;e=Lh(e);b=new mi(c,d,f,b,e);oi(a,b);return b}}
1827
+ function aj(a){!a.g&&window.ShadyCSS&&window.ShadyCSS.CustomStyleInterface&&(a.g=window.ShadyCSS.CustomStyleInterface,a.g.transformCallback=function(b){a.Ma(b)},a.g.validateCallback=function(){requestAnimationFrame(function(){(a.g.enqueued||a.O)&&a.flushCustomStyles()})})}function Zi(a){if(!a.h&&window.ShadyCSS&&window.ShadyCSS.ApplyShim){a.h=window.ShadyCSS.ApplyShim;a.h.invalidCallback=Ui;var b=!0}else b=!1;aj(a);return b}
1828
+ v.flushCustomStyles=function(){if(!oh){var a=Zi(this);if(this.g){var b=this.g.processStyles();if((a||this.g.enqueued)&&!Mh(this.u.cssBuild)){if(X){if(!this.u.cssBuild)for(a=0;a<b.length;a++){var c=this.g.getStyleForCustomStyle(b[a]);if(c&&X&&this.h){var d=yh(c);Zi(this);this.h.transformRules(d);c.textContent=wh(d)}}}else{bj(this,b);cj(this,this.i,this.u);for(a=0;a<b.length;a++)(c=this.g.getStyleForCustomStyle(b[a]))&&Ei(c,this.u.R);this.O&&this.styleDocument()}this.g.enqueued=!1}}}};
1829
+ function bj(a,b){b=b.map(function(c){return a.g.getStyleForCustomStyle(c)}).filter(function(c){return!!c});b.sort(function(c,d){c=d.compareDocumentPosition(c);return c&Node.DOCUMENT_POSITION_FOLLOWING?1:c&Node.DOCUMENT_POSITION_PRECEDING?-1:0});a.u.M.rules=b.map(function(c){return yh(c)})}
1830
+ v.styleElement=function(a,b){if(oh){if(b){ni(a)||oi(a,new mi(null));var c=ni(a);c.K=c.K||{};Object.assign(c.K,b);dj(this,a,c)}}else if(c=ni(a)||$i(a))if(a!==this.i&&(this.O=!0),b&&(c.K=c.K||{},Object.assign(c.K,b)),X)dj(this,a,c);else if(this.flush(),cj(this,a,c),c.za&&c.za.length){b=Jh(a).is;var d;a:{if(d=Yi.cache[b])for(var e=d.length-1;0<=e;e--){var f=d[e];b:{var g=c.za;for(var h=0;h<g.length;h++){var k=g[h];if(f.P[k]!==c.R[k]){g=!1;break b}}g=!0}if(g){d=f;break a}}d=void 0}g=d?d.styleElement:
1831
+ null;e=c.L;(f=d&&d.L)||(f=this.da[b]=(this.da[b]||0)+1,f=b+"-"+f);c.L=f;f=c.L;h=Fi;h=g?g.textContent||"":Bi(h,a,c.R,f);k=ni(a);var l=k.g;l&&!V&&l!==g&&(l._useCount--,0>=l._useCount&&l.parentNode&&l.parentNode.removeChild(l));V?k.g?(k.g.textContent=h,g=k.g):h&&(g=Ah(h,f,a.shadowRoot,k.h)):g?g.parentNode||(ri&&-1<h.indexOf("@media")&&(g.textContent=h),Ch(g,null,k.h)):h&&(g=Ah(h,f,null,k.h));g&&(g._useCount=g._useCount||0,k.g!=g&&g._useCount++,k.g=g);f=g;V||(g=c.L,k=h=a.getAttribute("class")||"",e&&
1832
+ (k=h.replace(new RegExp("\\s*x-scope\\s*"+e+"\\s*","g")," ")),k+=(k?" ":"")+"x-scope "+g,h!==k&&Hh(a,k));d||Yi.store(b,c.R,f,c.L)}};
1833
+ function dj(a,b,c){var d=Jh(b).is;if(c.K){var e=c.K,f;for(f in e)null===f?b.style.removeProperty(f):b.style.setProperty(f,e[f])}e=Si[d];if(!(!e&&b!==a.i||e&&""!==Lh(e))&&e&&e._style&&!Vi(e)){if(Vi(e)||e._applyShimValidatingVersion!==e._applyShimNextVersion)Zi(a),a.h&&a.h.transformRules(e._styleAst,d),e._style.textContent=Uh(b,c.M),Wi(e);V&&(a=b.shadowRoot)&&(a=a.querySelector("style"))&&(a.textContent=Uh(b,c.M));c.M=e._styleAst}}
1834
+ function ej(a,b){return(b=Ih(b).getRootNode().host)?ni(b)||$i(b)?b:ej(a,b):a.i}function cj(a,b,c){var d=ej(a,b),e=ni(d),f=e.R;d===a.i||f||(cj(a,d,e),f=e.R);a=Object.create(f||null);d=Ai(b,c.M,c.cssBuild);b=yi(e.M,b).P;Object.assign(a,d.Za,b,d.hb);b=c.K;for(var g in b)if((e=b[g])||0===e)a[g]=e;g=Fi;b=Object.getOwnPropertyNames(a);for(e=0;e<b.length;e++)d=b[e],a[d]=wi(g,a[d],a);c.R=a}v.styleDocument=function(a){this.styleSubtree(this.i,a)};
1835
+ v.styleSubtree=function(a,b){var c=Ih(a),d=c.shadowRoot,e=a===this.i;(d||e)&&this.styleElement(a,b);if(a=e?c:d)for(a=Array.from(a.querySelectorAll("*")).filter(function(f){return Ih(f).shadowRoot}),b=0;b<a.length;b++)this.styleSubtree(a[b])};
1836
+ v.Ma=function(a){var b=this,c=Lh(a);c!==this.u.cssBuild&&(this.u.cssBuild=c);if(!Mh(c)){var d=yh(a);xh(d,function(e){if(V)li(e);else{var f=Qh;e.selector=e.parsedSelector;li(e);e.selector=e.F=Xh(f,e,f.i,void 0,void 0)}X&&""===c&&(Zi(b),b.h&&b.h.transformRule(e))});X?a.textContent=wh(d):this.u.M.rules.push(d)}};v.getComputedStyleValue=function(a,b){var c;X||(c=(ni(a)||ni(ej(this,a))).R[b]);return(c=c||window.getComputedStyle(a).getPropertyValue(b))?c.trim():""};
1837
+ v.kb=function(a,b){var c=Ih(a).getRootNode();b=b?("string"===typeof b?b:String(b)).split(/\s/):[];c=c.host&&c.host.localName;if(!c){var d=a.getAttribute("class");if(d){d=d.split(/\s/);for(var e=0;e<d.length;e++)if(d[e]===Qh.g){c=d[e+1];break}}}c&&b.push(Qh.g,c);X||(c=ni(a))&&c.L&&b.push(Fi.g,c.L);Hh(a,b.join(" "))};v.Ta=function(a){return ni(a)};v.jb=function(a,b){Rh(a,b)};v.mb=function(a,b){Rh(a,b,!0)};v.ib=function(a){return Ni(a)};v.Va=function(a){return Mi(a)};Y.prototype.flush=Y.prototype.flush;
1838
+ Y.prototype.prepareTemplate=Y.prototype.prepareTemplate;Y.prototype.styleElement=Y.prototype.styleElement;Y.prototype.styleDocument=Y.prototype.styleDocument;Y.prototype.styleSubtree=Y.prototype.styleSubtree;Y.prototype.getComputedStyleValue=Y.prototype.getComputedStyleValue;Y.prototype.setElementClass=Y.prototype.kb;Y.prototype._styleInfoForNode=Y.prototype.Ta;Y.prototype.transformCustomStyleForDocument=Y.prototype.Ma;Y.prototype.getStyleAst=Y.prototype.Xa;Y.prototype.styleAstToString=Y.prototype.lb;
1839
+ Y.prototype.flushCustomStyles=Y.prototype.flushCustomStyles;Y.prototype.scopeNode=Y.prototype.jb;Y.prototype.unscopeNode=Y.prototype.mb;Y.prototype.scopeForNode=Y.prototype.ib;Y.prototype.currentScopeForNode=Y.prototype.Va;Y.prototype.prepareAdoptedCssText=Y.prototype.fb;Object.defineProperties(Y.prototype,{nativeShadow:{get:function(){return V}},nativeCss:{get:function(){return X}}});var Z=new Y,fj,gj;window.ShadyCSS&&(fj=window.ShadyCSS.ApplyShim,gj=window.ShadyCSS.CustomStyleInterface);
1840
+ window.ShadyCSS={ScopingShim:Z,prepareTemplate:function(a,b,c){Z.flushCustomStyles();Z.prepareTemplate(a,b,c)},prepareTemplateDom:function(a,b){Z.prepareTemplateDom(a,b)},prepareTemplateStyles:function(a,b,c){Z.flushCustomStyles();Z.prepareTemplateStyles(a,b,c)},styleSubtree:function(a,b){Z.flushCustomStyles();Z.styleSubtree(a,b)},styleElement:function(a){Z.flushCustomStyles();Z.styleElement(a)},styleDocument:function(a){Z.flushCustomStyles();Z.styleDocument(a)},flushCustomStyles:function(){Z.flushCustomStyles()},
1841
+ getComputedStyleValue:function(a,b){return Z.getComputedStyleValue(a,b)},nativeCss:X,nativeShadow:V,cssBuild:nh,disableRuntime:oh};fj&&(window.ShadyCSS.ApplyShim=fj);gj&&(window.ShadyCSS.CustomStyleInterface=gj);(function(a){function b(t){""==t&&(f.call(this),this.m=!0);return t.toLowerCase()}function c(t){var F=t.charCodeAt(0);return 32<F&&127>F&&-1==[34,35,60,62,63,96].indexOf(F)?t:encodeURIComponent(t)}function d(t){var F=t.charCodeAt(0);return 32<F&&127>F&&-1==[34,35,60,62,96].indexOf(F)?t:encodeURIComponent(t)}function e(t,F,E){function M(fa){sa.push(fa)}var y=F||"scheme start",W=0,w="",ta=!1,ha=!1,sa=[];a:for(;(void 0!=t[W-1]||0==W)&&!this.m;){var n=t[W];switch(y){case "scheme start":if(n&&q.test(n))w+=
1842
+ n.toLowerCase(),y="scheme";else if(F){M("Invalid scheme.");break a}else{w="";y="no scheme";continue}break;case "scheme":if(n&&H.test(n))w+=n.toLowerCase();else if(":"==n){this.l=w;w="";if(F)break a;void 0!==l[this.l]&&(this.G=!0);y="file"==this.l?"relative":this.G&&E&&E.l==this.l?"relative or authority":this.G?"authority first slash":"scheme data"}else if(F){void 0!=n&&M("Code point not allowed in scheme: "+n);break a}else{w="";W=0;y="no scheme";continue}break;case "scheme data":"?"==n?(this.A="?",
1843
+ y="query"):"#"==n?(this.C="#",y="fragment"):void 0!=n&&"\t"!=n&&"\n"!=n&&"\r"!=n&&(this.va+=c(n));break;case "no scheme":if(E&&void 0!==l[E.l]){y="relative";continue}else M("Missing scheme."),f.call(this),this.m=!0;break;case "relative or authority":if("/"==n&&"/"==t[W+1])y="authority ignore slashes";else{M("Expected /, got: "+n);y="relative";continue}break;case "relative":this.G=!0;"file"!=this.l&&(this.l=E.l);if(void 0==n){this.o=E.o;this.v=E.v;this.s=E.s.slice();this.A=E.A;this.B=E.B;this.j=E.j;
1844
+ break a}else if("/"==n||"\\"==n)"\\"==n&&M("\\ is an invalid code point."),y="relative slash";else if("?"==n)this.o=E.o,this.v=E.v,this.s=E.s.slice(),this.A="?",this.B=E.B,this.j=E.j,y="query";else if("#"==n)this.o=E.o,this.v=E.v,this.s=E.s.slice(),this.A=E.A,this.C="#",this.B=E.B,this.j=E.j,y="fragment";else{y=t[W+1];var J=t[W+2];if("file"!=this.l||!q.test(n)||":"!=y&&"|"!=y||void 0!=J&&"/"!=J&&"\\"!=J&&"?"!=J&&"#"!=J)this.o=E.o,this.v=E.v,this.B=E.B,this.j=E.j,this.s=E.s.slice(),this.s.pop();y=
1845
+ "relative path";continue}break;case "relative slash":if("/"==n||"\\"==n)"\\"==n&&M("\\ is an invalid code point."),y="file"==this.l?"file host":"authority ignore slashes";else{"file"!=this.l&&(this.o=E.o,this.v=E.v,this.B=E.B,this.j=E.j);y="relative path";continue}break;case "authority first slash":if("/"==n)y="authority second slash";else{M("Expected '/', got: "+n);y="authority ignore slashes";continue}break;case "authority second slash":y="authority ignore slashes";if("/"!=n){M("Expected '/', got: "+
1846
+ n);continue}break;case "authority ignore slashes":if("/"!=n&&"\\"!=n){y="authority";continue}else M("Expected authority, got: "+n);break;case "authority":if("@"==n){ta&&(M("@ already seen."),w+="%40");ta=!0;for(n=0;n<w.length;n++)J=w[n],"\t"==J||"\n"==J||"\r"==J?M("Invalid whitespace in authority."):":"==J&&null===this.j?this.j="":(J=c(J),null!==this.j?this.j+=J:this.B+=J);w=""}else if(void 0==n||"/"==n||"\\"==n||"?"==n||"#"==n){W-=w.length;w="";y="host";continue}else w+=n;break;case "file host":if(void 0==
1847
+ n||"/"==n||"\\"==n||"?"==n||"#"==n){2!=w.length||!q.test(w[0])||":"!=w[1]&&"|"!=w[1]?(0!=w.length&&(this.o=b.call(this,w),w=""),y="relative path start"):y="relative path";continue}else"\t"==n||"\n"==n||"\r"==n?M("Invalid whitespace in file host."):w+=n;break;case "host":case "hostname":if(":"!=n||ha)if(void 0==n||"/"==n||"\\"==n||"?"==n||"#"==n){this.o=b.call(this,w);w="";y="relative path start";if(F)break a;continue}else"\t"!=n&&"\n"!=n&&"\r"!=n?("["==n?ha=!0:"]"==n&&(ha=!1),w+=n):M("Invalid code point in host/hostname: "+
1848
+ n);else if(this.o=b.call(this,w),w="",y="port","hostname"==F)break a;break;case "port":if(/[0-9]/.test(n))w+=n;else if(void 0==n||"/"==n||"\\"==n||"?"==n||"#"==n||F){""!=w&&(w=parseInt(w,10),w!=l[this.l]&&(this.v=w+""),w="");if(F)break a;y="relative path start";continue}else"\t"==n||"\n"==n||"\r"==n?M("Invalid code point in port: "+n):(f.call(this),this.m=!0);break;case "relative path start":"\\"==n&&M("'\\' not allowed in path.");y="relative path";if("/"!=n&&"\\"!=n)continue;break;case "relative path":if(void 0!=
1849
+ n&&"/"!=n&&"\\"!=n&&(F||"?"!=n&&"#"!=n))"\t"!=n&&"\n"!=n&&"\r"!=n&&(w+=c(n));else{"\\"==n&&M("\\ not allowed in relative path.");if(J=m[w.toLowerCase()])w=J;".."==w?(this.s.pop(),"/"!=n&&"\\"!=n&&this.s.push("")):"."==w&&"/"!=n&&"\\"!=n?this.s.push(""):"."!=w&&("file"==this.l&&0==this.s.length&&2==w.length&&q.test(w[0])&&"|"==w[1]&&(w=w[0]+":"),this.s.push(w));w="";"?"==n?(this.A="?",y="query"):"#"==n&&(this.C="#",y="fragment")}break;case "query":F||"#"!=n?void 0!=n&&"\t"!=n&&"\n"!=n&&"\r"!=n&&(this.A+=
1850
+ d(n)):(this.C="#",y="fragment");break;case "fragment":void 0!=n&&"\t"!=n&&"\n"!=n&&"\r"!=n&&(this.C+=n)}W++}}function f(){this.B=this.va=this.l="";this.j=null;this.v=this.o="";this.s=[];this.C=this.A="";this.G=this.m=!1}function g(t,F){void 0===F||F instanceof g||(F=new g(String(F)));this.g=t;f.call(this);e.call(this,this.g.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g,""),null,F)}var h=!1;try{var k=new URL("b","http://a");k.pathname="c%20d";h="http://a/c%20d"===k.href}catch(t){}if(!h){var l=Object.create(null);
1851
+ l.ftp=21;l.file=0;l.gopher=70;l.http=80;l.https=443;l.ws=80;l.wss=443;var m=Object.create(null);m["%2e"]=".";m[".%2e"]="..";m["%2e."]="..";m["%2e%2e"]="..";var q=/[a-zA-Z]/,H=/[a-zA-Z0-9+\-.]/;g.prototype={toString:function(){return this.href},get href(){if(this.m)return this.g;var t="";if(""!=this.B||null!=this.j)t=this.B+(null!=this.j?":"+this.j:"")+"@";return this.protocol+(this.G?"//"+t+this.host:"")+this.pathname+this.A+this.C},set href(t){f.call(this);e.call(this,t)},get protocol(){return this.l+
1852
+ ":"},set protocol(t){this.m||e.call(this,t+":","scheme start")},get host(){return this.m?"":this.v?this.o+":"+this.v:this.o},set host(t){!this.m&&this.G&&e.call(this,t,"host")},get hostname(){return this.o},set hostname(t){!this.m&&this.G&&e.call(this,t,"hostname")},get port(){return this.v},set port(t){!this.m&&this.G&&e.call(this,t,"port")},get pathname(){return this.m?"":this.G?"/"+this.s.join("/"):this.va},set pathname(t){!this.m&&this.G&&(this.s=[],e.call(this,t,"relative path start"))},get search(){return this.m||
1853
+ !this.A||"?"==this.A?"":this.A},set search(t){!this.m&&this.G&&(this.A="?","?"==t[0]&&(t=t.slice(1)),e.call(this,t,"query"))},get hash(){return this.m||!this.C||"#"==this.C?"":this.C},set hash(t){this.m||(t?(this.C="#","#"==t[0]&&(t=t.slice(1)),e.call(this,t,"fragment")):this.C="")},get origin(){var t;if(this.m||!this.l)return"";switch(this.l){case "data":case "file":case "javascript":case "mailto":return"null"}return(t=this.host)?this.l+"://"+t:""}};var C=a.URL;C&&(g.createObjectURL=function(t){return C.createObjectURL.apply(C,
1854
+ arguments)},g.revokeObjectURL=function(t){C.revokeObjectURL(t)});a.URL=g}})(window);/*
1709
1855
 
1710
- Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
1711
- This code may only be used under the BSD style license found at
1712
- http://polymer.github.io/LICENSE.txt The complete set of authors may be found
1713
- at http://polymer.github.io/AUTHORS.txt The complete set of contributors may
1714
- be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by
1715
- Google as part of the polymer project is also subject to an additional IP
1716
- rights grant found at http://polymer.github.io/PATENTS.txt
1856
+ Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
1857
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
1858
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
1859
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
1860
+ Code distributed by Google as part of the polymer project is also
1861
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
1717
1862
  */
1718
- var we=window.Document.prototype.createElement,xe=window.Document.prototype.createElementNS,ye=window.Document.prototype.importNode,ze=window.Document.prototype.prepend,Ae=window.Document.prototype.append,Be=window.DocumentFragment.prototype.prepend,Ce=window.DocumentFragment.prototype.append,De=window.Node.prototype.cloneNode,Ee=window.Node.prototype.appendChild,Fe=window.Node.prototype.insertBefore,Ge=window.Node.prototype.removeChild,He=window.Node.prototype.replaceChild,Ie=Object.getOwnPropertyDescriptor(window.Node.prototype,
1719
- "textContent"),Je=window.Element.prototype.attachShadow,Ke=Object.getOwnPropertyDescriptor(window.Element.prototype,"innerHTML"),Le=window.Element.prototype.getAttribute,Me=window.Element.prototype.setAttribute,Ne=window.Element.prototype.removeAttribute,Oe=window.Element.prototype.getAttributeNS,Pe=window.Element.prototype.setAttributeNS,Qe=window.Element.prototype.removeAttributeNS,Re=window.Element.prototype.insertAdjacentElement,Se=window.Element.prototype.insertAdjacentHTML,Te=window.Element.prototype.prepend,
1720
- Ue=window.Element.prototype.append,Ve=window.Element.prototype.before,We=window.Element.prototype.after,Xe=window.Element.prototype.replaceWith,Ye=window.Element.prototype.remove,Ze=window.HTMLElement,$e=Object.getOwnPropertyDescriptor(window.HTMLElement.prototype,"innerHTML"),af=window.HTMLElement.prototype.insertAdjacentElement,bf=window.HTMLElement.prototype.insertAdjacentHTML;var cf=new Set;"annotation-xml color-profile font-face font-face-src font-face-uri font-face-format font-face-name missing-glyph".split(" ").forEach(function(a){return cf.add(a)});function df(a){var b=cf.has(a);a=/^[a-z][.0-9_a-z]*-[-.0-9_a-z]*$/.test(a);return!b&&a}var ef=document.contains?document.contains.bind(document):document.documentElement.contains.bind(document.documentElement);
1721
- function T(a){var b=a.isConnected;if(void 0!==b)return b;if(ef(a))return!0;for(;a&&!(a.__CE_isImportDocument||a instanceof Document);)a=a.parentNode||(window.ShadowRoot&&a instanceof ShadowRoot?a.host:void 0);return!(!a||!(a.__CE_isImportDocument||a instanceof Document))}function ff(a){var b=a.children;if(b)return Array.prototype.slice.call(b);b=[];for(a=a.firstChild;a;a=a.nextSibling)a.nodeType===Node.ELEMENT_NODE&&b.push(a);return b}
1722
- function gf(a,b){for(;b&&b!==a&&!b.nextSibling;)b=b.parentNode;return b&&b!==a?b.nextSibling:null}
1723
- function hf(a,b,c){for(var d=a;d;){if(d.nodeType===Node.ELEMENT_NODE){var e=d;b(e);var f=e.localName;if("link"===f&&"import"===e.getAttribute("rel")){d=e.import;void 0===c&&(c=new Set);if(d instanceof Node&&!c.has(d))for(c.add(d),d=d.firstChild;d;d=d.nextSibling)hf(d,b,c);d=gf(a,e);continue}else if("template"===f){d=gf(a,e);continue}if(e=e.__CE_shadowRoot)for(e=e.firstChild;e;e=e.nextSibling)hf(e,b,c)}d=d.firstChild?d.firstChild:gf(a,d)}};function jf(){var a=!(null===kf||void 0===kf||!kf.noDocumentConstructionObserver),b=!(null===kf||void 0===kf||!kf.shadyDomFastWalk);this.X=[];this.a=[];this.R=!1;this.shadyDomFastWalk=b;this.jb=!a}function lf(a,b,c,d){var e=window.ShadyDom;if(a.shadyDomFastWalk&&e&&e.inUse){if(b.nodeType===Node.ELEMENT_NODE&&c(b),b.querySelectorAll)for(a=e.nativeMethods.querySelectorAll.call(b,"*"),b=0;b<a.length;b++)c(a[b])}else hf(b,c,d)}function mf(a,b){a.R=!0;a.X.push(b)}function nf(a,b){a.R=!0;a.a.push(b)}
1724
- function of(a,b){a.R&&lf(a,b,function(c){return pf(a,c)})}function pf(a,b){if(a.R&&!b.__CE_patched){b.__CE_patched=!0;for(var c=0;c<a.X.length;c++)a.X[c](b);for(c=0;c<a.a.length;c++)a.a[c](b)}}function qf(a,b){var c=[];lf(a,b,function(e){return c.push(e)});for(b=0;b<c.length;b++){var d=c[b];1===d.__CE_state?a.connectedCallback(d):rf(a,d)}}function sf(a,b){var c=[];lf(a,b,function(e){return c.push(e)});for(b=0;b<c.length;b++){var d=c[b];1===d.__CE_state&&a.disconnectedCallback(d)}}
1725
- function tf(a,b,c){c=void 0===c?{}:c;var d=c.kb,e=c.upgrade||function(g){return rf(a,g)},f=[];lf(a,b,function(g){a.R&&pf(a,g);if("link"===g.localName&&"import"===g.getAttribute("rel")){var h=g.import;h instanceof Node&&(h.__CE_isImportDocument=!0,h.__CE_registry=document.__CE_registry);h&&"complete"===h.readyState?h.__CE_documentLoadHandled=!0:g.addEventListener("load",function(){var k=g.import;if(!k.__CE_documentLoadHandled){k.__CE_documentLoadHandled=!0;var l=new Set;d&&(d.forEach(function(m){return l.add(m)}),
1726
- l.delete(k));tf(a,k,{kb:l,upgrade:e})}})}else f.push(g)},d);for(b=0;b<f.length;b++)e(f[b])}
1727
- function rf(a,b){try{var c=b.ownerDocument,d=c.__CE_registry;var e=d&&(c.defaultView||c.__CE_isImportDocument)?uf(d,b.localName):void 0;if(e&&void 0===b.__CE_state){e.constructionStack.push(b);try{try{if(new e.constructorFunction!==b)throw Error("The custom element constructor did not produce the element being upgraded.");}finally{e.constructionStack.pop()}}catch(k){throw b.__CE_state=2,k;}b.__CE_state=1;b.__CE_definition=e;if(e.attributeChangedCallback&&b.hasAttributes()){var f=e.observedAttributes;
1728
- for(e=0;e<f.length;e++){var g=f[e],h=b.getAttribute(g);null!==h&&a.attributeChangedCallback(b,g,null,h,null)}}T(b)&&a.connectedCallback(b)}}catch(k){vf(k)}}jf.prototype.connectedCallback=function(a){var b=a.__CE_definition;if(b.connectedCallback)try{b.connectedCallback.call(a)}catch(c){vf(c)}};jf.prototype.disconnectedCallback=function(a){var b=a.__CE_definition;if(b.disconnectedCallback)try{b.disconnectedCallback.call(a)}catch(c){vf(c)}};
1729
- jf.prototype.attributeChangedCallback=function(a,b,c,d,e){var f=a.__CE_definition;if(f.attributeChangedCallback&&-1<f.observedAttributes.indexOf(b))try{f.attributeChangedCallback.call(a,b,c,d,e)}catch(g){vf(g)}};
1730
- function wf(a,b,c,d){var e=b.__CE_registry;if(e&&(null===d||"http://www.w3.org/1999/xhtml"===d)&&(e=uf(e,c)))try{var f=new e.constructorFunction;if(void 0===f.__CE_state||void 0===f.__CE_definition)throw Error("Failed to construct '"+c+"': The returned value was not constructed with the HTMLElement constructor.");if("http://www.w3.org/1999/xhtml"!==f.namespaceURI)throw Error("Failed to construct '"+c+"': The constructed element's namespace must be the HTML namespace.");if(f.hasAttributes())throw Error("Failed to construct '"+
1731
- c+"': The constructed element must not have any attributes.");if(null!==f.firstChild)throw Error("Failed to construct '"+c+"': The constructed element must not have any children.");if(null!==f.parentNode)throw Error("Failed to construct '"+c+"': The constructed element must not have a parent node.");if(f.ownerDocument!==b)throw Error("Failed to construct '"+c+"': The constructed element's owner document is incorrect.");if(f.localName!==c)throw Error("Failed to construct '"+c+"': The constructed element's local name is incorrect.");
1732
- return f}catch(g){return vf(g),b=null===d?we.call(b,c):xe.call(b,d,c),Object.setPrototypeOf(b,HTMLUnknownElement.prototype),b.__CE_state=2,b.__CE_definition=void 0,pf(a,b),b}b=null===d?we.call(b,c):xe.call(b,d,c);pf(a,b);return b}
1733
- function vf(a){var b=a.message,c=a.sourceURL||a.fileName||"",d=a.line||a.lineNumber||0,e=a.column||a.columnNumber||0,f=void 0;void 0===ErrorEvent.prototype.initErrorEvent?f=new ErrorEvent("error",{cancelable:!0,message:b,filename:c,lineno:d,colno:e,error:a}):(f=document.createEvent("ErrorEvent"),f.initErrorEvent("error",!1,!0,b,c,d),f.preventDefault=function(){Object.defineProperty(this,"defaultPrevented",{configurable:!0,get:function(){return!0}})});void 0===f.error&&Object.defineProperty(f,"error",
1734
- {configurable:!0,enumerable:!0,get:function(){return a}});window.dispatchEvent(f);f.defaultPrevented||console.error(a)};function xf(){var a=this;this.C=void 0;this.Ca=new Promise(function(b){a.a=b})}xf.prototype.resolve=function(a){if(this.C)throw Error("Already resolved.");this.C=a;this.a(a)};function yf(a){var b=document;this.S=void 0;this.M=a;this.a=b;tf(this.M,this.a);"loading"===this.a.readyState&&(this.S=new MutationObserver(this.b.bind(this)),this.S.observe(this.a,{childList:!0,subtree:!0}))}function zf(a){a.S&&a.S.disconnect()}yf.prototype.b=function(a){var b=this.a.readyState;"interactive"!==b&&"complete"!==b||zf(this);for(b=0;b<a.length;b++)for(var c=a[b].addedNodes,d=0;d<c.length;d++)tf(this.M,c[d])};function U(a){this.ea=new Map;this.fa=new Map;this.xa=new Map;this.na=!1;this.qa=new Map;this.da=function(b){return b()};this.P=!1;this.ga=[];this.M=a;this.ya=a.jb?new yf(a):void 0}w=U.prototype;w.$a=function(a,b){var c=this;if(!(b instanceof Function))throw new TypeError("Custom element constructor getters must be functions.");Af(this,a);this.ea.set(a,b);this.ga.push(a);this.P||(this.P=!0,this.da(function(){return Bf(c)}))};
1735
- w.define=function(a,b){var c=this;if(!(b instanceof Function))throw new TypeError("Custom element constructors must be functions.");Af(this,a);Cf(this,a,b);this.ga.push(a);this.P||(this.P=!0,this.da(function(){return Bf(c)}))};function Af(a,b){if(!df(b))throw new SyntaxError("The element name '"+b+"' is not valid.");if(uf(a,b))throw Error("A custom element with name '"+(b+"' has already been defined."));if(a.na)throw Error("A custom element is already being defined.");}
1736
- function Cf(a,b,c){a.na=!0;var d;try{var e=c.prototype;if(!(e instanceof Object))throw new TypeError("The custom element constructor's prototype is not an object.");var f=function(m){var q=e[m];if(void 0!==q&&!(q instanceof Function))throw Error("The '"+m+"' callback must be a function.");return q};var g=f("connectedCallback");var h=f("disconnectedCallback");var k=f("adoptedCallback");var l=(d=f("attributeChangedCallback"))&&c.observedAttributes||[]}catch(m){throw m;}finally{a.na=!1}c={localName:b,
1737
- constructorFunction:c,connectedCallback:g,disconnectedCallback:h,adoptedCallback:k,attributeChangedCallback:d,observedAttributes:l,constructionStack:[]};a.fa.set(b,c);a.xa.set(c.constructorFunction,c);return c}w.upgrade=function(a){tf(this.M,a)};
1738
- function Bf(a){if(!1!==a.P){a.P=!1;for(var b=[],c=a.ga,d=new Map,e=0;e<c.length;e++)d.set(c[e],[]);tf(a.M,document,{upgrade:function(k){if(void 0===k.__CE_state){var l=k.localName,m=d.get(l);m?m.push(k):a.fa.has(l)&&b.push(k)}}});for(e=0;e<b.length;e++)rf(a.M,b[e]);for(e=0;e<c.length;e++){for(var f=c[e],g=d.get(f),h=0;h<g.length;h++)rf(a.M,g[h]);(f=a.qa.get(f))&&f.resolve(void 0)}c.length=0}}w.get=function(a){if(a=uf(this,a))return a.constructorFunction};
1739
- w.whenDefined=function(a){if(!df(a))return Promise.reject(new SyntaxError("'"+a+"' is not a valid custom element name."));var b=this.qa.get(a);if(b)return b.Ca;b=new xf;this.qa.set(a,b);var c=this.fa.has(a)||this.ea.has(a);a=-1===this.ga.indexOf(a);c&&a&&b.resolve(void 0);return b.Ca};w.polyfillWrapFlushCallback=function(a){this.ya&&zf(this.ya);var b=this.da;this.da=function(c){return a(function(){return b(c)})}};
1740
- function uf(a,b){var c=a.fa.get(b);if(c)return c;if(c=a.ea.get(b)){a.ea.delete(b);try{return Cf(a,b,c())}catch(d){vf(d)}}}window.CustomElementRegistry=U;U.prototype.define=U.prototype.define;U.prototype.upgrade=U.prototype.upgrade;U.prototype.get=U.prototype.get;U.prototype.whenDefined=U.prototype.whenDefined;U.prototype.polyfillDefineLazy=U.prototype.$a;U.prototype.polyfillWrapFlushCallback=U.prototype.polyfillWrapFlushCallback;function Df(a,b,c){function d(e){return function(f){for(var g=[],h=0;h<arguments.length;++h)g[h]=arguments[h];h=[];for(var k=[],l=0;l<g.length;l++){var m=g[l];m instanceof Element&&T(m)&&k.push(m);if(m instanceof DocumentFragment)for(m=m.firstChild;m;m=m.nextSibling)h.push(m);else h.push(m)}e.apply(this,g);for(g=0;g<k.length;g++)sf(a,k[g]);if(T(this))for(g=0;g<h.length;g++)k=h[g],k instanceof Element&&qf(a,k)}}void 0!==c.prepend&&(b.prepend=d(c.prepend));void 0!==c.append&&(b.append=d(c.append))}
1741
- ;function Ef(a){Document.prototype.createElement=function(b){return wf(a,this,b,null)};Document.prototype.importNode=function(b,c){b=ye.call(this,b,!!c);this.__CE_registry?tf(a,b):of(a,b);return b};Document.prototype.createElementNS=function(b,c){return wf(a,this,c,b)};Df(a,Document.prototype,{prepend:ze,append:Ae})};function Ff(a){function b(d){return function(e){for(var f=[],g=0;g<arguments.length;++g)f[g]=arguments[g];g=[];for(var h=[],k=0;k<f.length;k++){var l=f[k];l instanceof Element&&T(l)&&h.push(l);if(l instanceof DocumentFragment)for(l=l.firstChild;l;l=l.nextSibling)g.push(l);else g.push(l)}d.apply(this,f);for(f=0;f<h.length;f++)sf(a,h[f]);if(T(this))for(f=0;f<g.length;f++)h=g[f],h instanceof Element&&qf(a,h)}}var c=Element.prototype;void 0!==Ve&&(c.before=b(Ve));void 0!==We&&(c.after=b(We));void 0!==
1742
- Xe&&(c.replaceWith=function(d){for(var e=[],f=0;f<arguments.length;++f)e[f]=arguments[f];f=[];for(var g=[],h=0;h<e.length;h++){var k=e[h];k instanceof Element&&T(k)&&g.push(k);if(k instanceof DocumentFragment)for(k=k.firstChild;k;k=k.nextSibling)f.push(k);else f.push(k)}h=T(this);Xe.apply(this,e);for(e=0;e<g.length;e++)sf(a,g[e]);if(h)for(sf(a,this),e=0;e<f.length;e++)g=f[e],g instanceof Element&&qf(a,g)});void 0!==Ye&&(c.remove=function(){var d=T(this);Ye.call(this);d&&sf(a,this)})};function Gf(a){function b(e,f){Object.defineProperty(e,"innerHTML",{enumerable:f.enumerable,configurable:!0,get:f.get,set:function(g){var h=this,k=void 0;T(this)&&(k=[],lf(a,this,function(q){q!==h&&k.push(q)}));f.set.call(this,g);if(k)for(var l=0;l<k.length;l++){var m=k[l];1===m.__CE_state&&a.disconnectedCallback(m)}this.ownerDocument.__CE_registry?tf(a,this):of(a,this);return g}})}function c(e,f){e.insertAdjacentElement=function(g,h){var k=T(h);g=f.call(this,g,h);k&&sf(a,h);T(g)&&qf(a,h);return g}}
1743
- function d(e,f){function g(h,k){for(var l=[];h!==k;h=h.nextSibling)l.push(h);for(k=0;k<l.length;k++)tf(a,l[k])}e.insertAdjacentHTML=function(h,k){h=h.toLowerCase();if("beforebegin"===h){var l=this.previousSibling;f.call(this,h,k);g(l||this.parentNode.firstChild,this)}else if("afterbegin"===h)l=this.firstChild,f.call(this,h,k),g(this.firstChild,l);else if("beforeend"===h)l=this.lastChild,f.call(this,h,k),g(l||this.firstChild,null);else if("afterend"===h)l=this.nextSibling,f.call(this,h,k),g(this.nextSibling,
1744
- l);else throw new SyntaxError("The value provided ("+String(h)+") is not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'.");}}Je&&(Element.prototype.attachShadow=function(e){e=Je.call(this,e);if(a.R&&!e.__CE_patched){e.__CE_patched=!0;for(var f=0;f<a.X.length;f++)a.X[f](e)}return this.__CE_shadowRoot=e});Ke&&Ke.get?b(Element.prototype,Ke):$e&&$e.get?b(HTMLElement.prototype,$e):nf(a,function(e){b(e,{enumerable:!0,configurable:!0,get:function(){return De.call(this,!0).innerHTML},set:function(f){var g=
1745
- "template"===this.localName,h=g?this.content:this,k=xe.call(document,this.namespaceURI,this.localName);for(k.innerHTML=f;0<h.childNodes.length;)Ge.call(h,h.childNodes[0]);for(f=g?k.content:k;0<f.childNodes.length;)Ee.call(h,f.childNodes[0])}})});Element.prototype.setAttribute=function(e,f){if(1!==this.__CE_state)return Me.call(this,e,f);var g=Le.call(this,e);Me.call(this,e,f);f=Le.call(this,e);a.attributeChangedCallback(this,e,g,f,null)};Element.prototype.setAttributeNS=function(e,f,g){if(1!==this.__CE_state)return Pe.call(this,
1746
- e,f,g);var h=Oe.call(this,e,f);Pe.call(this,e,f,g);g=Oe.call(this,e,f);a.attributeChangedCallback(this,f,h,g,e)};Element.prototype.removeAttribute=function(e){if(1!==this.__CE_state)return Ne.call(this,e);var f=Le.call(this,e);Ne.call(this,e);null!==f&&a.attributeChangedCallback(this,e,f,null,null)};Element.prototype.removeAttributeNS=function(e,f){if(1!==this.__CE_state)return Qe.call(this,e,f);var g=Oe.call(this,e,f);Qe.call(this,e,f);var h=Oe.call(this,e,f);g!==h&&a.attributeChangedCallback(this,
1747
- f,g,h,e)};af?c(HTMLElement.prototype,af):Re&&c(Element.prototype,Re);bf?d(HTMLElement.prototype,bf):Se&&d(Element.prototype,Se);Df(a,Element.prototype,{prepend:Te,append:Ue});Ff(a)};var Hf={};function If(a){function b(){var c=this.constructor;var d=document.__CE_registry.xa.get(c);if(!d)throw Error("Failed to construct a custom element: The constructor was not registered with `customElements`.");var e=d.constructionStack;if(0===e.length)return e=we.call(document,d.localName),Object.setPrototypeOf(e,c.prototype),e.__CE_state=1,e.__CE_definition=d,pf(a,e),e;var f=e.length-1,g=e[f];if(g===Hf)throw Error("Failed to construct '"+d.localName+"': This element was already constructed.");e[f]=
1748
- Hf;Object.setPrototypeOf(g,c.prototype);pf(a,g);return g}b.prototype=Ze.prototype;Object.defineProperty(HTMLElement.prototype,"constructor",{writable:!0,configurable:!0,enumerable:!1,value:b});window.HTMLElement=b};function Jf(a){function b(c,d){Object.defineProperty(c,"textContent",{enumerable:d.enumerable,configurable:!0,get:d.get,set:function(e){if(this.nodeType===Node.TEXT_NODE)d.set.call(this,e);else{var f=void 0;if(this.firstChild){var g=this.childNodes,h=g.length;if(0<h&&T(this)){f=Array(h);for(var k=0;k<h;k++)f[k]=g[k]}}d.set.call(this,e);if(f)for(e=0;e<f.length;e++)sf(a,f[e])}}})}Node.prototype.insertBefore=function(c,d){if(c instanceof DocumentFragment){var e=ff(c);c=Fe.call(this,c,d);if(T(this))for(d=
1749
- 0;d<e.length;d++)qf(a,e[d]);return c}e=c instanceof Element&&T(c);d=Fe.call(this,c,d);e&&sf(a,c);T(this)&&qf(a,c);return d};Node.prototype.appendChild=function(c){if(c instanceof DocumentFragment){var d=ff(c);c=Ee.call(this,c);if(T(this))for(var e=0;e<d.length;e++)qf(a,d[e]);return c}d=c instanceof Element&&T(c);e=Ee.call(this,c);d&&sf(a,c);T(this)&&qf(a,c);return e};Node.prototype.cloneNode=function(c){c=De.call(this,!!c);this.ownerDocument.__CE_registry?tf(a,c):of(a,c);return c};Node.prototype.removeChild=
1750
- function(c){var d=c instanceof Element&&T(c),e=Ge.call(this,c);d&&sf(a,c);return e};Node.prototype.replaceChild=function(c,d){if(c instanceof DocumentFragment){var e=ff(c);c=He.call(this,c,d);if(T(this))for(sf(a,d),d=0;d<e.length;d++)qf(a,e[d]);return c}e=c instanceof Element&&T(c);var f=He.call(this,c,d),g=T(this);g&&sf(a,d);e&&sf(a,c);g&&qf(a,c);return f};Ie&&Ie.get?b(Node.prototype,Ie):mf(a,function(c){b(c,{enumerable:!0,configurable:!0,get:function(){for(var d=[],e=this.firstChild;e;e=e.nextSibling)e.nodeType!==
1751
- Node.COMMENT_NODE&&d.push(e.textContent);return d.join("")},set:function(d){for(;this.firstChild;)Ge.call(this,this.firstChild);null!=d&&""!==d&&Ee.call(this,document.createTextNode(d))}})})};var kf=window.customElements;function Kf(){var a=new jf;If(a);Ef(a);Df(a,DocumentFragment.prototype,{prepend:Be,append:Ce});Jf(a);Gf(a);a=new U(a);document.__CE_registry=a;Object.defineProperty(window,"customElements",{configurable:!0,enumerable:!0,value:a})}kf&&!kf.forcePolyfill&&"function"==typeof kf.define&&"function"==typeof kf.get||Kf();window.__CE_installPolyfill=Kf;function Lf(){this.end=this.start=0;this.rules=this.parent=this.previous=null;this.cssText=this.parsedCssText="";this.atRule=!1;this.type=0;this.parsedSelector=this.selector=this.keyframesName=""}
1752
- function Mf(a){var b=a=a.replace(Nf,"").replace(Of,""),c=new Lf;c.start=0;c.end=b.length;for(var d=c,e=0,f=b.length;e<f;e++)if("{"===b[e]){d.rules||(d.rules=[]);var g=d,h=g.rules[g.rules.length-1]||null;d=new Lf;d.start=e+1;d.parent=g;d.previous=h;g.rules.push(d)}else"}"===b[e]&&(d.end=e+1,d=d.parent||c);return Pf(c,a)}
1753
- function Pf(a,b){var c=b.substring(a.start,a.end-1);a.parsedCssText=a.cssText=c.trim();a.parent&&(c=b.substring(a.previous?a.previous.end:a.parent.start,a.start-1),c=Qf(c),c=c.replace(Rf," "),c=c.substring(c.lastIndexOf(";")+1),c=a.parsedSelector=a.selector=c.trim(),a.atRule=0===c.indexOf("@"),a.atRule?0===c.indexOf("@media")?a.type=Sf:c.match(Tf)&&(a.type=Uf,a.keyframesName=a.selector.split(Rf).pop()):a.type=0===c.indexOf("--")?Vf:Wf);if(c=a.rules)for(var d=0,e=c.length,f=void 0;d<e&&(f=c[d]);d++)Pf(f,
1754
- b);return a}function Qf(a){return a.replace(/\\([0-9a-f]{1,6})\s/gi,function(b,c){b=c;for(c=6-b.length;c--;)b="0"+b;return"\\"+b})}
1755
- function Xf(a,b,c){c=void 0===c?"":c;var d="";if(a.cssText||a.rules){var e=a.rules,f;if(f=e)f=e[0],f=!(f&&f.selector&&0===f.selector.indexOf("--"));if(f){f=0;for(var g=e.length,h=void 0;f<g&&(h=e[f]);f++)d=Xf(h,b,d)}else b?b=a.cssText:(b=a.cssText,b=b.replace(Yf,"").replace(Zf,""),b=b.replace($f,"").replace(ag,"")),(d=b.trim())&&(d=" "+d+"\n")}d&&(a.selector&&(c+=a.selector+" {\n"),c+=d,a.selector&&(c+="}\n\n"));return c}
1756
- var Wf=1,Uf=7,Sf=4,Vf=1E3,Nf=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,Of=/@import[^;]*;/gim,Yf=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,Zf=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,$f=/@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,ag=/[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,Tf=/^@[^\s]*keyframes/,Rf=/\s+/g;var V=!(window.ShadyDOM&&window.ShadyDOM.inUse),bg;function cg(a){bg=a&&a.shimcssproperties?!1:V||!(navigator.userAgent.match(/AppleWebKit\/601|Edge\/15/)||!window.CSS||!CSS.supports||!CSS.supports("box-shadow","0 0 0 var(--foo)"))}var dg;window.ShadyCSS&&void 0!==window.ShadyCSS.cssBuild&&(dg=window.ShadyCSS.cssBuild);var eg=!(!window.ShadyCSS||!window.ShadyCSS.disableRuntime);
1757
- window.ShadyCSS&&void 0!==window.ShadyCSS.nativeCss?bg=window.ShadyCSS.nativeCss:window.ShadyCSS?(cg(window.ShadyCSS),window.ShadyCSS=void 0):cg(window.WebComponents&&window.WebComponents.flags);var X=bg;var fg=/(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};{])+)|\{([^}]*)\}(?:(?=[;\s}])|$))/gi,hg=/(?:^|\W+)@apply\s*\(?([^);\n]*)\)?/gi,ig=/(--[\w-]+)\s*([:,;)]|$)/gi,jg=/(animation\s*:)|(animation-name\s*:)/,kg=/@media\s(.*)/,lg=/\{[^}]*\}/g;var mg=new Set;function ng(a,b){if(!a)return"";"string"===typeof a&&(a=Mf(a));b&&og(a,b);return Xf(a,X)}function pg(a){!a.__cssRules&&a.textContent&&(a.__cssRules=Mf(a.textContent));return a.__cssRules||null}function qg(a){return!!a.parent&&a.parent.type===Uf}function og(a,b,c,d){if(a){var e=!1,f=a.type;if(d&&f===Sf){var g=a.selector.match(kg);g&&(window.matchMedia(g[1]).matches||(e=!0))}f===Wf?b(a):c&&f===Uf?c(a):f===Vf&&(e=!0);if((a=a.rules)&&!e)for(e=0,f=a.length,g=void 0;e<f&&(g=a[e]);e++)og(g,b,c,d)}}
1758
- function rg(a,b,c,d){var e=document.createElement("style");b&&e.setAttribute("scope",b);e.textContent=a;sg(e,c,d);return e}var tg=null;function ug(a){a=document.createComment(" Shady DOM styles for "+a+" ");var b=document.head;b.insertBefore(a,(tg?tg.nextSibling:null)||b.firstChild);return tg=a}function sg(a,b,c){b=b||document.head;b.insertBefore(a,c&&c.nextSibling||b.firstChild);tg?a.compareDocumentPosition(tg)===Node.DOCUMENT_POSITION_PRECEDING&&(tg=a):tg=a}
1759
- function vg(a,b){for(var c=0,d=a.length;b<d;b++)if("("===a[b])c++;else if(")"===a[b]&&0===--c)return b;return-1}function wg(a,b){var c=a.indexOf("var(");if(-1===c)return b(a,"","","");var d=vg(a,c+3),e=a.substring(c+4,d);c=a.substring(0,c);a=wg(a.substring(d+1),b);d=e.indexOf(",");return-1===d?b(c,e.trim(),"",a):b(c,e.substring(0,d).trim(),e.substring(d+1).trim(),a)}function xg(a,b){V?a.setAttribute("class",b):window.ShadyDOM.nativeMethods.setAttribute.call(a,"class",b)}
1760
- var yg=window.ShadyDOM&&window.ShadyDOM.wrap||function(a){return a};function zg(a){var b=a.localName,c="";b?-1<b.indexOf("-")||(c=b,b=a.getAttribute&&a.getAttribute("is")||""):(b=a.is,c=a.extends);return{is:b,ba:c}}function Ag(a){for(var b=[],c="",d=0;0<=d&&d<a.length;d++)if("("===a[d]){var e=vg(a,d);c+=a.slice(d,e+1);d=e}else","===a[d]?(b.push(c),c=""):c+=a[d];c&&b.push(c);return b}
1761
- function Bg(a){if(void 0!==dg)return dg;if(void 0===a.__cssBuild){var b=a.getAttribute("css-build");if(b)a.__cssBuild=b;else{a:{b="template"===a.localName?a.content.firstChild:a.firstChild;if(b instanceof Comment&&(b=b.textContent.trim().split(":"),"css-build"===b[0])){b=b[1];break a}b=""}if(""!==b){var c="template"===a.localName?a.content.firstChild:a.firstChild;c.parentNode.removeChild(c)}a.__cssBuild=b}}return a.__cssBuild||""}
1762
- function Cg(a){a=void 0===a?"":a;return""!==a&&X?V?"shadow"===a:"shady"===a:!1};function Dg(){}function Eg(a,b){Fg(Gg,a,function(c){Hg(c,b||"")})}function Fg(a,b,c){b.nodeType===Node.ELEMENT_NODE&&c(b);var d;"template"===b.localName?d=(b.content||b._content||b).childNodes:d=b.children||b.childNodes;if(d)for(b=0;b<d.length;b++)Fg(a,d[b],c)}
1763
- function Hg(a,b,c){if(b)if(a.classList)c?(a.classList.remove("style-scope"),a.classList.remove(b)):(a.classList.add("style-scope"),a.classList.add(b));else if(a.getAttribute){var d=a.getAttribute("class");c?d&&(b=d.replace("style-scope","").replace(b,""),xg(a,b)):xg(a,(d?d+" ":"")+"style-scope "+b)}}function Ig(a,b,c){Fg(Gg,a,function(d){Hg(d,b,!0);Hg(d,c)})}function Jg(a,b){Fg(Gg,a,function(c){Hg(c,b||"",!0)})}
1764
- function Kg(a,b,c,d,e){var f=Gg;e=void 0===e?"":e;""===e&&(V||"shady"===(void 0===d?"":d)?e=ng(b,c):(a=zg(a),e=Lg(f,b,a.is,a.ba,c)+"\n\n"));return e.trim()}function Lg(a,b,c,d,e){var f=Mg(c,d);c=c?"."+c:"";return ng(b,function(g){g.c||(g.selector=g.w=Ng(a,g,a.b,c,f),g.c=!0);e&&e(g,c,f)})}function Mg(a,b){return b?"[is="+a+"]":a}
1765
- function Ng(a,b,c,d,e){var f=Ag(b.selector);if(!qg(b)){b=0;for(var g=f.length,h=void 0;b<g&&(h=f[b]);b++)f[b]=c.call(a,h,d,e)}return f.filter(function(k){return!!k}).join(",")}function Og(a){return a.replace(Pg,function(b,c,d){-1<d.indexOf("+")?d=d.replace(/\+/g,"___"):-1<d.indexOf("___")&&(d=d.replace(/___/g,"+"));return":"+c+"("+d+")"})}
1766
- function Qg(a){for(var b=[],c;c=a.match(Rg);){var d=c.index,e=vg(a,d);if(-1===e)throw Error(c.input+" selector missing ')'");c=a.slice(d,e+1);a=a.replace(c,"\ue000");b.push(c)}return{wa:a,matches:b}}function Sg(a,b){var c=a.split("\ue000");return b.reduce(function(d,e,f){return d+e+c[f+1]},c[0])}
1767
- Dg.prototype.b=function(a,b,c){var d=!1;a=a.trim();var e=Pg.test(a);e&&(a=a.replace(Pg,function(h,k,l){return":"+k+"("+l.replace(/\s/g,"")+")"}),a=Og(a));var f=Rg.test(a);if(f){var g=Qg(a);a=g.wa;g=g.matches}a=a.replace(Tg,":host $1");a=a.replace(Ug,function(h,k,l){d||(h=Vg(l,k,b,c),d=d||h.stop,k=h.Qa,l=h.value);return k+l});f&&(a=Sg(a,g));e&&(a=Og(a));return a=a.replace(Wg,function(h,k,l,m){return'[dir="'+l+'"] '+k+m+", "+k+'[dir="'+l+'"]'+m})};
1768
- function Vg(a,b,c,d){var e=a.indexOf("::slotted");0<=a.indexOf(":host")?a=Xg(a,d):0!==e&&(a=c?Yg(a,c):a);c=!1;0<=e&&(b="",c=!0);if(c){var f=!0;c&&(a=a.replace(Zg,function(g,h){return" > "+h}))}return{value:a,Qa:b,stop:f}}function Yg(a,b){a=a.split(/(\[.+?\])/);for(var c=[],d=0;d<a.length;d++)if(1===d%2)c.push(a[d]);else{var e=a[d];if(""!==e||d!==a.length-1)e=e.split(":"),e[0]+=b,c.push(e.join(":"))}return c.join("")}
1769
- function Xg(a,b){var c=a.match($g);return(c=c&&c[2].trim()||"")?c[0].match(ah)?a.replace($g,function(d,e,f){return b+f}):c.split(ah)[0]===b?c:"should_not_match":a.replace(":host",b)}function bh(a){":root"===a.selector&&(a.selector="html")}Dg.prototype.c=function(a){return a.match(":host")?"":a.match("::slotted")?this.b(a,":not(.style-scope)"):Yg(a.trim(),":not(.style-scope)")};fa.Object.defineProperties(Dg.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"style-scope"}}});
1770
- var Pg=/:(nth[-\w]+)\(([^)]+)\)/,Ug=/(^|[\s>+~]+)((?:\[.+?\]|[^\s>+~=[])+)/g,ah=/[[.:#*]/,Tg=/^(::slotted)/,$g=/(:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,Zg=/(?:::slotted)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,Wg=/(.*):dir\((?:(ltr|rtl))\)(.*)/,Rg=/:(?:matches|any|-(?:webkit|moz)-any)/,Gg=new Dg;function ch(a,b,c,d,e){this.H=a||null;this.b=b||null;this.ta=c||[];this.F=null;this.cssBuild=e||"";this.ba=d||"";this.a=this.G=this.L=null}function dh(a){return a?a.__styleInfo:null}function eh(a,b){return a.__styleInfo=b}ch.prototype.c=function(){return this.H};ch.prototype._getStyleRules=ch.prototype.c;function fh(a){var b=this.matches||this.matchesSelector||this.mozMatchesSelector||this.msMatchesSelector||this.oMatchesSelector||this.webkitMatchesSelector;return b&&b.call(this,a)}var gh=/:host\s*>\s*/,hh=navigator.userAgent.match("Trident");function ih(){}function jh(a){var b={},c=[],d=0;og(a,function(f){kh(f);f.index=d++;f=f.v.cssText;for(var g;g=ig.exec(f);){var h=g[1];":"!==g[2]&&(b[h]=!0)}},function(f){c.push(f)});a.b=c;a=[];for(var e in b)a.push(e);return a}
1771
- function kh(a){if(!a.v){var b={},c={};lh(a,c)&&(b.K=c,a.rules=null);b.cssText=a.parsedCssText.replace(lg,"").replace(fg,"");a.v=b}}function lh(a,b){var c=a.v;if(c){if(c.K)return Object.assign(b,c.K),!0}else{c=a.parsedCssText;for(var d;a=fg.exec(c);){d=(a[2]||a[3]).trim();if("inherit"!==d||"unset"!==d)b[a[1].trim()]=d;d=!0}return d}}
1772
- function mh(a,b,c){b&&(b=0<=b.indexOf(";")?nh(a,b,c):wg(b,function(d,e,f,g){if(!e)return d+g;(e=mh(a,c[e],c))&&"initial"!==e?"apply-shim-inherit"===e&&(e="inherit"):e=mh(a,c[f]||f,c)||f;return d+(e||"")+g}));return b&&b.trim()||""}
1773
- function nh(a,b,c){b=b.split(";");for(var d=0,e,f;d<b.length;d++)if(e=b[d]){hg.lastIndex=0;if(f=hg.exec(e))e=mh(a,c[f[1]],c);else if(f=e.indexOf(":"),-1!==f){var g=e.substring(f);g=g.trim();g=mh(a,g,c)||g;e=e.substring(0,f)+g}b[d]=e&&e.lastIndexOf(";")===e.length-1?e.slice(0,-1):e||""}return b.join(";")}
1774
- function oh(a,b){var c={},d=[];og(a,function(e){e.v||kh(e);var f=e.w||e.parsedSelector;b&&e.v.K&&f&&fh.call(b,f)&&(lh(e,c),e=e.index,f=parseInt(e/32,10),d[f]=(d[f]||0)|1<<e%32)},null,!0);return{K:c,key:d}}
1775
- function ph(a,b,c,d){b.v||kh(b);if(b.v.K){var e=zg(a);a=e.is;e=e.ba;e=a?Mg(a,e):"html";var f=b.parsedSelector;var g=!!f.match(gh)||"html"===e&&-1<f.indexOf("html");var h=0===f.indexOf(":host")&&!g;"shady"===c&&(g=f===e+" > *."+e||-1!==f.indexOf("html"),h=!g&&0===f.indexOf(e));if(g||h)c=e,h&&(b.w||(b.w=Ng(Gg,b,Gg.b,a?"."+a:"",e)),c=b.w||e),g&&"html"===e&&(c=b.w||b.J),d({wa:c,Xa:h,mb:g})}}
1776
- function qh(a,b,c){var d={},e={};og(b,function(f){ph(a,f,c,function(g){fh.call(a._element||a,g.wa)&&(g.Xa?lh(f,d):lh(f,e))})},null,!0);return{cb:e,Va:d}}
1777
- function rh(a,b,c,d){var e=zg(b),f=Mg(e.is,e.ba),g=new RegExp("(?:^|[^.#[:])"+(b.extends?"\\"+f.slice(0,-1)+"\\]":f)+"($|[.:[\\s>+~])"),h=dh(b);e=h.H;h=h.cssBuild;var k=sh(e,d);return Kg(b,e,function(l){var m="";l.v||kh(l);l.v.cssText&&(m=nh(a,l.v.cssText,c));l.cssText=m;if(!V&&!qg(l)&&l.cssText){var q=m=l.cssText;null==l.Da&&(l.Da=jg.test(m));if(l.Da)if(null==l.ja){l.ja=[];for(var H in k)q=k[H],q=q(m),m!==q&&(m=q,l.ja.push(H))}else{for(H=0;H<l.ja.length;++H)q=k[l.ja[H]],m=q(m);q=m}l.cssText=q;l.w=
1778
- l.w||l.selector;m="."+d;H=Ag(l.w);q=0;for(var E=H.length,r=void 0;q<E&&(r=H[q]);q++)H[q]=r.match(g)?r.replace(f,m):m+" "+r;l.selector=H.join(",")}},h)}function sh(a,b){a=a.b;var c={};if(!V&&a)for(var d=0,e=a[d];d<a.length;e=a[++d]){var f=e,g=b;f.l=new RegExp("\\b"+f.keyframesName+"(?!\\B|-)","g");f.a=f.keyframesName+"-"+g;f.w=f.w||f.selector;f.selector=f.w.replace(f.keyframesName,f.a);c[e.keyframesName]=th(e)}return c}function th(a){return function(b){return b.replace(a.l,a.a)}}
1779
- function uh(a,b){var c=vh,d=pg(a);a.textContent=ng(d,function(e){var f=e.cssText=e.parsedCssText;e.v&&e.v.cssText&&(f=f.replace(Yf,"").replace(Zf,""),e.cssText=nh(c,f,b))})}fa.Object.defineProperties(ih.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"x-scope"}}});var vh=new ih;var wh={},xh=window.customElements;if(xh&&!V&&!eg){var yh=xh.define;xh.define=function(a,b,c){wh[a]||(wh[a]=ug(a));yh.call(xh,a,b,c)}};function zh(){this.cache={}}zh.prototype.store=function(a,b,c,d){var e=this.cache[a]||[];e.push({K:b,styleElement:c,G:d});100<e.length&&e.shift();this.cache[a]=e};function Ah(){}var Bh=new RegExp(Gg.a+"\\s*([^\\s]*)");function Ch(a){return(a=(a.classList&&a.classList.value?a.classList.value:a.getAttribute("class")||"").match(Bh))?a[1]:""}function Dh(a){var b=yg(a).getRootNode();return b===a||b===a.ownerDocument?"":(a=b.host)?zg(a).is:""}
1780
- function Eh(a){for(var b=0;b<a.length;b++){var c=a[b];if(c.target!==document.documentElement&&c.target!==document.head)for(var d=0;d<c.addedNodes.length;d++){var e=c.addedNodes[d];if(e.nodeType===Node.ELEMENT_NODE){var f=e.getRootNode(),g=Ch(e);if(g&&f===e.ownerDocument&&("style"!==e.localName&&"template"!==e.localName||""===Bg(e)))Jg(e,g);else if(f instanceof ShadowRoot)for(f=Dh(e),f!==g&&Ig(e,g,f),e=window.ShadyDOM.nativeMethods.querySelectorAll.call(e,":not(."+Gg.a+")"),g=0;g<e.length;g++){f=e[g];
1781
- var h=Dh(f);h&&Hg(f,h)}}}}}
1782
- if(!(V||window.ShadyDOM&&window.ShadyDOM.handlesDynamicScoping)){var Fh=new MutationObserver(Eh),Gh=function(a){Fh.observe(a,{childList:!0,subtree:!0})};if(window.customElements&&!window.customElements.polyfillWrapFlushCallback)Gh(document);else{var Hh=function(){Gh(document.body)};window.HTMLImports?window.HTMLImports.whenReady(Hh):requestAnimationFrame(function(){if("loading"===document.readyState){var a=function(){Hh();document.removeEventListener("readystatechange",a)};document.addEventListener("readystatechange",
1783
- a)}else Hh()})}Ah=function(){Eh(Fh.takeRecords())}};var Ih={};var Jh=Promise.resolve();function Kh(a){if(a=Ih[a])a._applyShimCurrentVersion=a._applyShimCurrentVersion||0,a._applyShimValidatingVersion=a._applyShimValidatingVersion||0,a._applyShimNextVersion=(a._applyShimNextVersion||0)+1}function Lh(a){return a._applyShimCurrentVersion===a._applyShimNextVersion}function Mh(a){a._applyShimValidatingVersion=a._applyShimNextVersion;a._validating||(a._validating=!0,Jh.then(function(){a._applyShimCurrentVersion=a._applyShimNextVersion;a._validating=!1}))};var Nh={},Oh=new zh;function Y(){this.Y={};this.c=document.documentElement;var a=new Lf;a.rules=[];this.l=eh(this.c,new ch(a));this.J=!1;this.a=this.b=null}w=Y.prototype;w.flush=function(){Ah()};w.Ta=function(a){return pg(a)};w.hb=function(a){return ng(a)};w.prepareTemplate=function(a,b,c){this.prepareTemplateDom(a,b);this.prepareTemplateStyles(a,b,c)};
1784
- w.prepareTemplateStyles=function(a,b,c){if(!a._prepared&&!eg){V||wh[b]||(wh[b]=ug(b));a._prepared=!0;a.name=b;a.extends=c;Ih[b]=a;var d=Bg(a),e=Cg(d);c={is:b,extends:c};for(var f=[],g=a.content.querySelectorAll("style"),h=0;h<g.length;h++){var k=g[h];if(k.hasAttribute("shady-unscoped")){if(!V){var l=k.textContent;if(!mg.has(l)){mg.add(l);var m=document.createElement("style");m.setAttribute("shady-unscoped","");m.textContent=l;document.head.appendChild(m)}k.parentNode.removeChild(k)}}else f.push(k.textContent),
1785
- k.parentNode.removeChild(k)}f=f.join("").trim()+(Nh[b]||"");Ph(this);if(!e){if(g=!d)g=hg.test(f)||fg.test(f),hg.lastIndex=0,fg.lastIndex=0;h=Mf(f);g&&X&&this.b&&this.b.transformRules(h,b);a._styleAst=h}g=[];X||(g=jh(a._styleAst));if(!g.length||X)h=V?a.content:null,b=wh[b]||null,d=Kg(c,a._styleAst,null,d,e?f:""),d=d.length?rg(d,c.is,h,b):null,a._style=d;a.a=g}};w.ab=function(a,b){Nh[b]=a.join(" ")};
1786
- w.prepareTemplateDom=function(a,b){if(!eg){var c=Bg(a);V||"shady"===c||a._domPrepared||(a._domPrepared=!0,Eg(a.content,b))}};function Qh(a){var b=zg(a),c=b.is;b=b.ba;var d=wh[c]||null,e=Ih[c];if(e){c=e._styleAst;var f=e.a;e=Bg(e);b=new ch(c,d,f,b,e);eh(a,b);return b}}
1787
- function Rh(a){!a.a&&window.ShadyCSS&&window.ShadyCSS.CustomStyleInterface&&(a.a=window.ShadyCSS.CustomStyleInterface,a.a.transformCallback=function(b){a.Ha(b)},a.a.validateCallback=function(){requestAnimationFrame(function(){(a.a.enqueued||a.J)&&a.flushCustomStyles()})})}function Ph(a){if(!a.b&&window.ShadyCSS&&window.ShadyCSS.ApplyShim){a.b=window.ShadyCSS.ApplyShim;a.b.invalidCallback=Kh;var b=!0}else b=!1;Rh(a);return b}
1788
- w.flushCustomStyles=function(){if(!eg){var a=Ph(this);if(this.a){var b=this.a.processStyles();if((a||this.a.enqueued)&&!Cg(this.l.cssBuild)){if(X){if(!this.l.cssBuild)for(a=0;a<b.length;a++){var c=this.a.getStyleForCustomStyle(b[a]);if(c&&X&&this.b){var d=pg(c);Ph(this);this.b.transformRules(d);c.textContent=ng(d)}}}else{Sh(this,b);Th(this,this.c,this.l);for(a=0;a<b.length;a++)(c=this.a.getStyleForCustomStyle(b[a]))&&uh(c,this.l.L);this.J&&this.styleDocument()}this.a.enqueued=!1}}}};
1789
- function Sh(a,b){b=b.map(function(c){return a.a.getStyleForCustomStyle(c)}).filter(function(c){return!!c});b.sort(function(c,d){c=d.compareDocumentPosition(c);return c&Node.DOCUMENT_POSITION_FOLLOWING?1:c&Node.DOCUMENT_POSITION_PRECEDING?-1:0});a.l.H.rules=b.map(function(c){return pg(c)})}
1790
- w.styleElement=function(a,b){if(eg){if(b){dh(a)||eh(a,new ch(null));var c=dh(a);c.F=c.F||{};Object.assign(c.F,b);Uh(this,a,c)}}else if(c=dh(a)||Qh(a))if(a!==this.c&&(this.J=!0),b&&(c.F=c.F||{},Object.assign(c.F,b)),X)Uh(this,a,c);else if(this.flush(),Th(this,a,c),c.ta&&c.ta.length){b=zg(a).is;var d;a:{if(d=Oh.cache[b])for(var e=d.length-1;0<=e;e--){var f=d[e];b:{var g=c.ta;for(var h=0;h<g.length;h++){var k=g[h];if(f.K[k]!==c.L[k]){g=!1;break b}}g=!0}if(g){d=f;break a}}d=void 0}g=d?d.styleElement:
1791
- null;e=c.G;(f=d&&d.G)||(f=this.Y[b]=(this.Y[b]||0)+1,f=b+"-"+f);c.G=f;f=c.G;h=vh;h=g?g.textContent||"":rh(h,a,c.L,f);k=dh(a);var l=k.a;l&&!V&&l!==g&&(l._useCount--,0>=l._useCount&&l.parentNode&&l.parentNode.removeChild(l));V?k.a?(k.a.textContent=h,g=k.a):h&&(g=rg(h,f,a.shadowRoot,k.b)):g?g.parentNode||(hh&&-1<h.indexOf("@media")&&(g.textContent=h),sg(g,null,k.b)):h&&(g=rg(h,f,null,k.b));g&&(g._useCount=g._useCount||0,k.a!=g&&g._useCount++,k.a=g);f=g;V||(g=c.G,k=h=a.getAttribute("class")||"",e&&(k=
1792
- h.replace(new RegExp("\\s*x-scope\\s*"+e+"\\s*","g")," ")),k+=(k?" ":"")+"x-scope "+g,h!==k&&xg(a,k));d||Oh.store(b,c.L,f,c.G)}};
1793
- function Uh(a,b,c){var d=zg(b).is;if(c.F){var e=c.F,f;for(f in e)null===f?b.style.removeProperty(f):b.style.setProperty(f,e[f])}e=Ih[d];if(!(!e&&b!==a.c||e&&""!==Bg(e))&&e&&e._style&&!Lh(e)){if(Lh(e)||e._applyShimValidatingVersion!==e._applyShimNextVersion)Ph(a),a.b&&a.b.transformRules(e._styleAst,d),e._style.textContent=Kg(b,c.H),Mh(e);V&&(a=b.shadowRoot)&&(a=a.querySelector("style"))&&(a.textContent=Kg(b,c.H));c.H=e._styleAst}}
1794
- function Vh(a,b){return(b=yg(b).getRootNode().host)?dh(b)||Qh(b)?b:Vh(a,b):a.c}function Th(a,b,c){var d=Vh(a,b),e=dh(d),f=e.L;d===a.c||f||(Th(a,d,e),f=e.L);a=Object.create(f||null);d=qh(b,c.H,c.cssBuild);b=oh(e.H,b).K;Object.assign(a,d.Va,b,d.cb);b=c.F;for(var g in b)if((e=b[g])||0===e)a[g]=e;g=vh;b=Object.getOwnPropertyNames(a);for(e=0;e<b.length;e++)d=b[e],a[d]=mh(g,a[d],a);c.L=a}w.styleDocument=function(a){this.styleSubtree(this.c,a)};
1795
- w.styleSubtree=function(a,b){var c=yg(a),d=c.shadowRoot,e=a===this.c;(d||e)&&this.styleElement(a,b);if(a=e?c:d)for(a=Array.from(a.querySelectorAll("*")).filter(function(f){return yg(f).shadowRoot}),b=0;b<a.length;b++)this.styleSubtree(a[b])};
1796
- w.Ha=function(a){var b=this,c=Bg(a);c!==this.l.cssBuild&&(this.l.cssBuild=c);if(!Cg(c)){var d=pg(a);og(d,function(e){if(V)bh(e);else{var f=Gg;e.selector=e.parsedSelector;bh(e);e.selector=e.w=Ng(f,e,f.c,void 0,void 0)}X&&""===c&&(Ph(b),b.b&&b.b.transformRule(e))});X?a.textContent=ng(d):this.l.H.rules.push(d)}};w.getComputedStyleValue=function(a,b){var c;X||(c=(dh(a)||dh(Vh(this,a))).L[b]);return(c=c||window.getComputedStyle(a).getPropertyValue(b))?c.trim():""};
1797
- w.gb=function(a,b){var c=yg(a).getRootNode(),d;b?d=("string"===typeof b?b:String(b)).split(/\s/):d=[];b=c.host&&c.host.localName;if(!b&&(c=a.getAttribute("class"))){c=c.split(/\s/);for(var e=0;e<c.length;e++)if(c[e]===Gg.a){b=c[e+1];break}}b&&d.push(Gg.a,b);X||(b=dh(a))&&b.G&&d.push(vh.a,b.G);xg(a,d.join(" "))};w.Oa=function(a){return dh(a)};w.fb=function(a,b){Hg(a,b)};w.ib=function(a,b){Hg(a,b,!0)};w.eb=function(a){return Dh(a)};w.Ra=function(a){return Ch(a)};Y.prototype.flush=Y.prototype.flush;
1798
- Y.prototype.prepareTemplate=Y.prototype.prepareTemplate;Y.prototype.styleElement=Y.prototype.styleElement;Y.prototype.styleDocument=Y.prototype.styleDocument;Y.prototype.styleSubtree=Y.prototype.styleSubtree;Y.prototype.getComputedStyleValue=Y.prototype.getComputedStyleValue;Y.prototype.setElementClass=Y.prototype.gb;Y.prototype._styleInfoForNode=Y.prototype.Oa;Y.prototype.transformCustomStyleForDocument=Y.prototype.Ha;Y.prototype.getStyleAst=Y.prototype.Ta;Y.prototype.styleAstToString=Y.prototype.hb;
1799
- Y.prototype.flushCustomStyles=Y.prototype.flushCustomStyles;Y.prototype.scopeNode=Y.prototype.fb;Y.prototype.unscopeNode=Y.prototype.ib;Y.prototype.scopeForNode=Y.prototype.eb;Y.prototype.currentScopeForNode=Y.prototype.Ra;Y.prototype.prepareAdoptedCssText=Y.prototype.ab;Object.defineProperties(Y.prototype,{nativeShadow:{get:function(){return V}},nativeCss:{get:function(){return X}}});var Z=new Y,Wh,Xh;window.ShadyCSS&&(Wh=window.ShadyCSS.ApplyShim,Xh=window.ShadyCSS.CustomStyleInterface);
1800
- window.ShadyCSS={ScopingShim:Z,prepareTemplate:function(a,b,c){Z.flushCustomStyles();Z.prepareTemplate(a,b,c)},prepareTemplateDom:function(a,b){Z.prepareTemplateDom(a,b)},prepareTemplateStyles:function(a,b,c){Z.flushCustomStyles();Z.prepareTemplateStyles(a,b,c)},styleSubtree:function(a,b){Z.flushCustomStyles();Z.styleSubtree(a,b)},styleElement:function(a){Z.flushCustomStyles();Z.styleElement(a)},styleDocument:function(a){Z.flushCustomStyles();Z.styleDocument(a)},flushCustomStyles:function(){Z.flushCustomStyles()},
1801
- getComputedStyleValue:function(a,b){return Z.getComputedStyleValue(a,b)},nativeCss:X,nativeShadow:V,cssBuild:dg,disableRuntime:eg};Wh&&(window.ShadyCSS.ApplyShim=Wh);Xh&&(window.ShadyCSS.CustomStyleInterface=Xh);(function(a){function b(r){""==r&&(f.call(this),this.h=!0);return r.toLowerCase()}function c(r){var F=r.charCodeAt(0);return 32<F&&127>F&&-1==[34,35,60,62,63,96].indexOf(F)?r:encodeURIComponent(r)}function d(r){var F=r.charCodeAt(0);return 32<F&&127>F&&-1==[34,35,60,62,96].indexOf(F)?r:encodeURIComponent(r)}function e(r,F,C){function M(ka){ta.push(ka)}var y=F||"scheme start",W=0,v="",sa=!1,ea=!1,ta=[];a:for(;(void 0!=r[W-1]||0==W)&&!this.h;){var n=r[W];switch(y){case "scheme start":if(n&&q.test(n))v+=
1802
- n.toLowerCase(),y="scheme";else if(F){M("Invalid scheme.");break a}else{v="";y="no scheme";continue}break;case "scheme":if(n&&H.test(n))v+=n.toLowerCase();else if(":"==n){this.g=v;v="";if(F)break a;void 0!==l[this.g]&&(this.A=!0);y="file"==this.g?"relative":this.A&&C&&C.g==this.g?"relative or authority":this.A?"authority first slash":"scheme data"}else if(F){void 0!=n&&M("Code point not allowed in scheme: "+n);break a}else{v="";W=0;y="no scheme";continue}break;case "scheme data":"?"==n?(this.o="?",
1803
- y="query"):"#"==n?(this.u="#",y="fragment"):void 0!=n&&"\t"!=n&&"\n"!=n&&"\r"!=n&&(this.pa+=c(n));break;case "no scheme":if(C&&void 0!==l[C.g]){y="relative";continue}else M("Missing scheme."),f.call(this),this.h=!0;break;case "relative or authority":if("/"==n&&"/"==r[W+1])y="authority ignore slashes";else{M("Expected /, got: "+n);y="relative";continue}break;case "relative":this.A=!0;"file"!=this.g&&(this.g=C.g);if(void 0==n){this.i=C.i;this.m=C.m;this.j=C.j.slice();this.o=C.o;this.s=C.s;this.f=C.f;
1804
- break a}else if("/"==n||"\\"==n)"\\"==n&&M("\\ is an invalid code point."),y="relative slash";else if("?"==n)this.i=C.i,this.m=C.m,this.j=C.j.slice(),this.o="?",this.s=C.s,this.f=C.f,y="query";else if("#"==n)this.i=C.i,this.m=C.m,this.j=C.j.slice(),this.o=C.o,this.u="#",this.s=C.s,this.f=C.f,y="fragment";else{y=r[W+1];var I=r[W+2];if("file"!=this.g||!q.test(n)||":"!=y&&"|"!=y||void 0!=I&&"/"!=I&&"\\"!=I&&"?"!=I&&"#"!=I)this.i=C.i,this.m=C.m,this.s=C.s,this.f=C.f,this.j=C.j.slice(),this.j.pop();y=
1805
- "relative path";continue}break;case "relative slash":if("/"==n||"\\"==n)"\\"==n&&M("\\ is an invalid code point."),y="file"==this.g?"file host":"authority ignore slashes";else{"file"!=this.g&&(this.i=C.i,this.m=C.m,this.s=C.s,this.f=C.f);y="relative path";continue}break;case "authority first slash":if("/"==n)y="authority second slash";else{M("Expected '/', got: "+n);y="authority ignore slashes";continue}break;case "authority second slash":y="authority ignore slashes";if("/"!=n){M("Expected '/', got: "+
1806
- n);continue}break;case "authority ignore slashes":if("/"!=n&&"\\"!=n){y="authority";continue}else M("Expected authority, got: "+n);break;case "authority":if("@"==n){sa&&(M("@ already seen."),v+="%40");sa=!0;for(n=0;n<v.length;n++)I=v[n],"\t"==I||"\n"==I||"\r"==I?M("Invalid whitespace in authority."):":"==I&&null===this.f?this.f="":(I=c(I),null!==this.f?this.f+=I:this.s+=I);v=""}else if(void 0==n||"/"==n||"\\"==n||"?"==n||"#"==n){W-=v.length;v="";y="host";continue}else v+=n;break;case "file host":if(void 0==
1807
- n||"/"==n||"\\"==n||"?"==n||"#"==n){2!=v.length||!q.test(v[0])||":"!=v[1]&&"|"!=v[1]?(0!=v.length&&(this.i=b.call(this,v),v=""),y="relative path start"):y="relative path";continue}else"\t"==n||"\n"==n||"\r"==n?M("Invalid whitespace in file host."):v+=n;break;case "host":case "hostname":if(":"!=n||ea)if(void 0==n||"/"==n||"\\"==n||"?"==n||"#"==n){this.i=b.call(this,v);v="";y="relative path start";if(F)break a;continue}else"\t"!=n&&"\n"!=n&&"\r"!=n?("["==n?ea=!0:"]"==n&&(ea=!1),v+=n):M("Invalid code point in host/hostname: "+
1808
- n);else if(this.i=b.call(this,v),v="",y="port","hostname"==F)break a;break;case "port":if(/[0-9]/.test(n))v+=n;else if(void 0==n||"/"==n||"\\"==n||"?"==n||"#"==n||F){""!=v&&(v=parseInt(v,10),v!=l[this.g]&&(this.m=v+""),v="");if(F)break a;y="relative path start";continue}else"\t"==n||"\n"==n||"\r"==n?M("Invalid code point in port: "+n):(f.call(this),this.h=!0);break;case "relative path start":"\\"==n&&M("'\\' not allowed in path.");y="relative path";if("/"!=n&&"\\"!=n)continue;break;case "relative path":if(void 0!=
1809
- n&&"/"!=n&&"\\"!=n&&(F||"?"!=n&&"#"!=n))"\t"!=n&&"\n"!=n&&"\r"!=n&&(v+=c(n));else{"\\"==n&&M("\\ not allowed in relative path.");if(I=m[v.toLowerCase()])v=I;".."==v?(this.j.pop(),"/"!=n&&"\\"!=n&&this.j.push("")):"."==v&&"/"!=n&&"\\"!=n?this.j.push(""):"."!=v&&("file"==this.g&&0==this.j.length&&2==v.length&&q.test(v[0])&&"|"==v[1]&&(v=v[0]+":"),this.j.push(v));v="";"?"==n?(this.o="?",y="query"):"#"==n&&(this.u="#",y="fragment")}break;case "query":F||"#"!=n?void 0!=n&&"\t"!=n&&"\n"!=n&&"\r"!=n&&(this.o+=
1810
- d(n)):(this.u="#",y="fragment");break;case "fragment":void 0!=n&&"\t"!=n&&"\n"!=n&&"\r"!=n&&(this.u+=n)}W++}}function f(){this.s=this.pa=this.g="";this.f=null;this.m=this.i="";this.j=[];this.u=this.o="";this.A=this.h=!1}function g(r,F){void 0===F||F instanceof g||(F=new g(String(F)));this.a=r;f.call(this);e.call(this,this.a.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g,""),null,F)}var h=!1;try{var k=new URL("b","http://a");k.pathname="c%20d";h="http://a/c%20d"===k.href}catch(r){}if(!h){var l=Object.create(null);
1811
- l.ftp=21;l.file=0;l.gopher=70;l.http=80;l.https=443;l.ws=80;l.wss=443;var m=Object.create(null);m["%2e"]=".";m[".%2e"]="..";m["%2e."]="..";m["%2e%2e"]="..";var q=/[a-zA-Z]/,H=/[a-zA-Z0-9\+\-\.]/;g.prototype={toString:function(){return this.href},get href(){if(this.h)return this.a;var r="";if(""!=this.s||null!=this.f)r=this.s+(null!=this.f?":"+this.f:"")+"@";return this.protocol+(this.A?"//"+r+this.host:"")+this.pathname+this.o+this.u},set href(r){f.call(this);e.call(this,r)},get protocol(){return this.g+
1812
- ":"},set protocol(r){this.h||e.call(this,r+":","scheme start")},get host(){return this.h?"":this.m?this.i+":"+this.m:this.i},set host(r){!this.h&&this.A&&e.call(this,r,"host")},get hostname(){return this.i},set hostname(r){!this.h&&this.A&&e.call(this,r,"hostname")},get port(){return this.m},set port(r){!this.h&&this.A&&e.call(this,r,"port")},get pathname(){return this.h?"":this.A?"/"+this.j.join("/"):this.pa},set pathname(r){!this.h&&this.A&&(this.j=[],e.call(this,r,"relative path start"))},get search(){return this.h||
1813
- !this.o||"?"==this.o?"":this.o},set search(r){!this.h&&this.A&&(this.o="?","?"==r[0]&&(r=r.slice(1)),e.call(this,r,"query"))},get hash(){return this.h||!this.u||"#"==this.u?"":this.u},set hash(r){this.h||(r?(this.u="#","#"==r[0]&&(r=r.slice(1)),e.call(this,r,"fragment")):this.u="")},get origin(){var r;if(this.h||!this.g)return"";switch(this.g){case "data":case "file":case "javascript":case "mailto":return"null"}return(r=this.host)?this.g+"://"+r:""}};var E=a.URL;E&&(g.createObjectURL=function(r){return E.createObjectURL.apply(E,
1814
- arguments)},g.revokeObjectURL=function(r){E.revokeObjectURL(r)});a.URL=g}})(window);Object.getOwnPropertyDescriptor(Node.prototype,"baseURI")||Object.defineProperty(Node.prototype,"baseURI",{get:function(){var a=(this.ownerDocument||this).querySelector("base[href]");return a&&a.href||window.location.href},configurable:!0,enumerable:!0});var Yh=document.createElement("style");Yh.textContent="body {transition: opacity ease-in 0.2s; } \nbody[unresolved] {opacity: 0; display: block; overflow: hidden; position: relative; } \n";var Zh=document.querySelector("head");Zh.insertBefore(Yh,Zh.firstChild);var $h=window.customElements,ai=!1,bi=null;$h.polyfillWrapFlushCallback&&$h.polyfillWrapFlushCallback(function(a){bi=a;ai&&a()});function ci(){window.HTMLTemplateElement.bootstrap&&window.HTMLTemplateElement.bootstrap(window.document);bi&&bi();ai=!0;window.WebComponents.ready=!0;document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))}
1815
- "complete"!==document.readyState?(window.addEventListener("load",ci),window.addEventListener("DOMContentLoaded",function(){window.removeEventListener("load",ci);ci()})):ci();}).call(this);
1863
+ var hj=window.customElements,ij=!1,jj=null;hj.polyfillWrapFlushCallback&&hj.polyfillWrapFlushCallback(function(a){jj=a;ij&&a()});function kj(){window.HTMLTemplateElement.bootstrap&&window.HTMLTemplateElement.bootstrap(window.document);jj&&jj();ij=!0;window.WebComponents.ready=!0;document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))}
1864
+ "complete"!==document.readyState?(window.addEventListener("load",kj),window.addEventListener("DOMContentLoaded",function(){window.removeEventListener("load",kj);kj()})):kj();}).call(this);
1816
1865
 
1817
1866
 
1818
1867
 
1819
- }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate)
1868
+ }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate)
1820
1869
 
1821
1870
  },{"timers":39}],35:[function(require,module,exports){
1822
1871
  /**
@@ -1829,7 +1878,7 @@ arguments)},g.revokeObjectURL=function(r){E.revokeObjectURL(r)});a.URL=g}})(wind
1829
1878
  * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
1830
1879
  */
1831
1880
 
1832
- (function() {
1881
+ (function () {
1833
1882
  'use strict';
1834
1883
 
1835
1884
  /**
@@ -1868,7 +1917,9 @@ arguments)},g.revokeObjectURL=function(r){E.revokeObjectURL(r)});a.URL=g}})(wind
1868
1917
 
1869
1918
  function fireEvent() {
1870
1919
  window.WebComponents.ready = true;
1871
- document.dispatchEvent(new CustomEvent('WebComponentsReady', { bubbles: true }));
1920
+ document.dispatchEvent(
1921
+ new CustomEvent('WebComponentsReady', {bubbles: true})
1922
+ );
1872
1923
  }
1873
1924
 
1874
1925
  function batchCustomElements() {
@@ -1898,43 +1949,51 @@ arguments)},g.revokeObjectURL=function(r){E.revokeObjectURL(r)});a.URL=g}})(wind
1898
1949
 
1899
1950
  function runWhenLoadedFns() {
1900
1951
  allowUpgrades = false;
1901
- var fnsMap = whenLoadedFns.map(function(fn) {
1952
+ var fnsMap = whenLoadedFns.map(function (fn) {
1902
1953
  return fn instanceof Function ? fn() : fn;
1903
1954
  });
1904
1955
  whenLoadedFns = [];
1905
- return Promise.all(fnsMap).then(function() {
1906
- allowUpgrades = true;
1907
- flushFn && flushFn();
1908
- }).catch(function(err) {
1909
- console.error(err);
1910
- });
1956
+ return Promise.all(fnsMap)
1957
+ .then(function () {
1958
+ allowUpgrades = true;
1959
+ flushFn && flushFn();
1960
+ })
1961
+ .catch(function (err) {
1962
+ console.error(err);
1963
+ });
1911
1964
  }
1912
1965
 
1913
1966
  window.WebComponents = window.WebComponents || {};
1914
1967
  window.WebComponents.ready = window.WebComponents.ready || false;
1915
- window.WebComponents.waitFor = window.WebComponents.waitFor || function(waitFn) {
1916
- if (!waitFn) {
1917
- return;
1918
- }
1919
- whenLoadedFns.push(waitFn);
1920
- if (polyfillsLoaded) {
1921
- runWhenLoadedFns();
1922
- }
1923
- };
1968
+ window.WebComponents.waitFor =
1969
+ window.WebComponents.waitFor ||
1970
+ function (waitFn) {
1971
+ if (!waitFn) {
1972
+ return;
1973
+ }
1974
+ whenLoadedFns.push(waitFn);
1975
+ if (polyfillsLoaded) {
1976
+ runWhenLoadedFns();
1977
+ }
1978
+ };
1924
1979
  window.WebComponents._batchCustomElements = batchCustomElements;
1925
1980
 
1926
1981
  var name = 'webcomponents-loader.js';
1927
1982
  // Feature detect which polyfill needs to be imported.
1928
1983
  var polyfills = [];
1929
- if (!('attachShadow' in Element.prototype && 'getRootNode' in Element.prototype) ||
1930
- (window.ShadyDOM && window.ShadyDOM.force)) {
1984
+ if (
1985
+ !(
1986
+ 'attachShadow' in Element.prototype && 'getRootNode' in Element.prototype
1987
+ ) ||
1988
+ (window.ShadyDOM && window.ShadyDOM.force)
1989
+ ) {
1931
1990
  polyfills.push('sd');
1932
1991
  }
1933
1992
  if (!window.customElements || window.customElements.forcePolyfill) {
1934
1993
  polyfills.push('ce');
1935
1994
  }
1936
1995
 
1937
- var needsTemplate = (function() {
1996
+ var needsTemplate = (function () {
1938
1997
  // no real <template> because no `content` property (IE and older browsers)
1939
1998
  var t = document.createElement('template');
1940
1999
  if (!('content' in t)) {
@@ -1949,13 +2008,21 @@ arguments)},g.revokeObjectURL=function(r){E.revokeObjectURL(r)});a.URL=g}})(wind
1949
2008
  t2.content.appendChild(document.createElement('div'));
1950
2009
  t.content.appendChild(t2);
1951
2010
  var clone = t.cloneNode(true);
1952
- return (clone.content.childNodes.length === 0 ||
1953
- clone.content.firstChild.content.childNodes.length === 0);
2011
+ return (
2012
+ clone.content.childNodes.length === 0 ||
2013
+ clone.content.firstChild.content.childNodes.length === 0
2014
+ );
1954
2015
  })();
1955
2016
 
1956
2017
  // NOTE: any browser that does not have template or ES6 features
1957
2018
  // must load the full suite of polyfills.
1958
- if (!window.Promise || !Array.from || !window.URL || !window.Symbol || needsTemplate) {
2019
+ if (
2020
+ !window.Promise ||
2021
+ !Array.from ||
2022
+ !window.URL ||
2023
+ !window.Symbol ||
2024
+ needsTemplate
2025
+ ) {
1959
2026
  polyfills = ['sd-ce-pf'];
1960
2027
  }
1961
2028
 
@@ -1967,7 +2034,7 @@ arguments)},g.revokeObjectURL=function(r){E.revokeObjectURL(r)});a.URL=g}})(wind
1967
2034
  if (window.WebComponents.root) {
1968
2035
  url = window.WebComponents.root + polyfillFile;
1969
2036
  } else {
1970
- var script = document.querySelector('script[src*="' + name +'"]');
2037
+ var script = document.querySelector('script[src*="' + name + '"]');
1971
2038
  // Load it from the right place.
1972
2039
  url = script.src.replace(name, polyfillFile);
1973
2040
  }
@@ -1977,7 +2044,10 @@ arguments)},g.revokeObjectURL=function(r){E.revokeObjectURL(r)});a.URL=g}})(wind
1977
2044
  // if readyState is 'loading', this script is synchronous
1978
2045
  if (document.readyState === 'loading') {
1979
2046
  // make sure custom elements are batched whenever parser gets to the injected script
1980
- newScript.setAttribute('onload', 'window.WebComponents._batchCustomElements()');
2047
+ newScript.setAttribute(
2048
+ 'onload',
2049
+ 'window.WebComponents._batchCustomElements()'
2050
+ );
1981
2051
  document.write(newScript.outerHTML);
1982
2052
  document.addEventListener('DOMContentLoaded', ready);
1983
2053
  } else {
@@ -1997,10 +2067,10 @@ arguments)},g.revokeObjectURL=function(r){E.revokeObjectURL(r)});a.URL=g}})(wind
1997
2067
  } else {
1998
2068
  // this script may come between DCL and load, so listen for both, and cancel load listener if DCL fires
1999
2069
  window.addEventListener('load', ready);
2000
- window.addEventListener('DOMContentLoaded', function() {
2070
+ window.addEventListener('DOMContentLoaded', function () {
2001
2071
  window.removeEventListener('load', ready);
2002
2072
  ready();
2003
- })
2073
+ });
2004
2074
  }
2005
2075
  }
2006
2076
  })();
@@ -3530,7 +3600,7 @@ process.chdir = function (dir) {
3530
3600
  process.umask = function() { return 0; };
3531
3601
 
3532
3602
  },{}],39:[function(require,module,exports){
3533
- (function (setImmediate,clearImmediate){
3603
+ (function (setImmediate,clearImmediate){(function (){
3534
3604
  var nextTick = require('process/browser.js').nextTick;
3535
3605
  var apply = Function.prototype.apply;
3536
3606
  var slice = Array.prototype.slice;
@@ -3607,7 +3677,7 @@ exports.setImmediate = typeof setImmediate === "function" ? setImmediate : funct
3607
3677
  exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) {
3608
3678
  delete immediateIds[id];
3609
3679
  };
3610
- }).call(this,require("timers").setImmediate,require("timers").clearImmediate)
3680
+ }).call(this)}).call(this,require("timers").setImmediate,require("timers").clearImmediate)
3611
3681
 
3612
3682
  },{"process/browser.js":38,"timers":39}],40:[function(require,module,exports){
3613
3683
  "use strict";
@@ -4607,7 +4677,7 @@ var DropDownListElement = /** @class */ (function (_super) {
4607
4677
  DropDownListElement = __decorate([
4608
4678
  (0, custom_element_decorator_1.default)({
4609
4679
  selector: 'drop-down-element',
4610
- template: "\n\t\t\t<div class=\"wrapper\">\n <select id='select-list'>\n\t\t\t <option value=\"--\" selected disabled>-</option>\n </select>\n\t\t\t</div>",
4680
+ template: "\n\t\t\t<div class=\"wrapper\">\n <select id='select-list'>\n\t\t\t <option selected disabled>-</option>\n </select>\n\t\t\t</div>",
4611
4681
  style: "\n :host{\n width:100%;\n }\n .wrapper{\n display:flex;\n justify-content: center;\n }\n .radio-button {\n width: auto;\n margin: auto 3px;\n display: flex;\n flex-grow: 0.1;\n justify-content: space-around;\n }\n select{\n box-sizing: border-box;\n width: 100% !important;\n border: none;\n background-color: #f1f4ff;\n margin: 2px;\n resize: none;\n }\n ",
4612
4682
  useShadow: true,
4613
4683
  })
@@ -6354,4 +6424,4 @@ Object.defineProperty(exports, "CustomInputElement", { enumerable: true, get: fu
6354
6424
  var elements = require("./elements/Elements");
6355
6425
  exports.elements = elements;
6356
6426
  },{"./custom-form":40,"./elements/Elements":49,"./framework/CustomInputElement":60,"@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js":33,"@webcomponents/webcomponentsjs/webcomponents-bundle":34,"@webcomponents/webcomponentsjs/webcomponents-loader.js":35}]},{},[1])
6357
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJkZW1vL2luZGV4LnRzIiwibm9kZV9tb2R1bGVzL0BsdWZ0Ym9ybi91dGlsaXRpZXMvZGlzdC9VdGlsaXRpZXMvQW5hbHl0aWNzQ2xpY2tFdmVudHMuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9BcnJheVV0aWwuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9CYWNrZ3JvdW5kTGF6eUxvYWRlci5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL0Jyb3dzZXJUeXBlLmpzIiwibm9kZV9tb2R1bGVzL0BsdWZ0Ym9ybi91dGlsaXRpZXMvZGlzdC9VdGlsaXRpZXMvQ2hhbmdlTGFuZ3VhZ2UuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9Db3B5IFV0aWxpdHkuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9DdXN0b21JbnB1dHMuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9DdXN0b21WYWxpZGF0aW9uVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL0RlYm91bmNlci5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL0RvbVV0aWwuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9FbGVtZW50U2NhbGUuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9Gb3JtVXRpbHMuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9HbG9iYWxEb21VdGlsLmpzIiwibm9kZV9tb2R1bGVzL0BsdWZ0Ym9ybi91dGlsaXRpZXMvZGlzdC9VdGlsaXRpZXMvSFRNTEltcG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL0hlYWRlckFuaW1hdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL0h0bWxMb2FkZXIuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9JbWFnZUxhenlMb2FkZXIuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9NYWtlUmVxdWVzdC5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL01vZGFsVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL05hdkJhclNjcm9sbGVkLmpzIiwibm9kZV9tb2R1bGVzL0BsdWZ0Ym9ybi91dGlsaXRpZXMvZGlzdC9VdGlsaXRpZXMvTmF2YmFyLmpzIiwibm9kZV9tb2R1bGVzL0BsdWZ0Ym9ybi91dGlsaXRpZXMvZGlzdC9VdGlsaXRpZXMvT3ZlcmxheXMuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9SZXBsYWNlT25DbGljay5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL1NjcmlwdExvYWRlci5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL1Njcm9sbFBvc2l0aW9uLmpzIiwibm9kZV9tb2R1bGVzL0BsdWZ0Ym9ybi91dGlsaXRpZXMvZGlzdC9VdGlsaXRpZXMvU3RyaW5nVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL1VSTEhlbHBlci5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL1VybFV0aWwuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9WaWV3cG9ydFV0aWwuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy90aHJvdHRsZS5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQHdlYmNvbXBvbmVudHMvd2ViY29tcG9uZW50c2pzL2N1c3RvbS1lbGVtZW50cy1lczUtYWRhcHRlci5qcyIsIm5vZGVfbW9kdWxlcy9Ad2ViY29tcG9uZW50cy93ZWJjb21wb25lbnRzanMvd2ViY29tcG9uZW50cy1idW5kbGUuanMiLCJub2RlX21vZHVsZXMvQHdlYmNvbXBvbmVudHMvd2ViY29tcG9uZW50c2pzL3dlYmNvbXBvbmVudHMtbG9hZGVyLmpzIiwibm9kZV9tb2R1bGVzL2ludGwtdGVsLWlucHV0L2J1aWxkL2pzL2ludGxUZWxJbnB1dC5qcyIsIm5vZGVfbW9kdWxlcy9pbnRsLXRlbC1pbnB1dC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsInNyYy9jdXN0b20tZm9ybS50cyIsInNyYy9lbGVtZW50cy9BZGRyZXNzL0FkZHJlc3NFbGVtZW50LnRzIiwic3JjL2VsZW1lbnRzL0JhbmtGaWVsZC9CYW5rRmllbGRFbGVtZW50LnRzIiwic3JjL2VsZW1lbnRzL0NQUkVsZW1lbnQvQ1BSRWxlbWVudC50cyIsInNyYy9lbGVtZW50cy9DVlJFbGVtZW50L0NWUkVsZW1lbnQudHMiLCJzcmMvZWxlbWVudHMvQ2hlY2tCb3hFbGVtZW50L0NoZWNrQm94RWxlbWVudC50cyIsInNyYy9lbGVtZW50cy9DdXN0b21SZWd1bGFyRXhwcmVzc2lvbi9DdXN0b21SZWd1bGFyRXhwcmVzc2lvbkVsZW1lbnQudHMiLCJzcmMvZWxlbWVudHMvRGF0ZUZpZWxkL0RhdGVGaWVsZEVsZW1lbnQudHMiLCJzcmMvZWxlbWVudHMvRHJvcERvd25MaXN0L0Ryb3BEb3duTGlzdEVsZW1lbnQudHMiLCJzcmMvZWxlbWVudHMvRWxlbWVudHMudHMiLCJzcmMvZWxlbWVudHMvRW1haWxGaWVsZC9FbWFpbEZpZWxkRWxlbWVudC50cyIsInNyYy9lbGVtZW50cy9GaWxlRmllbGQvRmlsZUZpZWxkRWxlbWVudC50cyIsInNyYy9lbGVtZW50cy9JZGVudGlmaWNhdGlvbkVsZW1lbnQvSWRlbnRpZmljYXRpb25FbGVtZW50LnRzIiwic3JjL2VsZW1lbnRzL0ludGVybmF0aW9uYVBob25lTnVtYmVyL0ludGVybmF0aW9uYVBob25lTnVtYmVyRWxlbWVudC50cyIsInNyYy9lbGVtZW50cy9OdW1lcmljRmllbGQvTnVtZXJpY0ZpZWxkRWxlbWVudC50cyIsInNyYy9lbGVtZW50cy9SYWRpb0J1dHRvbkdyb3VwL1JhZGlvQnV0dG9uR3JvdXBFbGVtZW50LnRzIiwic3JjL2VsZW1lbnRzL1RleHRBcmVhRWxlbWVudC9UZXh0QXJlYUVsZW1lbnQudHMiLCJzcmMvZWxlbWVudHMvVGV4dEZpZWxkL1RleHRGaWVsZEVsZW1lbnQudHMiLCJzcmMvZWxlbWVudHMvVHlwZUFoZWFkL1R5cGVBaGVhZEVsZW1lbnQudHMiLCJzcmMvZnJhbWV3b3JrL0N1c3RvbUV2ZW50cy50cyIsInNyYy9mcmFtZXdvcmsvQ3VzdG9tSW5wdXRFbGVtZW50LnRzIiwic3JjL2ZyYW1ld29yay9MYW5ndWFnZS9MYW5ndWFnZXMvQmFzZS9CYXNlRGljdGlvbmFyeS50cyIsInNyYy9mcmFtZXdvcmsvTGFuZ3VhZ2UvTGFuZ3VhZ2VzL0RhbmlzaERpY3Rpb25hcnkudHMiLCJzcmMvZnJhbWV3b3JrL0xhbmd1YWdlL0xhbmd1YWdlcy9FbmdsaXNoRGljdGlvbmFyeS50cyIsInNyYy9mcmFtZXdvcmsvTGFuZ3VhZ2UvVHJhbnNsYXRvci50cyIsInNyYy9mcmFtZXdvcmsvUG9seWZpbGxzL2dldEF0dHJpYnV0ZU5hbWVzUG9seWZpbGwudHMiLCJzcmMvZnJhbWV3b3JrL1V0aWxpdGllcy9Eb21VdGlsaXR5LnRzIiwic3JjL2ZyYW1ld29yay9VdGlsaXRpZXMvZGVib3VuY2VyLnRzIiwic3JjL2ZyYW1ld29yay9WYWxpZGF0aW9uL1ZhbGlkYXRvcnMvQmFua0FjY291bnQudHMiLCJzcmMvZnJhbWV3b3JrL1ZhbGlkYXRpb24vVmFsaWRhdG9ycy9CYW5rQWNjb3VudFJlZ2lzdHJhdGlvbk51bWJlci50cyIsInNyYy9mcmFtZXdvcmsvVmFsaWRhdGlvbi9WYWxpZGF0b3JzL0JhbmtJZE5vcndheS50cyIsInNyYy9mcmFtZXdvcmsvVmFsaWRhdGlvbi9WYWxpZGF0b3JzL0JhbmtJZFN3ZWRlbi50cyIsInNyYy9mcmFtZXdvcmsvVmFsaWRhdGlvbi9WYWxpZGF0b3JzL0NQUi50cyIsInNyYy9mcmFtZXdvcmsvVmFsaWRhdGlvbi9WYWxpZGF0b3JzL0NWUi50cyIsInNyYy9mcmFtZXdvcmsvY3VzdG9tLWVsZW1lbnQuZGVjb3JhdG9yLnRzIiwic3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7QUNBQSx3Q0FBc0Q7QUFHdEQsUUFBUSxDQUFDLGtCQUFrQixHQUFHO0lBQzFCLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDcEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxrQkFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQUEsT0FBTztZQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQUEsUUFBUSxJQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQztLQUNMO0FBQ0wsQ0FBQyxDQUFDOztBQ1ZGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNqVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2x6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUMxRUEsMEVBQXlFO0FBQ3pFLGlEQUE2RDtBQUU3RDtJQU9DLG9CQUFvQixJQUFxQjtRQUFyQixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FB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O2dCQUM5QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzthQUM1QjtZQUNELG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7YUFDM0I7UUFDRixDQUFDLENBQUM7UUFDRixNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELENBQUMsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLGtCQUFlLGFBQWEsQ0FBQzs7Ozs7QUN4RDdCLCtEQUE2RDtBQUM3RCx5RUFBdUU7QUFDdkUsa0VBQWdFO0FBRWhFLE9BQU87QUFDUCw2Q0FBMkM7QUFNbEMsMkZBTkEsd0JBQVUsT0FNQTtBQUxuQixxRUFBb0U7QUFLckMsbUdBTHRCLHVDQUFrQixPQUtzQjtBQUhqRCxXQUFXO0FBQ1gsOENBQWdEO0FBRTNCLDRCQUFRIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiaW1wb3J0IHsgQ3VzdG9tRm9ybSwgZWxlbWVudHMgfSBmcm9tICcuLy4uL3NyYy9pbmRleCc7XHJcblxyXG5cclxuZG9jdW1lbnQub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcclxuICAgICAgICBsZXQgZm9ybSA9IG5ldyBDdXN0b21Gb3JtKGRvY3VtZW50LmZvcm1zWzBdKTtcclxuICAgICAgICBmb3JtLm9uc3VibWl0ID0gcHJvbWlzZSA9PiB7XHJcbiAgICAgICAgICAgIHByb21pc2UudGhlbihyZXNwb25zZSA9PiB7IH0pO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn07XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBBcnJheVV0aWxfMSA9IHJlcXVpcmUoXCIuL0FycmF5VXRpbFwiKTtcclxudmFyIFVybFV0aWxfMSA9IHJlcXVpcmUoXCIuL1VybFV0aWxcIik7XHJcbnZhciBBbmFseXRpY3NDbGlja0V2ZW50cyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEFuYWx5dGljc0NsaWNrRXZlbnRzKCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0b3IgPSBcIltnYS10cmFja11cIjtcclxuICAgICAgICB0aGlzLnBhZ2VVcmwgPSBuZXcgVXJsVXRpbF8xLmRlZmF1bHQoKS5wYXRoQXJyYXkoKS5qb2luKFwiLVwiKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnRzID0gQXJyYXlVdGlsXzEuZGVmYXVsdC5Gcm9tTm9kZUxpc3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLnNlbGVjdG9yKSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBhZ2VVcmwpIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlVXJsID0gXCJGcm9udFBhZ2VcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBBbmFseXRpY3NDbGlja0V2ZW50cy5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBnYShcInNlbmRcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50QWN0aW9uOiBlbGVtZW50LmdldEF0dHJpYnV0ZShcImdhLWFjdGlvblwiKSxcclxuICAgICAgICAgICAgICAgICAgICBldmVudENhdGVnb3J5OiBfdGhpcy5wYWdlVXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50TGFiZWw6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZ2EtbGFiZWxcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgaGl0VHlwZTogXCJldmVudFwiLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBBbmFseXRpY3NDbGlja0V2ZW50cztcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gQW5hbHl0aWNzQ2xpY2tFdmVudHM7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFuYWx5dGljc0NsaWNrRXZlbnRzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBBcnJheVV0aWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBBcnJheVV0aWwoKSB7XHJcbiAgICB9XHJcbiAgICBBcnJheVV0aWwuRnJvbU5vZGVMaXN0ID0gZnVuY3Rpb24gKGxpc3QpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgbGlzdCk7XHJcbiAgICB9O1xyXG4gICAgQXJyYXlVdGlsLmFkZFRvQ3VycmVudCA9IGZ1bmN0aW9uIChjaHVua3MsIGl0ZW0pIHtcclxuICAgICAgICBpZiAoIWNodW5rcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY2h1bmtzWzBdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNodW5rc1tjaHVua3MubGVuZ3RoIC0gMV0ucHVzaChpdGVtKTtcclxuICAgIH07XHJcbiAgICBBcnJheVV0aWwuYWRkVG9OZXcgPSBmdW5jdGlvbiAoY2h1bmtzLCBpdGVtKSB7XHJcbiAgICAgICAgY2h1bmtzW2NodW5rcy5sZW5ndGhdID0gW107XHJcbiAgICAgICAgY2h1bmtzW2NodW5rcy5sZW5ndGggLSAxXS5wdXNoKGl0ZW0pO1xyXG4gICAgfTtcclxuICAgIEFycmF5VXRpbC5kaXZpZGVBY2NvcmRpbmdQcm9wZXJ0eSA9IGZ1bmN0aW9uIChhcnJheSwgc2VsZWN0b3IpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBjaHVua3MgPSBbXTtcclxuICAgICAgICBjaHVua3NbMF0gPSBbYXJyYXlbMF1dO1xyXG4gICAgICAgIGFycmF5LnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0b3IoYSkgPT09IHNlbGVjdG9yKGIpKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hZGRUb0N1cnJlbnQoY2h1bmtzLCBiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFkZFRvTmV3KGNodW5rcywgYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNodW5rcztcclxuICAgIH07XHJcbiAgICByZXR1cm4gQXJyYXlVdGlsO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBBcnJheVV0aWw7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFycmF5VXRpbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgQnJvd3NlclR5cGVfMSA9IHJlcXVpcmUoXCIuL0Jyb3dzZXJUeXBlXCIpO1xyXG52YXIgRG9tVXRpbF8xID0gcmVxdWlyZShcIi4vRG9tVXRpbFwiKTtcclxudmFyIFZpZXdwb3J0VXRpbF8xID0gcmVxdWlyZShcIi4vVmlld3BvcnRVdGlsXCIpO1xyXG52YXIgQmFja2dyb3VuZExhenlMb2FkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBCYWNrZ3JvdW5kTGF6eUxvYWRlcigpIHtcclxuICAgICAgICB0aGlzLmJyb3dzZXJUeXBlID0gbmV3IEJyb3dzZXJUeXBlXzEuZGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGxhenlCYWNrZ3JvdW5kcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIubGF6eS1iYWNrZ3JvdW5kXCIpO1xyXG4gICAgICAgIGlmICghbGF6eUJhY2tncm91bmRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGF6eUJhY2tncm91bmRzID0gW107XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJubyBsYXp5bG9hZCBpbWFnZXMuLi4gY29udGludWVpbmdcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sYXp5QmFja2dyb3VuZHMgPSBbXS5zbGljZS5jYWxsKGxhenlCYWNrZ3JvdW5kcyk7XHJcbiAgICB9XHJcbiAgICBCYWNrZ3JvdW5kTGF6eUxvYWRlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmxhenlsb2FkQmFja2dyb3VuZHMoKTtcclxuICAgICAgICBpZiAoXCJJbnRlcnNlY3Rpb25PYnNlcnZlclwiIGluIHdpbmRvdykge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbE9ic2VydmFibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGF6eUxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQmFja2dyb3VuZExhenlMb2FkZXIucHJvdG90eXBlLnNjcm9sbExhenlMb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8qaWYgKFwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcIiBpbiB3aW5kb3cpIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5sYXp5bG9hZEJhY2tncm91bmRzLmJpbmQodGhpcyksIHRydWUpXHJcbiAgICAgICAgfSovXHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5sYXp5bG9hZEJhY2tncm91bmRzLmJpbmQodGhpcyksIHRydWUpO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMubGF6eWxvYWRCYWNrZ3JvdW5kcy5iaW5kKHRoaXMpKTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIHRoaXMubGF6eWxvYWRCYWNrZ3JvdW5kcy5iaW5kKHRoaXMpKTtcclxuICAgIH07XHJcbiAgICBCYWNrZ3JvdW5kTGF6eUxvYWRlci5wcm90b3R5cGUuc2Nyb2xsT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoXCJJbnRlcnNlY3Rpb25PYnNlcnZlclwiIGluIHdpbmRvdykge1xyXG4gICAgICAgICAgICB2YXIgbGF6eU9ic2VydmVyXzEgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKGVudHJpZXMsIG9ic2VydmVyKSB7XHJcbiAgICAgICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnRhcmdldC5jbGFzc0xpc3QuYWRkKFwidmlzaWJsZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF6eU9ic2VydmVyXzEudW5vYnNlcnZlKGVudHJ5LnRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmxhenlCYWNrZ3JvdW5kcy5mb3JFYWNoKGZ1bmN0aW9uIChsYXp5SW1hZ2UpIHsgcmV0dXJuIGxhenlPYnNlcnZlcl8xLm9ic2VydmUobGF6eUltYWdlKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEJhY2tncm91bmRMYXp5TG9hZGVyLnByb3RvdHlwZS5sYXp5bG9hZEJhY2tncm91bmRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5sYXp5QmFja2dyb3VuZHMuZm9yRWFjaChmdW5jdGlvbiAobGF6eUltYWdlKSB7XHJcbiAgICAgICAgICAgIF90aGlzLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHZhciBpbWFnZVZpZXdQb3J0ID0gbmV3IFZpZXdwb3J0VXRpbF8xLlZpZXdwb3J0VXRpbChsYXp5SW1hZ2UpO1xyXG4gICAgICAgICAgICB2YXIgaW1hZ2VEb21VdGlsID0gbmV3IERvbVV0aWxfMS5kZWZhdWx0KGxhenlJbWFnZSk7XHJcbiAgICAgICAgICAgIGlmIChpbWFnZVZpZXdQb3J0LklzT2Zmc2V0VmlzaWJsZSgzMDApKSB7XHJcbiAgICAgICAgICAgICAgICBpbWFnZURvbVV0aWwuYXBwZW5kQ2xhc3MoXCJ2aXNpYmxlXCIpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubGF6eUJhY2tncm91bmRzID0gX3RoaXMubGF6eUJhY2tncm91bmRzLmZpbHRlcihmdW5jdGlvbiAoaW1hZ2UpIHsgcmV0dXJuIGltYWdlICE9PSBsYXp5SW1hZ2U7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmxhenlCYWNrZ3JvdW5kcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIF90aGlzLmxhenlsb2FkQmFja2dyb3VuZHMuYmluZChfdGhpcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIF90aGlzLmxhenlsb2FkQmFja2dyb3VuZHMuYmluZChfdGhpcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwib3JpZW50YXRpb25jaGFuZ2VcIiwgX3RoaXMubGF6eWxvYWRCYWNrZ3JvdW5kcy5iaW5kKF90aGlzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBCYWNrZ3JvdW5kTGF6eUxvYWRlcjtcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gQmFja2dyb3VuZExhenlMb2FkZXI7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJhY2tncm91bmRMYXp5TG9hZGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBCcm93c2VyVHlwZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEJyb3dzZXJUeXBlKCkge1xyXG4gICAgICAgIHRoaXMublZlciA9IG5hdmlnYXRvci5hcHBWZXJzaW9uO1xyXG4gICAgICAgIHRoaXMubkFndCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XHJcbiAgICAgICAgdGhpcy5icm93c2VyTmFtZSA9IG5hdmlnYXRvci5hcHBOYW1lO1xyXG4gICAgICAgIHRoaXMuZnVsbFZlcnNpb24gPSBwYXJzZUZsb2F0KG5hdmlnYXRvci5hcHBWZXJzaW9uKTtcclxuICAgICAgICB0aGlzLm1ham9yVmVyc2lvbiA9IHBhcnNlSW50KG5hdmlnYXRvci5hcHBWZXJzaW9uLCAxMCk7XHJcbiAgICAgICAgdGhpcy5wbGF0Zm9ybU5hbWUgPSBcIlVua25vd24gT1NcIjtcclxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiV2luXCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IFwiV2luZG93c1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiTWFjXCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IFwiTWFjaW50b3NoXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJMaW51eFwiKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5wbGF0Zm9ybU5hbWUgPSBcIkxpbnV4XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJBbmRyb2lkXCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IFwiQW5kcm9pZFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwibGlrZSBNYWNcIikgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxhdGZvcm1OYW1lID0gXCJpT1NcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51c2VyQWdlbnRTdHJpbmcgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgICAgIC8vIEluIE9wZXJhLCB0aGUgdHJ1ZSB2ZXJzaW9uIGlzIGFmdGVyIFwiT3BlcmFcIiBvciBhZnRlciBcIlZlcnNpb25cIlxyXG4gICAgICAgIGlmICgodGhpcy52ZXJPZmZzZXQgPSB0aGlzLm5BZ3QuaW5kZXhPZihcIk9wZXJhXCIpKSAhPSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJOYW1lID0gXCJPcGVyYVwiO1xyXG4gICAgICAgICAgICB0aGlzLmZ1bGxWZXJzaW9uID0gcGFyc2VGbG9hdCh0aGlzLm5BZ3Quc3Vic3RyaW5nKHRoaXMudmVyT2Zmc2V0ICsgNikpO1xyXG4gICAgICAgICAgICBpZiAoKHRoaXMudmVyT2Zmc2V0ID0gdGhpcy5uQWd0LmluZGV4T2YoXCJWZXJzaW9uXCIpKSAhPSAtMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZnVsbFZlcnNpb24gPSBwYXJzZUZsb2F0KHRoaXMubkFndC5zdWJzdHJpbmcodGhpcy52ZXJPZmZzZXQgKyA4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIE1TSUUsIHRoZSB0cnVlIHZlcnNpb24gaXMgYWZ0ZXIgXCJNU0lFXCIgaW4gdXNlckFnZW50XHJcbiAgICAgICAgZWxzZSBpZiAoKHRoaXMudmVyT2Zmc2V0ID0gdGhpcy5uQWd0LmluZGV4T2YoXCJNU0lFXCIpKSAhPSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJOYW1lID0gXCJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXJcIjtcclxuICAgICAgICAgICAgdGhpcy5mdWxsVmVyc2lvbiA9IHBhcnNlRmxvYXQodGhpcy5uQWd0LnN1YnN0cmluZyh0aGlzLnZlck9mZnNldCArIDUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKHRoaXMudmVyT2Zmc2V0ID0gdGhpcy5uQWd0LmluZGV4T2YoXCJFZGdlXCIpKSAhPSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJOYW1lID0gXCJFZGdlXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZnVsbFZlcnNpb24gPSBwYXJzZUZsb2F0KHRoaXMubkFndC5zdWJzdHJpbmcodGhpcy52ZXJPZmZzZXQgKyA1KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIENocm9tZSwgdGhlIHRydWUgdmVyc2lvbiBpcyBhZnRlciBcIkNocm9tZVwiXHJcbiAgICAgICAgZWxzZSBpZiAoKHRoaXMudmVyT2Zmc2V0ID0gdGhpcy5uQWd0LmluZGV4T2YoXCJDaHJvbWVcIikpICE9IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJvd3Nlck5hbWUgPSBcIkNocm9tZVwiO1xyXG4gICAgICAgICAgICB0aGlzLmZ1bGxWZXJzaW9uID0gcGFyc2VGbG9hdCh0aGlzLm5BZ3Quc3Vic3RyaW5nKHRoaXMudmVyT2Zmc2V0ICsgNykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJbiBTYWZhcmksIHRoZSB0cnVlIHZlcnNpb24gaXMgYWZ0ZXIgXCJTYWZhcmlcIiBvciBhZnRlciBcIlZlcnNpb25cIlxyXG4gICAgICAgIGVsc2UgaWYgKCh0aGlzLnZlck9mZnNldCA9IHRoaXMubkFndC5pbmRleE9mKFwiU2FmYXJpXCIpKSAhPSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJOYW1lID0gXCJTYWZhcmlcIjtcclxuICAgICAgICAgICAgdGhpcy5mdWxsVmVyc2lvbiA9IHBhcnNlRmxvYXQodGhpcy5uQWd0LnN1YnN0cmluZyh0aGlzLnZlck9mZnNldCArIDcpKTtcclxuICAgICAgICAgICAgaWYgKCh0aGlzLnZlck9mZnNldCA9IHRoaXMubkFndC5pbmRleE9mKFwiVmVyc2lvblwiKSkgIT0gLTEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bGxWZXJzaW9uID0gcGFyc2VGbG9hdCh0aGlzLm5BZ3Quc3Vic3RyaW5nKHRoaXMudmVyT2Zmc2V0ICsgOCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJbiBGaXJlZm94LCB0aGUgdHJ1ZSB2ZXJzaW9uIGlzIGFmdGVyIFwiRmlyZWZveFwiXHJcbiAgICAgICAgZWxzZSBpZiAoKHRoaXMudmVyT2Zmc2V0ID0gdGhpcy5uQWd0LmluZGV4T2YoXCJGaXJlZm94XCIpKSAhPSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJOYW1lID0gXCJGaXJlZm94XCI7XHJcbiAgICAgICAgICAgIHRoaXMuZnVsbFZlcnNpb24gPSBwYXJzZUZsb2F0KHRoaXMubkFndC5zdWJzdHJpbmcodGhpcy52ZXJPZmZzZXQgKyA4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIG1vc3Qgb3RoZXIgYnJvd3NlcnMsIFwibmFtZS92ZXJzaW9uXCIgaXMgYXQgdGhlIGVuZCBvZiB1c2VyQWdlbnRcclxuICAgICAgICBlbHNlIGlmICgodGhpcy5uYW1lT2Zmc2V0ID0gdGhpcy5uQWd0Lmxhc3RJbmRleE9mKFwiIFwiKSArIDEpIDxcclxuICAgICAgICAgICAgKHRoaXMudmVyT2Zmc2V0ID0gdGhpcy5uQWd0Lmxhc3RJbmRleE9mKFwiL1wiKSkpIHtcclxuICAgICAgICAgICAgdGhpcy5icm93c2VyTmFtZSA9IHRoaXMubkFndC5zdWJzdHJpbmcodGhpcy5uYW1lT2Zmc2V0LCB0aGlzLnZlck9mZnNldCk7XHJcbiAgICAgICAgICAgIHRoaXMuZnVsbFZlcnNpb24gPSBwYXJzZUZsb2F0KHRoaXMubkFndC5zdWJzdHJpbmcodGhpcy52ZXJPZmZzZXQgKyAxKSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCkgPT0gdGhpcy5icm93c2VyTmFtZS50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXJOYW1lID0gbmF2aWdhdG9yLmFwcE5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdHJpbSB0aGUgZnVsbFZlcnNpb24gc3RyaW5nIGF0IHNlbWljb2xvbi9zcGFjZSBpZiBwcmVzZW50XHJcbiAgICAgICAgLypcclxuICAgICAgICAgICAgaWYgKCh0aGlzLml4ID0gdGhpcy5mdWxsVmVyc2lvbi5pbmRleE9mKFwiO1wiKSkgIT0gLTEpXHJcbiAgICAgICAgICAgIHRoaXMuZnVsbFZlcnNpb24gPSB0aGlzLmZ1bGxWZXJzaW9uLnN1YnN0cmluZygwLCBpeCk7XHJcbiAgICAgICAgICAgIGlmICgodGhpcy5peCA9IHRoaXMuZnVsbFZlcnNpb24uaW5kZXhPZihcIiBcIikpICE9IC0xKVxyXG4gICAgICAgICAgICB0aGlzLmZ1bGxWZXJzaW9uID0gdGhpcy5mdWxsVmVyc2lvbi5zdWJzdHJpbmcoMCwgaXgpO1xyXG4gICAgICAgICovXHJcbiAgICAgICAgdGhpcy5tYWpvclZlcnNpb24gPSBwYXJzZUludChcIlwiICsgdGhpcy5mdWxsVmVyc2lvbiwgMTApO1xyXG4gICAgICAgIGlmIChpc05hTih0aGlzLm1ham9yVmVyc2lvbikpIHtcclxuICAgICAgICAgICAgdGhpcy5mdWxsVmVyc2lvbiA9IHBhcnNlRmxvYXQobmF2aWdhdG9yLmFwcFZlcnNpb24pO1xyXG4gICAgICAgICAgICB0aGlzLm1ham9yVmVyc2lvbiA9IHBhcnNlSW50KG5hdmlnYXRvci5hcHBWZXJzaW9uLCAxMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgQnJvd3NlclR5cGUucHJvdG90eXBlLmlzQ2hyb21lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJyb3dzZXJOYW1lID09PSBcIkNocm9tZVwiO1xyXG4gICAgfTtcclxuICAgIEJyb3dzZXJUeXBlLnByb3RvdHlwZS5pc0ZpcmVmb3ggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJvd3Nlck5hbWUgPT09IFwiRmlyZWZveFwiO1xyXG4gICAgfTtcclxuICAgIEJyb3dzZXJUeXBlLnByb3RvdHlwZS5pc0VkZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJvd3Nlck5hbWUgPT09IFwiRWRnZVwiO1xyXG4gICAgfTtcclxuICAgIEJyb3dzZXJUeXBlLnByb3RvdHlwZS5pc09wZXJhID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJyb3dzZXJOYW1lID09PSBcIk9wZXJhXCI7XHJcbiAgICB9O1xyXG4gICAgQnJvd3NlclR5cGUucHJvdG90eXBlLmlzSUUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJvd3Nlck5hbWUgPT09IFwiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyXCIgfHwgdGhpcy5icm93c2VyTmFtZSA9PT0gXCJOZXRzY2FwZVwiO1xyXG4gICAgfTtcclxuICAgIEJyb3dzZXJUeXBlLnByb3RvdHlwZS5pc1NhZmFyaSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5icm93c2VyTmFtZSA9PT0gXCJTYWZhcmlcIjtcclxuICAgIH07XHJcbiAgICBCcm93c2VyVHlwZS5wcm90b3R5cGUuaVBob25lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBpRGV2aWNlcyA9IFtcImlQaG9uZSBTaW11bGF0b3JcIiwgXCJpUG9kIFNpbXVsYXRvclwiLCBcImlQaG9uZVwiLCBcImlQb2RcIl07XHJcbiAgICAgICAgaWYgKG5hdmlnYXRvci5wbGF0Zm9ybSkge1xyXG4gICAgICAgICAgICB3aGlsZSAoaURldmljZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLnBsYXRmb3JtID09PSBpRGV2aWNlcy5wb3AoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH07XHJcbiAgICBCcm93c2VyVHlwZS5wcm90b3R5cGUuaXNNb2JpbGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIC9Nb2JpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcclxuICAgIH07XHJcbiAgICBCcm93c2VyVHlwZS5wcm90b3R5cGUuaU9TdmVyc2lvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNNb2JpbGUoKSAmJiAhdGhpcy5pUGhvbmUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFqb3JWZXJzaW9uICsgXCJcIjtcclxuICAgIH07XHJcbiAgICBCcm93c2VyVHlwZS5wcm90b3R5cGUuaGFzUGx1Z2luID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHZhciBwbHVnaW5zID0gd2luZG93Lm5hdmlnYXRvci5wbHVnaW5zO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAocGx1Z2luc1tpXVtuYW1lXSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgQnJvd3NlclR5cGUucHJvdG90eXBlLmlzSWZyYW1lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKS5jbGFzc0xpc3QuY29udGFpbnMoXCJpZnJhbWVcIik7XHJcbiAgICB9O1xyXG4gICAgQnJvd3NlclR5cGUucHJvdG90eXBlLmlzX3RvdWNoX2RldmljZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcHJlZml4ZXMgPSBcIiAtd2Via2l0LSAtbW96LSAtby0gLW1zLSBcIi5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgdmFyIG1xID0gZnVuY3Rpb24gKHF1ZXJ5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYShxdWVyeSkubWF0Y2hlcztcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChcIm9udG91Y2hzdGFydFwiIGluIHdpbmRvdykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHF1ZXJ5ID0gW1wiKFwiLCBwcmVmaXhlcy5qb2luKFwidG91Y2gtZW5hYmxlZCksKFwiKSwgXCJoZWFydHpcIiwgXCIpXCJdLmpvaW4oXCJcIik7XHJcbiAgICAgICAgcmV0dXJuIG1xKHF1ZXJ5KTtcclxuICAgIH07XHJcbiAgICBCcm93c2VyVHlwZS5wcm90b3R5cGUudXNlTmF0aXZlUGRmVmlld2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSWZyYW1lKCkgfHwgdGhpcy5pc01vYmlsZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzUGx1Z2luKFwiYXBwbGljYXRpb24vcGRmXCIpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBCcm93c2VyVHlwZTtcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gQnJvd3NlclR5cGU7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJyb3dzZXJUeXBlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBBcnJheVV0aWxfMSA9IHJlcXVpcmUoXCIuL0FycmF5VXRpbFwiKTtcclxudmFyIERvbVV0aWxfMSA9IHJlcXVpcmUoXCIuL0RvbVV0aWxcIik7XHJcbnZhciBDaGFuZ2VMYW5ndWFnZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIENoYW5nZUxhbmd1YWdlKCkge1xyXG4gICAgICAgIHRoaXMubGFuZ3VhZ2VGb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdExhbmd1YWdlJyk7XHJcbiAgICAgICAgdGhpcy5sYW5ndWFnZXMgPSBBcnJheVV0aWxfMS5kZWZhdWx0LkZyb21Ob2RlTGlzdCh0aGlzLmxhbmd1YWdlRm9ybS5xdWVyeVNlbGVjdG9yQWxsKCdsaScpKTtcclxuICAgIH1cclxuICAgIENoYW5nZUxhbmd1YWdlLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5sYW5ndWFnZXMuZm9yRWFjaChmdW5jdGlvbiAobGFuZ3VhZ2UpIHtcclxuICAgICAgICAgICAgaWYgKGxhbmd1YWdlLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGxhbmd1YWdlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgX3RoaXMuc2V0TGFuZ3VhZ2UuYmluZChfdGhpcykpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIENoYW5nZUxhbmd1YWdlLnByb3RvdHlwZS5zZXRMYW5ndWFnZSA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIHZhciBsYW5ndWFnZVV0aWwgPSBuZXcgRG9tVXRpbF8xLmRlZmF1bHQoZXZlbnQuY3VycmVudFRhcmdldCk7XHJcbiAgICAgICAgdmFyIGFjdGlvblVybCA9IHRoaXMubGFuZ3VhZ2VGb3JtLmFjdGlvbjtcclxuICAgICAgICBpZiAoYWN0aW9uVXJsLmluZGV4T2YoJz8nKSA8IDApIHtcclxuICAgICAgICAgICAgYWN0aW9uVXJsICs9IFwiP2N1bHR1cmU9XCIgKyBsYW5ndWFnZVV0aWwuZ2V0RGF0YUF0dHIoJ2xhbmcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFjdGlvblVybCArPSBcIiZjdWx0dXJlPVwiICsgbGFuZ3VhZ2VVdGlsLmdldERhdGFBdHRyKCdsYW5nJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubGFuZ3VhZ2VGb3JtLmFjdGlvbiA9IGFjdGlvblVybDtcclxuICAgICAgICB0aGlzLmxhbmd1YWdlRm9ybS5zdWJtaXQoKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gQ2hhbmdlTGFuZ3VhZ2U7XHJcbn0oKSk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IENoYW5nZUxhbmd1YWdlO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1DaGFuZ2VMYW5ndWFnZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgQ29weVV0aWxpdHkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBDb3B5VXRpbGl0eSgpIHtcclxuICAgIH1cclxuICAgIENvcHlVdGlsaXR5LmRlZXBDb3B5ID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XHJcbiAgICAgICAgICAgIGlmIChkZXN0aW5hdGlvbi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzdGluYXRpb25ba2V5XSBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVlcENvcHkoZGVzdGluYXRpb25ba2V5XSwgc291cmNlW2tleV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25ba2V5XSA9IHNvdXJjZVtrZXldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb25ba2V5XSA9IHNvdXJjZVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBDb3B5VXRpbGl0eTtcclxufSgpKTtcclxuZXhwb3J0cy5Db3B5VXRpbGl0eSA9IENvcHlVdGlsaXR5O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1Db3B5IFV0aWxpdHkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIEN1c3RvbUlucHV0cyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEN1c3RvbUlucHV0cygpIHtcclxuICAgICAgICB0aGlzLmN1c3RvbUlucHV0cyA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuY3VzdG9tLWlucHV0XCIpKTtcclxuICAgIH1cclxuICAgIEN1c3RvbUlucHV0cy5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tSW5wdXRzLmZvckVhY2goZnVuY3Rpb24gKGN1c3RvbUlucHV0KSB7XHJcbiAgICAgICAgICAgIGN1c3RvbUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5yYWRpb0NsaWNrKGN1c3RvbUlucHV0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgQ3VzdG9tSW5wdXRzLnByb3RvdHlwZS5yYWRpb0NsaWNrID0gZnVuY3Rpb24gKGN1c3RvbUlucHV0KSB7XHJcbiAgICAgICAgdmFyIHJhZGlvRWxlbWVudCA9IGN1c3RvbUlucHV0LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgcmFkaW9FbGVtZW50LmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBDdXN0b21JbnB1dHM7XHJcbn0oKSk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IEN1c3RvbUlucHV0cztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q3VzdG9tSW5wdXRzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBDdXN0b21WYWxpZGF0aW9uVXRpbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEN1c3RvbVZhbGlkYXRpb25VdGlsKCkge1xyXG4gICAgICAgIHRoaXMubWFpbFJlZ2V4ID0gbmV3IFJlZ0V4cCgvXihbYS16QS1aMC05w4bDmMOFw6bDuMOlXy4rLV0pK1xcQCgoW2EtekEtWjAtOcOGw5jDhcOmw7jDpS1dKStcXC4pKyhbYS16QS1aMC05w4bDmMOFw6bDuMOlXXsyLDR9KSskLyk7XHJcbiAgICAgICAgdGhpcy51cmxSZWdleCA9IG5ldyBSZWdFeHAoL1stYS16QS1aMC05QDolLl9cXCt+Iz1dezEsMjU2fVxcLlthLXpBLVowLTkoKV17MSw2fVxcYihbLWEtekEtWjAtOSgpQDolX1xcKy5+Iz8mLy89XSopLyk7XHJcbiAgICAgICAgdGhpcy5odHRwVXJsUmVnZXggPSBuZXcgUmVnRXhwKC9eaHR0cHM/OlxcL1xcLyh3d3dcXC4pP1stYS16QS1aMC05QDolLl9cXCt+Iz1dezEsMjU2fVxcLlthLXpBLVowLTkoKV17MSw2fVxcYihbLWEtekEtWjAtOSgpQDolX1xcKy5+Iz8mLy89XSopLyk7XHJcbiAgICB9XHJcbiAgICBDdXN0b21WYWxpZGF0aW9uVXRpbC5wcm90b3R5cGUudmFsaWRhdGVFbWFpbCA9IGZ1bmN0aW9uIChtYWlsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFpbFJlZ2V4LnRlc3QobWFpbCk7XHJcbiAgICB9O1xyXG4gICAgQ3VzdG9tVmFsaWRhdGlvblV0aWwucHJvdG90eXBlLnZhbGlkYXRlVXJsID0gZnVuY3Rpb24gKHVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVybFJlZ2V4LnRlc3QodXJsKTtcclxuICAgIH07XHJcbiAgICBDdXN0b21WYWxpZGF0aW9uVXRpbC5wcm90b3R5cGUudmFsaWRhdGVIdHRwVXJsID0gZnVuY3Rpb24gKHVybCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBVcmxSZWdleC50ZXN0KHVybCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEN1c3RvbVZhbGlkYXRpb25VdGlsO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBDdXN0b21WYWxpZGF0aW9uVXRpbDtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q3VzdG9tVmFsaWRhdGlvblV0aWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGRlYm91bmNlciA9IGZ1bmN0aW9uIChmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcclxuICAgIGlmIChpbW1lZGlhdGUgPT09IHZvaWQgMCkgeyBpbW1lZGlhdGUgPSBmYWxzZTsgfVxyXG4gICAgdmFyIHRpbWVvdXQ7XHJcbiAgICB2YXIgYXJncztcclxuICAgIHZhciBjb250ZXh0O1xyXG4gICAgdmFyIHJlc3VsdDtcclxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aW1lb3V0ID0gbnVsbDtcclxuICAgICAgICBpZiAoIWltbWVkaWF0ZSkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xyXG4gICAgICAgICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHZhciBkZWJvdW5jZWRGdW5jID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnRleHQgPSB0aGlzO1xyXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XHJcbiAgICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XHJcbiAgICAgICAgaWYgKCF0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChsYXRlciwgd2FpdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYWxsTm93KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XHJcbiAgICAgICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcbiAgICB2YXIgY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XHJcbiAgICAgICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdmFyIGRlYm91bmNlZCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGYgPSBkZWJvdW5jZWRGdW5jO1xyXG4gICAgICAgIGYuY2xlYXIgPSBjbGVhcjtcclxuICAgICAgICBmLmZsdXNoID0gZmx1c2g7XHJcbiAgICAgICAgcmV0dXJuIGY7XHJcbiAgICB9KSgpO1xyXG4gICAgcmV0dXJuIGRlYm91bmNlZDtcclxufTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gZGVib3VuY2VyO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1EZWJvdW5jZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIFZpZXdwb3J0VXRpbF8xID0gcmVxdWlyZShcIi4vVmlld3BvcnRVdGlsXCIpO1xyXG52YXIgRG9tVXRpbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIERvbVV0aWwoZWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy52aWV3UG9ydFV0aWwgPSBuZXcgVmlld3BvcnRVdGlsXzEuVmlld3BvcnRVdGlsKHRoaXMuZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICBEb21VdGlsLnByb3RvdHlwZS5nZXREYXRhQXR0ciA9IGZ1bmN0aW9uIChhdHRyLCBkZWZhdWx0dmFsdWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtXCIgKyBhdHRyKTtcclxuICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogZGVmYXVsdHZhbHVlO1xyXG4gICAgfTtcclxuICAgIERvbVV0aWwucHJvdG90eXBlLnNldERhdGFBdHRyID0gZnVuY3Rpb24gKGF0dHIsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1cIiArIGF0dHIsIHZhbHVlKTtcclxuICAgIH07XHJcbiAgICBEb21VdGlsLnByb3RvdHlwZS5nZXRBdHRyID0gZnVuY3Rpb24gKGF0dHIsIGRlZmF1bHR2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHIpO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBkZWZhdWx0dmFsdWU7XHJcbiAgICB9O1xyXG4gICAgRG9tVXRpbC5wcm90b3R5cGUuc2V0QXR0ciA9IGZ1bmN0aW9uIChhdHRyLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHIsIHZhbHVlKTtcclxuICAgIH07XHJcbiAgICBEb21VdGlsLnByb3RvdHlwZS5yZW1vdmVBdHRyID0gZnVuY3Rpb24gKGF0dHIpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyKTtcclxuICAgIH07XHJcbiAgICBEb21VdGlsLnByb3RvdHlwZS5yZW1vdmVEYXRhQXR0ciA9IGZ1bmN0aW9uIChhdHRyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLVwiICsgYXR0cik7XHJcbiAgICB9O1xyXG4gICAgRG9tVXRpbC5wcm90b3R5cGUuaGFzQXR0ciA9IGZ1bmN0aW9uIChhdHRyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHIpO1xyXG4gICAgfTtcclxuICAgIERvbVV0aWwucHJvdG90eXBlLnNoYWtlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5hcHBlbmRDbGFzcygnc2hha2UnKTtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgX3RoaXMucmVtb3ZlQ2xhc3MoJ3NoYWtlJyk7XHJcbiAgICAgICAgICAgIF90aGlzLmVsZW1lbnQucmVhZE9ubHkgPSBmYWxzZTtcclxuICAgICAgICB9LCA2MDApO1xyXG4gICAgfTtcclxuICAgIERvbVV0aWwucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5hcHBlbmRDbGFzcygnZXJyb3InKTtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgX3RoaXMucmVtb3ZlQ2xhc3MoJ2Vycm9yJyk7XHJcbiAgICAgICAgICAgIF90aGlzLmVsZW1lbnQucmVhZE9ubHkgPSBmYWxzZTtcclxuICAgICAgICB9LCA1MDAwKTtcclxuICAgIH07XHJcbiAgICBEb21VdGlsLnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudmlld1BvcnRVdGlsLklzVmlzaWJsZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBEb21VdGlsLnByb3RvdHlwZS5yZW1vdmVDbGFzcyA9IGZ1bmN0aW9uIChjbGFzc25hbWUpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc25hbWUpO1xyXG4gICAgfTtcclxuICAgIERvbVV0aWwucHJvdG90eXBlLmFwcGVuZENsYXNzID0gZnVuY3Rpb24gKGNsYXNzbmFtZSkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzbmFtZSk7XHJcbiAgICB9O1xyXG4gICAgRG9tVXRpbC5wcm90b3R5cGUuZGVsZXRlRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgfTtcclxuICAgIERvbVV0aWwucHJvdG90eXBlLnNldENoaWxkRWxlbWVudEJ5QXR0ck5hbWUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcclxuICAgICAgICB2YXIgZmlyc3RMZXR0ZXIgPSBuYW1lLnJlcGxhY2UoL15cXHcvLCBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50b1VwcGVyQ2FzZSgpOyB9KTtcclxuICAgICAgICB2YXIgU3ViRWxlbWVudCA9IHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiW25hbWU9XFxcIlwiICsgZmlyc3RMZXR0ZXIgKyBcIlxcXCJdXCIpO1xyXG4gICAgICAgIGlmIChTdWJFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIFN1YkVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgRG9tVXRpbC5wcm90b3R5cGUuaGFzQ2xhc3MgPSBmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcclxuICAgIH07XHJcbiAgICBEb21VdGlsLnByb3RvdHlwZS5nZXRTdHlsZSA9IGZ1bmN0aW9uIChydWxlTmFtZSkge1xyXG4gICAgICAgIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudClbcnVsZU5hbWVdO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBEb21VdGlsO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBEb21VdGlsO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1Eb21VdGlsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBBcnJheVV0aWxfMSA9IHJlcXVpcmUoXCIuL0FycmF5VXRpbFwiKTtcclxudmFyIEVsZW1lbnRTY2FsZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEVsZW1lbnRTY2FsZSgpIHtcclxuICAgIH1cclxuICAgIEVsZW1lbnRTY2FsZS5wcm90b3R5cGUuRXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnNjYWxlUmlnaHRFbGVtZW50cyA9IEFycmF5VXRpbF8xLmRlZmF1bHQuRnJvbU5vZGVMaXN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbY2xhc3MqPSdzY2FsZS0nXVwiKSk7XHJcbiAgICAgICAgdGhpcy5Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5TY2FsZVJpZ2h0KCk7XHJcbiAgICB9O1xyXG4gICAgRWxlbWVudFNjYWxlLnByb3RvdHlwZS5Jbml0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRXZHRoT2Zmc2V0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0O1xyXG4gICAgfTtcclxuICAgIEVsZW1lbnRTY2FsZS5wcm90b3R5cGUuU2NhbGVSaWdodCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuc2NhbGVSaWdodEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdmFyIGVsZW1lbnRSaWdodCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7XHJcbiAgICAgICAgICAgIHZhciBzcGFjZVRvRWRnZSA9IF90aGlzLmRvY3VtZW50V2R0aE9mZnNldCAtIGVsZW1lbnRSaWdodDtcclxuICAgICAgICAgICAgdmFyIHJhdGlvID0gKHNwYWNlVG9FZGdlIC8gZWxlbWVudC5vZmZzZXRXaWR0aCkgKyAxO1xyXG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IFwic2NhbGVYKFwiICsgcmF0aW8gKyBcIilcIjtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gRWxlbWVudFNjYWxlO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBFbGVtZW50U2NhbGU7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVsZW1lbnRTY2FsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgRm9ybVV0aWxzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gRm9ybVV0aWxzKGVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgfVxyXG4gICAgRm9ybVV0aWxzLnByb3RvdHlwZS5nZXRGb3JtRGF0YU9qZWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2YWx1ZXMgPSB7fTtcclxuICAgICAgICB2YXIgaW5wdXRzID0gdGhpcy5lbGVtZW50LmVsZW1lbnRzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZXNbaW5wdXRzW2ldWyduYW1lJ11dICE9ICcnKVxyXG4gICAgICAgICAgICAgICAgdmFsdWVzW2lucHV0c1tpXVsnbmFtZSddXSA9IGlucHV0c1tpXVsndmFsdWUnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgIH07XHJcbiAgICBGb3JtVXRpbHMucHJvdG90eXBlLmdldEZvcm1EYXRhU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2YWx1ZXMgPSBcIlwiO1xyXG4gICAgICAgIHZhciBpbnB1dHMgPSB0aGlzLmVsZW1lbnQuZWxlbWVudHM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlc1tpbnB1dHNbaV1bJ25hbWUnXV0pXHJcbiAgICAgICAgICAgICAgICB2YWx1ZXMgKz0gW2lucHV0c1tpXVsnbmFtZSddXSArIFwiPVwiICsgaW5wdXRzW2ldWyd2YWx1ZSddICsgXCImXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZXM7XHJcbiAgICB9O1xyXG4gICAgRm9ybVV0aWxzLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQucmVzZXQoKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gRm9ybVV0aWxzO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBGb3JtVXRpbHM7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZvcm1VdGlscy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgR2xvYmFsRG9tVXRpbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEdsb2JhbERvbVV0aWwoZWxlbWVudHMpIHtcclxuICAgICAgICBpZiAoZWxlbWVudHMgPT09IHZvaWQgMCkgeyBlbGVtZW50cyA9IG51bGw7IH1cclxuICAgICAgICBpZiAoZWxlbWVudHMpXHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMgPSBbXS5zbGljZS5jYWxsKGVsZW1lbnRzKTtcclxuICAgIH1cclxuICAgIEdsb2JhbERvbVV0aWwucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiAoZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJycpOyB9KTtcclxuICAgIH07XHJcbiAgICBHbG9iYWxEb21VdGlsLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoZSkgeyByZXR1cm4gKGUuc3R5bGUuZGlzcGxheSA9ICdub25lJyk7IH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBHbG9iYWxEb21VdGlsO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBHbG9iYWxEb21VdGlsO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1HbG9iYWxEb21VdGlsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBBcnJheVV0aWxfMSA9IHJlcXVpcmUoXCIuL0FycmF5VXRpbFwiKTtcclxudmFyIEhUTUxJbXBvcnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBIVE1MSW1wb3J0KCkge1xyXG4gICAgfVxyXG4gICAgSFRNTEltcG9ydC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmluY2x1ZGVIVE1MKCk7XHJcbiAgICB9O1xyXG4gICAgSFRNTEltcG9ydC5wcm90b3R5cGUuaW5jbHVkZUhUTUwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgZWxlbWVudHMsIGVsZW1lbnQsIGZpbGVQYXRoLCB4aHR0cDtcclxuICAgICAgICBlbGVtZW50cyA9IEFycmF5VXRpbF8xLmRlZmF1bHQuRnJvbU5vZGVMaXN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbaHRtbC1pbXBvcnRdXCIpKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcclxuICAgICAgICAgICAgLypzZWFyY2ggZm9yIGVsZW1lbnRzIHdpdGggYSBjZXJ0YWluIGF0cnJpYnV0ZToqL1xyXG4gICAgICAgICAgICBmaWxlUGF0aCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaHRtbC1pbXBvcnRcIik7XHJcbiAgICAgICAgICAgIGlmIChmaWxlUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgeGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICAgICAgICAgIHhodHRwLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeGh0dHAucmVhZHlTdGF0ZSA9PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4aHR0cC5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lmluc2VydEFkamFjZW50SFRNTChcImJlZm9yZWJlZ2luXCIsIHhodHRwLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4aHR0cC5zdGF0dXMgPT0gNDA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IFwiUGFnZSBub3QgZm91bmQuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJodG1sLWltcG9ydFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuaW5jbHVkZUhUTUwoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgeGh0dHAub3BlbihcIkdFVFwiLCBmaWxlUGF0aCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB4aHR0cC5zZW5kKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEhUTUxJbXBvcnQ7XHJcbn0oKSk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IEhUTUxJbXBvcnQ7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUhUTUxJbXBvcnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIEFycmF5VXRpbF8xID0gcmVxdWlyZShcIi4vQXJyYXlVdGlsXCIpO1xyXG52YXIgRG9tVXRpbF8xID0gcmVxdWlyZShcIi4vRG9tVXRpbFwiKTtcclxudmFyIFZpZXdwb3J0VXRpbF8xID0gcmVxdWlyZShcIi4vVmlld3BvcnRVdGlsXCIpO1xyXG52YXIgSGVhZGVyQW5pbWF0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gSGVhZGVyQW5pbWF0aW9uKCkge1xyXG4gICAgICAgIHRoaXMubWluU2NyZWVuV2lkdGggPSA3Njg7XHJcbiAgICAgICAgdGhpcy5zY3JlZW5XaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgICAgICB0aGlzLmhlYWRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJoZWFkZXJcIik7XHJcbiAgICAgICAgdGhpcy5icmFuZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubmF2YmFyLWJyYW5kXCIpO1xyXG4gICAgICAgIHRoaXMuZG9tVXRpbCA9IG5ldyBEb21VdGlsXzEuZGVmYXVsdCh0aGlzLmhlYWRlcik7XHJcbiAgICAgICAgdmFyIGFuaW1hdGlvbkNvbnRhaW5lcnMgPSBBcnJheVV0aWxfMS5kZWZhdWx0LkZyb21Ob2RlTGlzdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmFuaW1hdGlvbi1jb250YWluZXJcIikpO1xyXG4gICAgICAgIHZhciBkZWxheWVkRWxlbWVudHMgPSBBcnJheVV0aWxfMS5kZWZhdWx0LkZyb21Ob2RlTGlzdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmRlbGF5ZWRcIikpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsRXZlbnQoKTtcclxuICAgICAgICAvLyBkaXNwbGF5IGVsZW1lbnRzIGFmdGVyIHBhZ2UgbG9hZCBhbmQgbmV3IHBvc2l0aW9uIGlzIHRha2VuLlxyXG4gICAgICAgIGRlbGF5ZWRFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7IGVsZW1lbnQuc3R5bGUub3BhY2l0eSA9IFwiMVwiOyB9KTtcclxuICAgICAgICAvLyBhZGQgdHJhbnNpdGlvbiBkZWxheSBhZnRlciBmaXJzdCBzY3JvbGwgRXZlbnRcclxuICAgICAgICB0aGlzLnNldEFuaW1hdGlvbkRlbGF5KGFuaW1hdGlvbkNvbnRhaW5lcnMpO1xyXG4gICAgfVxyXG4gICAgSGVhZGVyQW5pbWF0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhbmltYXRpb25FdmVudCA9IHRoaXMuZG9tVXRpbC5nZXREYXRhQXR0cihcImFuaW1hdGlvbi1ldmVudFwiKTtcclxuICAgICAgICBpZiAoYW5pbWF0aW9uRXZlbnQgPT09IFwibG9hZFwiKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCB0aGlzLmx5aW5nUG9zaXRpb24uYmluZCh0aGlzKSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFuaW1hdGlvbkV2ZW50ID09PSBcInNjcm9sbFwiICYmIHRoaXMuc2NyZWVuV2lkdGggPj0gdGhpcy5taW5TY3JlZW5XaWR0aCkge1xyXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLnNjcm9sbEV2ZW50LmJpbmQodGhpcyksIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbmltYXRpb25FdmVudCA9PT0gXCJzY3JvbGxcIiAmJiB0aGlzLnNjcmVlbldpZHRoIDwgdGhpcy5taW5TY3JlZW5XaWR0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmx5aW5nUG9zaXRpb24oKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgSGVhZGVyQW5pbWF0aW9uLnByb3RvdHlwZS5seWluZ1Bvc2l0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhlYWRlciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRlci5jbGFzc0xpc3QuYWRkKFwiYW5pbWF0ZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuYnJhbmQuc3R5bGUub3BhY2l0eSA9IFwiMVwiO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBIZWFkZXJBbmltYXRpb24ucHJvdG90eXBlLmRlZmF1bHRQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5oZWFkZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5oZWFkZXIuY2xhc3NMaXN0LnJlbW92ZShcImFuaW1hdGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmJyYW5kLnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgSGVhZGVyQW5pbWF0aW9uLnByb3RvdHlwZS5zY3JvbGxFdmVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAobmV3IFZpZXdwb3J0VXRpbF8xLlZpZXdwb3J0VXRpbCgpLldpbmRvd1RvcCg0MCkpIHtcclxuICAgICAgICAgICAgdGhpcy5seWluZ1Bvc2l0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRQb3NpdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBIZWFkZXJBbmltYXRpb24ucHJvdG90eXBlLnNldEFuaW1hdGlvbkRlbGF5ID0gZnVuY3Rpb24gKGFuaW1hdGlvbkNvbnRhaW5lcnMpIHtcclxuICAgICAgICB2YXIgYW5pbWF0aW9EZWxheSA9IHRoaXMuZG9tVXRpbC5nZXREYXRhQXR0cihcImFuaW1hdGlvbi1kZWxheVwiKTtcclxuICAgICAgICB2YXIgYWRkdHJhbnNpdGlvbmVkQ2xhc3MgPSBmdW5jdGlvbiAoZWxlbWVudHMpIHsgcmV0dXJuIGVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHsgZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwidHJhbnNpdGlvbmVkXCIpOyB9KTsgfTtcclxuICAgICAgICBpZiAoYW5pbWF0aW9EZWxheSA9PT0gMCB8fCBhbmltYXRpb0RlbGF5ID09PSBcIjBcIikge1xyXG4gICAgICAgICAgICBhZGR0cmFuc2l0aW9uZWRDbGFzcyhhbmltYXRpb25Db250YWluZXJzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWRkdHJhbnNpdGlvbmVkQ2xhc3MoYW5pbWF0aW9uQ29udGFpbmVycyk7XHJcbiAgICAgICAgICAgIH0sIGFuaW1hdGlvRGVsYXkpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gSGVhZGVyQW5pbWF0aW9uO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBIZWFkZXJBbmltYXRpb247XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUhlYWRlckFuaW1hdGlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgSHRtbExvYWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEh0bWxMb2FkZXIoZWxlbWVudCkge1xyXG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXRFbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgSHRtbExvYWRlci5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uICh1cmwsIG1ldGhvZCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gdm9pZCAwKSB7IG1ldGhvZCA9IFwiZ2V0XCI7IH1cclxuICAgICAgICBpZiAoIXRoaXMudGFyZ2V0RWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHRhcmdldCBlbGVtZW50XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgeG1sSHR0cFJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB4bWxIdHRwUmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdC5yZWFkeVN0YXRlID09IDQgJiYgeG1sSHR0cFJlcXVlc3Quc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMudGFyZ2V0RWxlbWVudC5pbm5lckhUTUwgPSB4bWxIdHRwUmVxdWVzdC5yZXNwb25zZVRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHhtbEh0dHBSZXF1ZXN0Lm9wZW4obWV0aG9kLCB1cmwsIHRydWUpO1xyXG4gICAgICAgIHhtbEh0dHBSZXF1ZXN0LnNlbmQoKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gSHRtbExvYWRlcjtcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gSHRtbExvYWRlcjtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SHRtbExvYWRlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgQXJyYXlVdGlsXzEgPSByZXF1aXJlKFwiLi9BcnJheVV0aWxcIik7XHJcbnZhciBCcm93c2VyVHlwZV8xID0gcmVxdWlyZShcIi4vQnJvd3NlclR5cGVcIik7XHJcbnZhciBEb21VdGlsXzEgPSByZXF1aXJlKFwiLi9Eb21VdGlsXCIpO1xyXG52YXIgVmlld3BvcnRVdGlsXzEgPSByZXF1aXJlKFwiLi9WaWV3cG9ydFV0aWxcIik7XHJcbnZhciBJbWFnZUxhenlMb2FkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBJbWFnZUxhenlMb2FkZXIoKSB7XHJcbiAgICAgICAgdGhpcy5icm93c2VyVHlwZSA9IG5ldyBCcm93c2VyVHlwZV8xLmRlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubGF6eUltYWdlcyA9IEFycmF5VXRpbF8xLmRlZmF1bHQuRnJvbU5vZGVMaXN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbWcubGF6eVwiKSk7XHJcbiAgICAgICAgaWYgKCFCb29sZWFuKHRoaXMubGF6eUltYWdlcykpIHtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhcIm5vIGxhenlsb2FkIGltYWdlcy4uLiBjb250aW51ZWluZ1wiKTtcclxuICAgICAgICAgICAgdGhpcy5sYXp5SW1hZ2VzID0gW107XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBJbWFnZUxhenlMb2FkZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5sYXp5bG9hZCgpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsT2JzZXJ2YWJsZSgpO1xyXG4gICAgfTtcclxuICAgIEltYWdlTGF6eUxvYWRlci5wcm90b3R5cGUuc2Nyb2xsTGF6eUxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5sYXp5bG9hZC5iaW5kKHRoaXMpLCB0cnVlKTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLmxhenlsb2FkLmJpbmQodGhpcyksIHRydWUpO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib3JpZW50YXRpb25jaGFuZ2VcIiwgdGhpcy5sYXp5bG9hZC5iaW5kKHRoaXMpLCB0cnVlKTtcclxuICAgIH07XHJcbiAgICBJbWFnZUxhenlMb2FkZXIucHJvdG90eXBlLnNjcm9sbE9ic2VydmFibGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLypcclxuICAgICAgICBpZiAoXCJJbnRlcnNlY3Rpb25PYnNlcnZlclwiIGluIHdpbmRvdykge1xyXG4gICAgICAgICAgICBjb25zdCBsYXp5T2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMsIG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZEltYWdlKGVudHJ5LnRhcmdldCBhcyBIVE1MSW1hZ2VFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF6eU9ic2VydmVyLnVub2JzZXJ2ZShlbnRyeS50YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5sYXp5SW1hZ2VzLmZvckVhY2goKGxhenlJbWFnZSkgPT4geyBsYXp5T2JzZXJ2ZXIub2JzZXJ2ZShsYXp5SW1hZ2UpOyB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbExhenlMb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICovXHJcbiAgICAgICAgdGhpcy5zY3JvbGxMYXp5TG9hZCgpO1xyXG4gICAgfTtcclxuICAgIEltYWdlTGF6eUxvYWRlci5wcm90b3R5cGUubG9hZEltYWdlID0gZnVuY3Rpb24gKGltYWdlKSB7XHJcbiAgICAgICAgdmFyIGltYWdlRG9tVXRpbCA9IG5ldyBEb21VdGlsXzEuZGVmYXVsdChpbWFnZSk7XHJcbiAgICAgICAgdmFyIHVybCA9IGltYWdlRG9tVXRpbC5nZXREYXRhQXR0cihcInNyY1wiKTtcclxuICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmdldEV4dGVuc2lvbih1cmwpICE9PSBcInN2Z1wiKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJyb3dzZXJUeXBlLmlzQ2hyb21lKCkgfHwgdGhpcy5icm93c2VyVHlwZS5pc09wZXJhKCkpIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IHRoaXMucmVwbGFjZUV4dGVuc2lvbih1cmwsIFwid2VicFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmJyb3dzZXJUeXBlLmlzU2FmYXJpKCkpIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IHRoaXMucmVwbGFjZUV4dGVuc2lvbih1cmwsIFwianAyXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuYnJvd3NlclR5cGUuaXNFZGdlKCkgfHwgdGhpcy5icm93c2VyVHlwZS5pc0lFKCkpIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IHRoaXMucmVwbGFjZUV4dGVuc2lvbih1cmwsIFwianhyXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuYnJvd3NlclR5cGUuaXNGaXJlZm94KCkgJiYgdGhpcy5icm93c2VyVHlwZS5tYWpvclZlcnNpb24gPj0gNjUpIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IHRoaXMucmVwbGFjZUV4dGVuc2lvbih1cmwsIFwid2VicFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpbWFnZURvbVV0aWwuc2V0QXR0cihcInNyY1wiLCB1cmwpO1xyXG4gICAgICAgIGltYWdlRG9tVXRpbC5yZW1vdmVEYXRhQXR0cihcInNyY1wiKTtcclxuICAgICAgICBpZiAoaW1hZ2VEb21VdGlsLmhhc0NsYXNzKFwibGF6eVwiKSkge1xyXG4gICAgICAgICAgICBpbWFnZURvbVV0aWwucmVtb3ZlQ2xhc3MoXCJsYXp5XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbWFnZURvbVV0aWwuYXBwZW5kQ2xhc3MoXCJpbWFnZS0tbG9hZGVkXCIpO1xyXG4gICAgICAgIHZhciBpbWFnZUluZGV4ID0gdGhpcy5sYXp5SW1hZ2VzLmZpbmRJbmRleChmdW5jdGlvbiAoaW1nKSB7IHJldHVybiBpbWcgPT09IGltYWdlOyB9KTtcclxuICAgICAgICB0aGlzLmxhenlJbWFnZXMuc3BsaWNlKGltYWdlSW5kZXgsIDEpO1xyXG4gICAgfTtcclxuICAgIEltYWdlTGF6eUxvYWRlci5wcm90b3R5cGUubGF6eWxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxhenlJbWFnZXMpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5sYXp5SW1hZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHZhciBsYXp5SW1hZ2UgPSB0aGlzLmxhenlJbWFnZXNbaV07XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdmFyIGltYWdlVmlld1BvcnQgPSBuZXcgVmlld3BvcnRVdGlsXzEuVmlld3BvcnRVdGlsKGxhenlJbWFnZSk7XHJcbiAgICAgICAgICAgIGlmIChpbWFnZVZpZXdQb3J0LklzT2Zmc2V0VmlzaWJsZSgzMDApKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRJbWFnZShsYXp5SW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGF6eUltYWdlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLmxhenlsb2FkLmJpbmQodGhpcyksIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMubGF6eWxvYWQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCB0aGlzLmxhenlsb2FkLmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgSW1hZ2VMYXp5TG9hZGVyLnByb3RvdHlwZS5nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAoc3JjKSB7XHJcbiAgICAgICAgcmV0dXJuIHNyYy5zcGxpdChcIi5cIikucG9wKCk7XHJcbiAgICB9O1xyXG4gICAgSW1hZ2VMYXp5TG9hZGVyLnByb3RvdHlwZS5yZXBsYWNlRXh0ZW5zaW9uID0gZnVuY3Rpb24gKHNyYywgcmVwbGFjZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gc3JjLnN1YnN0cigwLCBzcmMubGFzdEluZGV4T2YoXCIuXCIpKSArIFwiLlwiICsgcmVwbGFjZW1lbnQ7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEltYWdlTGF6eUxvYWRlcjtcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gSW1hZ2VMYXp5TG9hZGVyO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1JbWFnZUxhenlMb2FkZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIE1ha2VSZXF1ZXN0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gTWFrZVJlcXVlc3QodXJsLCBtZXRob2QsIGhlYWRlcnMpIHtcclxuICAgICAgICBpZiAobWV0aG9kID09PSB2b2lkIDApIHsgbWV0aG9kID0gJ2dldCc7IH1cclxuICAgICAgICBpZiAoaGVhZGVycyA9PT0gdm9pZCAwKSB7IGhlYWRlcnMgPSB7fTsgfVxyXG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XHJcbiAgICB9XHJcbiAgICBNYWtlUmVxdWVzdC5wcm90b3R5cGUuc2V0SGVhZGVycyA9IGZ1bmN0aW9uIChodHRwUmVxdWVzdCkge1xyXG4gICAgICAgIGZvciAodmFyIGhlYWRlciBpbiB0aGlzLmhlYWRlcnMpIHtcclxuICAgICAgICAgICAgaHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIsIHRoaXMuaGVhZGVyc1toZWFkZXJdKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgTWFrZVJlcXVlc3QucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKGRhdGEgPT09IHZvaWQgMCkgeyBkYXRhID0gbnVsbDsgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIHZhciB4bWxIdHRwUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC5vcGVuKF90aGlzLm1ldGhvZCwgX3RoaXMudXJsKTtcclxuICAgICAgICAgICAgX3RoaXMuc2V0SGVhZGVycyh4bWxIdHRwUmVxdWVzdCk7XHJcbiAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdC5zdGF0dXMgPj0gMjAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3Quc3RhdHVzIDwgMzAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh4bWxIdHRwUmVxdWVzdC5yZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHhtbEh0dHBSZXF1ZXN0LnN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dDogeG1sSHR0cFJlcXVlc3Quc3RhdHVzVGV4dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogeG1sSHR0cFJlcXVlc3QucmVzcG9uc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogeG1sSHR0cFJlcXVlc3Quc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQ6IHhtbEh0dHBSZXF1ZXN0LnN0YXR1c1RleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogeG1sSHR0cFJlcXVlc3QucmVzcG9uc2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3Quc2VuZChkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gTWFrZVJlcXVlc3Q7XHJcbn0oKSk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IE1ha2VSZXF1ZXN0O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1NYWtlUmVxdWVzdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgQXJyYXlVdGlsXzEgPSByZXF1aXJlKFwiLi9BcnJheVV0aWxcIik7XHJcbnZhciBEb21VdGlsXzEgPSByZXF1aXJlKFwiLi9Eb21VdGlsXCIpO1xyXG52YXIgTW9kYWxVdGlsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gTW9kYWxVdGlsKCkge1xyXG4gICAgfVxyXG4gICAgTW9kYWxVdGlsLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5FbGVtZW50cyA9IEFycmF5VXRpbF8xLmRlZmF1bHQuRnJvbU5vZGVMaXN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIubW9kYWxcIikpO1xyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKS5vbmNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQuaGFzQXR0cmlidXRlKFwiZGF0YS10b2dnbGVcIikgJiYgdGFyZ2V0LmdldEF0dHJpYnV0ZShcImRhdGEtdG9nZ2xlXCIpID09PSBcIm1vZGFsXCIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBkb21VdGlsID0gbmV3IERvbVV0aWxfMS5kZWZhdWx0KHRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0U2VsZWN0b3IgPSBkb21VdGlsLmdldERhdGFBdHRyKFwidGFyZ2V0XCIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldE1vZGFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXRTZWxlY3Rvcik7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy50b2dnbGVNb2RhbCh0YXJnZXRNb2RhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuTW9kYWxzID0gdGhpcy5FbGVtZW50cy5tYXAoZnVuY3Rpb24gKG1vZGFsKSB7IHJldHVybiBuZXcgTW9kYWwobW9kYWwpOyB9KTtcclxuICAgIH07XHJcbiAgICBNb2RhbFV0aWwucHJvdG90eXBlLnRvZ2dsZU1vZGFsID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgbW9kYWwgPSBuZXcgTW9kYWwoZWxlbWVudCk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gXCJibG9ja1wiKSB7XHJcbiAgICAgICAgICAgIG1vZGFsLmhpZGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1vZGFsLnNob3coKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIE1vZGFsVXRpbDtcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gTW9kYWxVdGlsO1xyXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1jbGFzc2VzLXBlci1maWxlXHJcbnZhciBNb2RhbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIE1vZGFsKGVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLk1vZGFsID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLmJpbmRDbGljaygpO1xyXG4gICAgICAgIHRoaXMuYmluZENsb3NlKCk7XHJcbiAgICAgICAgdGhpcy5iaW5kU3VibWl0KCk7XHJcbiAgICAgICAgdGhpcy5iaW5kRXNjYXBlKCk7XHJcbiAgICAgICAgdGhpcy5iYWNrRHJvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgdGhpcy5iYWNrRHJvcC5jbGFzc0xpc3QuYWRkKFwibW9kYWwtYmFja2Ryb3BcIiwgXCJmYWRlXCIsIFwic2hvd1wiKTtcclxuICAgICAgICB0aGlzLm9uaGlkZSA9IG5ldyBFdmVudCgnaGlkZScpO1xyXG4gICAgfVxyXG4gICAgTW9kYWwucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5Nb2RhbC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG4gICAgICAgIHRoaXMuTW9kYWwuY2xhc3NMaXN0LmFkZChcInNob3dcIik7XHJcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZCh0aGlzLmJhY2tEcm9wKTtcclxuICAgIH07XHJcbiAgICBNb2RhbC5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLk1vZGFsLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICB0aGlzLk1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoXCJzaG93XCIpO1xyXG4gICAgICAgIHRoaXMuTW9kYWwuZGlzcGF0Y2hFdmVudCh0aGlzLm9uaGlkZSk7XHJcbiAgICAgICAgdmFyIGJhY2tkcm9wID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5tb2RhbC1iYWNrZHJvcC5mYWRlLnNob3dcIik7XHJcbiAgICAgICAgaWYgKGJhY2tkcm9wKSB7XHJcbiAgICAgICAgICAgIGJhY2tkcm9wLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBNb2RhbC5wcm90b3R5cGUuYmluZENsaWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5Nb2RhbC5vbmNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQgIT09IF90aGlzLk1vZGFsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZXcgTW9kYWwoX3RoaXMuTW9kYWwpLmhpZGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgTW9kYWwucHJvdG90eXBlLmJpbmRDbG9zZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBkaXNtaXNzID0gQXJyYXlVdGlsXzEuZGVmYXVsdC5Gcm9tTm9kZUxpc3QodGhpcy5Nb2RhbC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtZGlzbWlzc11cIikpO1xyXG4gICAgICAgIGRpc21pc3MuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICBlbGVtZW50Lm9uY2xpY2sgPSBfdGhpcy5oaWRlLmJpbmQoX3RoaXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIE1vZGFsLnByb3RvdHlwZS5iaW5kU3VibWl0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHN1Ym1pdCA9IEFycmF5VXRpbF8xLmRlZmF1bHQuRnJvbU5vZGVMaXN0KHRoaXMuTW9kYWwucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLXN1Ym1pdF1cIikpO1xyXG4gICAgICAgIHN1Ym1pdC5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHZhciBkb21VdGlsID0gbmV3IERvbVV0aWxfMS5kZWZhdWx0KGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBkb21VdGlsLmdldERhdGFBdHRyKFwic3VibWl0LXZhbHVlXCIpO1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0U2VsZWN0b3IgPSBkb21VdGlsLmdldERhdGFBdHRyKFwic3VibWl0XCIpO1xyXG4gICAgICAgICAgICBlbGVtZW50Lm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldFNlbGVjdG9yKS5zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBvc2l0aW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25JbnB1dC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIE1vZGFsLnByb3RvdHlwZS5iaW5kRXNjYXBlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgZG9jdW1lbnQub25rZXlkb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmhpZGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIE1vZGFsO1xyXG59KCkpO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1Nb2RhbFV0aWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIERvbVV0aWxfMSA9IHJlcXVpcmUoXCIuL0RvbVV0aWxcIik7XHJcbnZhciBWaWV3cG9ydFV0aWxfMSA9IHJlcXVpcmUoXCIuL1ZpZXdwb3J0VXRpbFwiKTtcclxudmFyIE5hdkJhclNjcm9sbGVkID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gTmF2QmFyU2Nyb2xsZWQoKSB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxlZENsYXNzID0gXCJzY3JvbGxlZFwiO1xyXG4gICAgICAgIHRoaXMubmF2QmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm5hdlwiKTtcclxuICAgICAgICB0aGlzLmRvbVV0aWwgPSBuZXcgRG9tVXRpbF8xLmRlZmF1bHQodGhpcy5uYXZCYXIpO1xyXG4gICAgfVxyXG4gICAgTmF2QmFyU2Nyb2xsZWQucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLnNjcm9sbEV2ZW50LmJpbmQodGhpcyksIHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsRXZlbnQoKTtcclxuICAgIH07XHJcbiAgICBOYXZCYXJTY3JvbGxlZC5wcm90b3R5cGUuc2Nyb2xsRXZlbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKG5ldyBWaWV3cG9ydFV0aWxfMS5WaWV3cG9ydFV0aWwoKS5XaW5kb3dUb3AoNDApKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9tVXRpbC5hcHBlbmRDbGFzcyh0aGlzLnNjcm9sbGVkQ2xhc3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMuc2Nyb2xsZWRDbGFzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBOYXZCYXJTY3JvbGxlZDtcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gTmF2QmFyU2Nyb2xsZWQ7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5hdkJhclNjcm9sbGVkLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciB0aHJvdHRsZV8xID0gcmVxdWlyZShcIi4vdGhyb3R0bGVcIik7XHJcbnZhciBEb21VdGlsXzEgPSByZXF1aXJlKFwiLi9Eb21VdGlsXCIpO1xyXG52YXIgTmF2QmFyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gTmF2QmFyKCkge1xyXG4gICAgICAgIHZhciBtYWluTmF2TGlua3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwibmF2IHVsIGxpIGFcIik7XHJcbiAgICAgICAgdmFyIG1haW5TZWN0aW9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJtYWluIHNlY3Rpb25cIik7XHJcbiAgICAgICAgdGhpcy50b2dnbGVyQnV0dG9uID0gbmV3IERvbVV0aWxfMS5kZWZhdWx0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJuYXYgYnV0dG9uLm5hdmJhci10b2dnbGVyXCIpKTtcclxuICAgICAgICB0aGlzLm1haW5OYXZMaW5rcyA9IFtdLnNsaWNlXHJcbiAgICAgICAgICAgIC5jYWxsKG1haW5OYXZMaW5rcyk7XHJcbiAgICAgICAgdGhpcy5tYWluU2VjdGlvbnMgPSBbXS5zbGljZVxyXG4gICAgICAgICAgICAuY2FsbChtYWluU2VjdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgTmF2QmFyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRocm90dGxlXzEudGhyb3R0bGUoX3RoaXMuc2Nyb2xsRXZlbnQsIDEwMCkuYmluZChfdGhpcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy50b2dnbGVyQnV0dG9uLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihfdGhpcy50b2dnbGVyQnV0dG9uLmdldERhdGFBdHRyKFwidGFyZ2V0XCIpKS5jbGFzc0xpc3QudG9nZ2xlKFwiY29sbGFwc2VcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgTmF2QmFyLnByb3RvdHlwZS5zY3JvbGxFdmVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZnJvbVRvcCA9IHdpbmRvdy5zY3JvbGxZO1xyXG4gICAgICAgIHRoaXMubWFpbk5hdkxpbmtzLmZvckVhY2goZnVuY3Rpb24gKGxpbmspIHtcclxuICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxpbmsuaHJlZik7XHJcbiAgICAgICAgICAgIGlmIChzZWN0aW9uLm9mZnNldFRvcCA8PSBmcm9tVG9wICYmXHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uLm9mZnNldFRvcCArIHNlY3Rpb24ub2Zmc2V0SGVpZ2h0ID4gZnJvbVRvcCkge1xyXG4gICAgICAgICAgICAgICAgbGluay5jbGFzc0xpc3QuYWRkKFwiY3VycmVudFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxpbmsuY2xhc3NMaXN0LnJlbW92ZShcImN1cnJlbnRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gTmF2QmFyO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBOYXZCYXI7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5hdmJhci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgT3ZlcmxheXMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBPdmVybGF5cygpIHtcclxuICAgIH1cclxuICAgIE92ZXJsYXlzLlNwaW5uZXIgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgdmFyIGVsZW0gPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XHJcbiAgICAgICAgZWxlbS5pbm5lckhUTUwgPSBcIjxpIGNsYXNzPSdmYXMgZmEtc3Bpbm5lcic+PC9pPlwiO1xyXG4gICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChcInNwaW5uZXJcIik7XHJcbiAgICAgICAgdGFyZ2V0LmFwcGVuZENoaWxkKGVsZW0pO1xyXG4gICAgICAgIHJldHVybiBlbGVtO1xyXG4gICAgfTtcclxuICAgIE92ZXJsYXlzLkNoZWNrTWFyayA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICB2YXIgZWxlbSA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcclxuICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoXCJzcGlubmVyXCIpO1xyXG4gICAgICAgIGVsZW0uaW5uZXJIVE1MID0gXCI8aSBjbGFzcz0nZmFzIGZhLWNoZWNrJz48L2k+XCI7XHJcbiAgICAgICAgdGFyZ2V0LmFwcGVuZENoaWxkKGVsZW0pO1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBlbGVtLnJlbW92ZSgpO1xyXG4gICAgICAgIH0sIHRoaXMub3ZlcmxheVRpbWUpO1xyXG4gICAgfTtcclxuICAgIE92ZXJsYXlzLkNyb3NzTWFyayA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICB2YXIgZWxlbSA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcclxuICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoXCJzcGlubmVyXCIpO1xyXG4gICAgICAgIGVsZW0uaW5uZXJIVE1MID0gXCI8aSBjbGFzcz0nZmEgZmEtdGltZXMnIGFyaWEtaGlkZGVuPSd0cnVlJz48L2k+XCI7XHJcbiAgICAgICAgdGFyZ2V0LmFwcGVuZENoaWxkKGVsZW0pO1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBlbGVtLnJlbW92ZSgpO1xyXG4gICAgICAgIH0sIHRoaXMub3ZlcmxheVRpbWUpO1xyXG4gICAgfTtcclxuICAgIE92ZXJsYXlzLm92ZXJsYXlUaW1lID0gMzAwMDtcclxuICAgIHJldHVybiBPdmVybGF5cztcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gT3ZlcmxheXM7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU92ZXJsYXlzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBEb21VdGlsXzEgPSByZXF1aXJlKFwiLi9Eb21VdGlsXCIpO1xyXG52YXIgSHRtbExvYWRlcl8xID0gcmVxdWlyZShcIi4vSHRtbExvYWRlclwiKTtcclxudmFyIFJlcGxhY2VPbkNsaWNrID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUmVwbGFjZU9uQ2xpY2soc2VsZWN0b3IpIHtcclxuICAgICAgICBpZiAoc2VsZWN0b3IgPT09IHZvaWQgMCkgeyBzZWxlY3RvciA9ICcuY29udGVudC1yZXBsYWNlJzsgfVxyXG4gICAgICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xyXG4gICAgICAgIGlmIChlbGVtZW50cykge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzID0gW10uc2xpY2VcclxuICAgICAgICAgICAgICAgIC5jYWxsKGVsZW1lbnRzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBSZXBsYWNlT25DbGljay5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnRzLmZvckVhY2godGhpcy5yZXBsYWNlKTtcclxuICAgIH07XHJcbiAgICBSZXBsYWNlT25DbGljay5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnRVdGlsID0gbmV3IERvbVV0aWxfMS5kZWZhdWx0KGVsZW1lbnQpO1xyXG4gICAgICAgIHZhciB0YXJnZXRVcmwgPSBlbGVtZW50VXRpbC5nZXREYXRhQXR0cigndXJsJyk7XHJcbiAgICAgICAgaWYgKCF0YXJnZXRVcmwpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB2YXIgdGFyZ2V0U2VsZWN0b3IgPSBlbGVtZW50VXRpbC5nZXREYXRhQXR0cigndGFyZ2V0Jyk7XHJcbiAgICAgICAgaWYgKCF0YXJnZXRTZWxlY3RvcilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldFNlbGVjdG9yKTtcclxuICAgICAgICBpZiAoIXRhcmdldClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHsgcmV0dXJuIG5ldyBIdG1sTG9hZGVyXzEuZGVmYXVsdCh0YXJnZXQpLmxvYWQodGFyZ2V0VXJsKTsgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFJlcGxhY2VPbkNsaWNrO1xyXG59KCkpO1xyXG5leHBvcnRzLlJlcGxhY2VPbkNsaWNrID0gUmVwbGFjZU9uQ2xpY2s7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlcGxhY2VPbkNsaWNrLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBTY3JpcHRMb2FkZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBTY3JpcHRMb2FkZXIoc2NyaXB0LCBjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuc2NyaXB0ID0gc2NyaXB0O1xyXG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcclxuICAgIH1cclxuICAgIFNjcmlwdExvYWRlci5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBBZGRpbmcgdDxoZSBzY3JpcHQgdGFnIHRvIHRoZSBoZWFkIGFzIHN1Z2dlc3RlZCBiZWZvcmVcclxuICAgICAgICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQ7XHJcbiAgICAgICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XHJcbiAgICAgICAgc2NyaXB0LnR5cGUgPSBcInRleHQvamF2YXNjcmlwdFwiO1xyXG4gICAgICAgIHNjcmlwdC5zcmMgPSB0aGlzLnNjcmlwdDtcclxuICAgICAgICAvLyBUaGVuIGJpbmQgdGhlIGV2ZW50IHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cclxuICAgICAgICAvLyBUaGVyZSBhcmUgc2V2ZXJhbCBldmVudHMgZm9yIGNyb3NzIGJyb3dzZXIgY29tcGF0aWJpbGl0eS5cclxuICAgICAgICBzY3JpcHQub25sb2FkID0gdGhpcy5jYWxsYmFjaygpO1xyXG4gICAgICAgIC8vIEZpcmUgdGhlIGxvYWRpbmdcclxuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFNjcmlwdExvYWRlcjtcclxufSgpKTtcclxuZXhwb3J0cy5TY3JpcHRMb2FkZXIgPSBTY3JpcHRMb2FkZXI7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNjcmlwdExvYWRlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgU2Nyb2xsUG9zaXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBTY3JvbGxQb3NpdGlvbihlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IHZvaWQgMCkgeyBlbGVtZW50ID0gd2luZG93OyB9XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgIH1cclxuICAgIFNjcm9sbFBvc2l0aW9uLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudCBpbnN0YW5jZW9mIFdpbmRvdykge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgeDogdGhpcy5lbGVtZW50LnBhZ2VYT2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgeTogdGhpcy5lbGVtZW50LnBhZ2VZT2Zmc2V0XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHg6IHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0LFxyXG4gICAgICAgICAgICB5OiB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wXHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gU2Nyb2xsUG9zaXRpb247XHJcbn0oKSk7XHJcbmV4cG9ydHMuU2Nyb2xsUG9zaXRpb24gPSBTY3JvbGxQb3NpdGlvbjtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2Nyb2xsUG9zaXRpb24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIFN0cmluZ1V0aWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBTdHJpbmdVdGlsKCkge1xyXG4gICAgfVxyXG4gICAgU3RyaW5nVXRpbC5TdHJpbmdGb3JtYXQgPSBmdW5jdGlvbiAoc3RyKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL3soXFxkKyl9L2csIGZ1bmN0aW9uIChtYXRjaCwgaW5kZXgpIHsgcmV0dXJuIGFyZ3NbaW5kZXhdIHx8ICcnOyB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gU3RyaW5nVXRpbDtcclxufSgpKTtcclxuZXhwb3J0cy5TdHJpbmdVdGlsID0gU3RyaW5nVXRpbDtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3RyaW5nVXRpbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgVXJsSGVscGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVXJsSGVscGVyKCkge1xyXG4gICAgfVxyXG4gICAgVXJsSGVscGVyLmdlbmVyYXRlTmV3ID0gZnVuY3Rpb24gKHBhcmFtcykge1xyXG4gICAgICAgIHZhciBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkgJiYgcGFyYW1zW2tleV0pIHtcclxuICAgICAgICAgICAgICAgIHNlYXJjaFBhcmFtcy5zZXQoa2V5LCBwYXJhbXNba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlYXJjaFBhcmFtcy50b1N0cmluZygpO1xyXG4gICAgfTtcclxuICAgIFVybEhlbHBlci5wcm90b3R5cGUuc2V0QW5kUmVkaXJlY3QgPSBmdW5jdGlvbiAocGFyYW1zKSB7XHJcbiAgICAgICAgdmFyIHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgIHNlYXJjaFBhcmFtcy5zZXQoa2V5LCBwYXJhbXNba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnNlYXJjaCA9IHNlYXJjaFBhcmFtcy50b1N0cmluZygpO1xyXG4gICAgfTtcclxuICAgIFVybEhlbHBlci5wcm90b3R5cGUuY29tcG9zZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcclxuICAgICAgICB2YXIgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgc2VhcmNoUGFyYW1zLnNldChrZXksIHBhcmFtc1trZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2VhcmNoUGFyYW1zLnRvU3RyaW5nKCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcjtcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gVXJsSGVscGVyO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1VUkxIZWxwZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIFVybFV0aWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBVcmxVdGlsKCkge1xyXG4gICAgICAgIHRoaXMucXVlcnlWYWx1ZSA9IGZ1bmN0aW9uIChmaWVsZCwgdXJsKSB7XHJcbiAgICAgICAgICAgIHZhciBocmVmID0gdXJsID8gdXJsIDogd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKCdbPyZdJyArIGZpZWxkICsgJz0oW14mI10qKScsICdpJyk7XHJcbiAgICAgICAgICAgIHZhciBzdHJpbmcgPSByZWcuZXhlYyhocmVmKTtcclxuICAgICAgICAgICAgcmV0dXJuIHN0cmluZyA/IHN0cmluZ1sxXS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuY3VycmVudFVSTCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmOyB9O1xyXG4gICAgICAgIHRoaXMuZ2V0VVJMUGFyYW1ldGVycyA9IGZ1bmN0aW9uICh1cmwpIHtcclxuICAgICAgICAgICAgcmV0dXJuICh1cmwubWF0Y2goLyhbXj89Jl0rKSg9KFteJl0qKSkvZykgfHwgW10pLnJlZHVjZShmdW5jdGlvbiAoYSwgdikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICgoYVt2LnNsaWNlKDAsIHYuaW5kZXhPZihcIj1cIikpXSA9IHYuc2xpY2Uodi5pbmRleE9mKFwiPVwiKSArIDEpKSwgYSk7XHJcbiAgICAgICAgICAgIH0sIHt9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucmVkaXJlY3QgPSBmdW5jdGlvbiAodXJsLCBhc0xpbmspIHtcclxuICAgICAgICAgICAgaWYgKGFzTGluayA9PT0gdm9pZCAwKSB7IGFzTGluayA9IHRydWU7IH1cclxuICAgICAgICAgICAgcmV0dXJuIGFzTGluayA/ICh3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybCkgOiB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh1cmwpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gd2luZG93LmxvY2F0aW9uLm9yaWdpbjsgfTtcclxuICAgICAgICB0aGlzLmhvc3QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3cubG9jYXRpb24uaG9zdDsgfTtcclxuICAgICAgICB0aGlzLnBhdGhBcnJheSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zcGxpdCgnLycpOyB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFVybFV0aWw7XHJcbn0oKSk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IFVybFV0aWw7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVybFV0aWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIFZpZXdwb3J0VXRpbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFZpZXdwb3J0VXRpbChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IHZvaWQgMCkgeyBlbGVtZW50ID0gbnVsbDsgfVxyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICBWaWV3cG9ydFV0aWwucHJvdG90eXBlLklzVmlzaWJsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIHJldHVybiAoKChib3VuZHMudG9wID4gMCAmJiBib3VuZHMudG9wIDwgaW5uZXJIZWlnaHQpIHx8XHJcbiAgICAgICAgICAgIChib3VuZHMuYm90dG9tID4gMCAmJiBib3VuZHMuYm90dG9tIDwgaW5uZXJIZWlnaHQpKSAmJlxyXG4gICAgICAgICAgICAoKGJvdW5kcy5sZWZ0ID4gMCAmJiBib3VuZHMubGVmdCA8IGlubmVyV2lkdGgpIHx8XHJcbiAgICAgICAgICAgICAgICAoYm91bmRzLnJpZ2h0ID4gMCAmJiBib3VuZHMucmlnaHQgPCBpbm5lcldpZHRoKSkpO1xyXG4gICAgfTtcclxuICAgIFZpZXdwb3J0VXRpbC5wcm90b3R5cGUuSXNQYXJ0aWFsbHlWaXNpYmxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgcmV0dXJuIChib3VuZHMudG9wID49IDAgfHxcclxuICAgICAgICAgICAgYm91bmRzLmxlZnQgPj0gMCB8fFxyXG4gICAgICAgICAgICBib3VuZHMuYm90dG9tIDw9IGlubmVySGVpZ2h0IHx8XHJcbiAgICAgICAgICAgIGJvdW5kcy5yaWdodCA8PSBpbm5lcldpZHRoKTtcclxuICAgIH07XHJcbiAgICBWaWV3cG9ydFV0aWwucHJvdG90eXBlLklzT2Zmc2V0VmlzaWJsZSA9IGZ1bmN0aW9uIChvZmZzZXQpIHtcclxuICAgICAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsgb2Zmc2V0ID0gMzAwOyB9XHJcbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gICAgICAgIHJldHVybiAoYm91bmRzLnRvcCArIG9mZnNldCA+PSAwIHx8XHJcbiAgICAgICAgICAgIGJvdW5kcy5sZWZ0ICsgb2Zmc2V0ID49IDAgfHxcclxuICAgICAgICAgICAgYm91bmRzLmJvdHRvbSAtIG9mZnNldCA8PSBpbm5lckhlaWdodCB8fFxyXG4gICAgICAgICAgICBib3VuZHMucmlnaHQgLSBvZmZzZXQgPD0gaW5uZXJXaWR0aCk7XHJcbiAgICB9O1xyXG4gICAgVmlld3BvcnRVdGlsLnByb3RvdHlwZS5XaW5kb3dUb3AgPSBmdW5jdGlvbiAob2Zmc2V0KSB7XHJcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdm9pZCAwKSB7IG9mZnNldCA9IDA7IH1cclxuICAgICAgICB2YXIgWU9mZnNldCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fFxyXG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wIHx8XHJcbiAgICAgICAgICAgIDA7XHJcbiAgICAgICAgcmV0dXJuIG9mZnNldCA8PSBZT2Zmc2V0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBWaWV3cG9ydFV0aWw7XHJcbn0oKSk7XHJcbmV4cG9ydHMuVmlld3BvcnRVdGlsID0gVmlld3BvcnRVdGlsO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1WaWV3cG9ydFV0aWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBfX3NwcmVhZEFycmF5cyA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheXMpIHx8IGZ1bmN0aW9uICgpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59O1xyXG52YXIgX3RoaXMgPSB0aGlzO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBkZWJvdW5jZSA9IGZ1bmN0aW9uIChmbiwgbXMsIGltbWVkaWF0ZSkge1xyXG4gICAgaWYgKG1zID09PSB2b2lkIDApIHsgbXMgPSAwOyB9XHJcbiAgICBpZiAoaW1tZWRpYXRlID09PSB2b2lkIDApIHsgaW1tZWRpYXRlID0gZmFsc2U7IH1cclxuICAgIHZhciB0aW1lb3V0O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGltZW91dCA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBmbi5hcHBseShfdGhpcywgYXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCBtcyk7XHJcbiAgICAgICAgaWYgKGltbWVkaWF0ZSAmJiAhdGltZW91dCkge1xyXG4gICAgICAgICAgICBmbi5hcHBseShfdGhpcywgX19zcHJlYWRBcnJheXMoYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn07XHJcbmV4cG9ydHMuZGVib3VuY2UgPSBkZWJvdW5jZTtcclxudmFyIHRocm90dGxlID0gZnVuY3Rpb24gKGZ1bmMsIG1zKSB7XHJcbiAgICB2YXIgbGFzdEZ1bmM7XHJcbiAgICB2YXIgbGFzdFJhbjtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xyXG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xyXG4gICAgICAgIGlmICghbGFzdFJhbikge1xyXG4gICAgICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xyXG4gICAgICAgICAgICBsYXN0UmFuID0gRGF0ZS5ub3coKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChsYXN0RnVuYyk7XHJcbiAgICAgICAgICAgIGxhc3RGdW5jID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKERhdGUubm93KCkgLSBsYXN0UmFuKSA+PSBtcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdFJhbiA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIG1zIC0gKERhdGUubm93KCkgLSBsYXN0UmFuKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufTtcclxuZXhwb3J0cy50aHJvdHRsZSA9IHRocm90dGxlO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHJvdHRsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgQW5hbHl0aWNzQ2xpY2tFdmVudHNfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9BbmFseXRpY3NDbGlja0V2ZW50c1wiKTtcclxuZXhwb3J0cy5BbmFseXRpY3NDbGlja0V2ZW50cyA9IEFuYWx5dGljc0NsaWNrRXZlbnRzXzEuZGVmYXVsdDtcclxudmFyIEFycmF5VXRpbF8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL0FycmF5VXRpbFwiKTtcclxuZXhwb3J0cy5BcnJheVV0aWwgPSBBcnJheVV0aWxfMS5kZWZhdWx0O1xyXG52YXIgQmFja2dyb3VuZExhenlMb2FkZXJfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9CYWNrZ3JvdW5kTGF6eUxvYWRlclwiKTtcclxuZXhwb3J0cy5CYWNrZ3JvdW5kTGF6eUxvYWRlciA9IEJhY2tncm91bmRMYXp5TG9hZGVyXzEuZGVmYXVsdDtcclxudmFyIEJyb3dzZXJUeXBlXzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvQnJvd3NlclR5cGVcIik7XHJcbmV4cG9ydHMuQnJvd3NlclR5cGUgPSBCcm93c2VyVHlwZV8xLmRlZmF1bHQ7XHJcbnZhciBWaWV3cG9ydFV0aWxfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9WaWV3cG9ydFV0aWxcIik7XHJcbmV4cG9ydHMuVmlld3BvcnRVdGlsID0gVmlld3BvcnRVdGlsXzEuVmlld3BvcnRVdGlsO1xyXG52YXIgVXJsVXRpbF8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL1VybFV0aWxcIik7XHJcbmV4cG9ydHMuVXJsVXRpbCA9IFVybFV0aWxfMS5kZWZhdWx0O1xyXG52YXIgdGhyb3R0bGVfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy90aHJvdHRsZVwiKTtcclxuZXhwb3J0cy50aHJvdHRsZSA9IHRocm90dGxlXzEudGhyb3R0bGU7XHJcbmV4cG9ydHMuZGVib3VuY2UgPSB0aHJvdHRsZV8xLmRlYm91bmNlO1xyXG52YXIgU3RyaW5nVXRpbF8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL1N0cmluZ1V0aWxcIik7XHJcbmV4cG9ydHMuU3RyaW5nVXRpbCA9IFN0cmluZ1V0aWxfMS5TdHJpbmdVdGlsO1xyXG52YXIgU2Nyb2xsUG9zaXRpb25fMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9TY3JvbGxQb3NpdGlvblwiKTtcclxuZXhwb3J0cy5TY3JvbGxQb3NpdGlvbiA9IFNjcm9sbFBvc2l0aW9uXzEuU2Nyb2xsUG9zaXRpb247XHJcbnZhciBTY3JpcHRMb2FkZXJfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9TY3JpcHRMb2FkZXJcIik7XHJcbmV4cG9ydHMuU2NyaXB0TG9hZGVyID0gU2NyaXB0TG9hZGVyXzEuU2NyaXB0TG9hZGVyO1xyXG52YXIgUmVwbGFjZU9uQ2xpY2tfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9SZXBsYWNlT25DbGlja1wiKTtcclxuZXhwb3J0cy5SZXBsYWNlT25DbGljayA9IFJlcGxhY2VPbkNsaWNrXzEuUmVwbGFjZU9uQ2xpY2s7XHJcbnZhciBPdmVybGF5c18xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL092ZXJsYXlzXCIpO1xyXG5leHBvcnRzLk92ZXJsYXlzID0gT3ZlcmxheXNfMS5kZWZhdWx0O1xyXG52YXIgTmF2QmFyU2Nyb2xsZWRfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9OYXZCYXJTY3JvbGxlZFwiKTtcclxuZXhwb3J0cy5OYXZCYXJTY3JvbGxlZCA9IE5hdkJhclNjcm9sbGVkXzEuZGVmYXVsdDtcclxudmFyIE5hdmJhcl8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL05hdmJhclwiKTtcclxuZXhwb3J0cy5OYXZCYXIgPSBOYXZiYXJfMS5kZWZhdWx0O1xyXG52YXIgTW9kYWxVdGlsXzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvTW9kYWxVdGlsXCIpO1xyXG5leHBvcnRzLk1vZGFsVXRpbCA9IE1vZGFsVXRpbF8xLmRlZmF1bHQ7XHJcbnZhciBNYWtlUmVxdWVzdF8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL01ha2VSZXF1ZXN0XCIpO1xyXG5leHBvcnRzLk1ha2VSZXF1ZXN0ID0gTWFrZVJlcXVlc3RfMS5kZWZhdWx0O1xyXG52YXIgSW1hZ2VMYXp5TG9hZGVyXzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvSW1hZ2VMYXp5TG9hZGVyXCIpO1xyXG5leHBvcnRzLkltYWdlTGF6eUxvYWRlciA9IEltYWdlTGF6eUxvYWRlcl8xLmRlZmF1bHQ7XHJcbnZhciBIdG1sTG9hZGVyXzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvSHRtbExvYWRlclwiKTtcclxuZXhwb3J0cy5IdG1sTG9hZGVyID0gSHRtbExvYWRlcl8xLmRlZmF1bHQ7XHJcbnZhciBIZWFkZXJBbmltYXRpb25fMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9IZWFkZXJBbmltYXRpb25cIik7XHJcbmV4cG9ydHMuSGVhZGVyQW5pbWF0aW9uID0gSGVhZGVyQW5pbWF0aW9uXzEuZGVmYXVsdDtcclxudmFyIEdsb2JhbERvbVV0aWxfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9HbG9iYWxEb21VdGlsXCIpO1xyXG5leHBvcnRzLkdsb2JhbERvbVV0aWwgPSBHbG9iYWxEb21VdGlsXzEuZGVmYXVsdDtcclxudmFyIEZvcm1VdGlsc18xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL0Zvcm1VdGlsc1wiKTtcclxuZXhwb3J0cy5Gb3JtVXRpbHMgPSBGb3JtVXRpbHNfMS5kZWZhdWx0O1xyXG52YXIgRWxlbWVudFNjYWxlXzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvRWxlbWVudFNjYWxlXCIpO1xyXG5leHBvcnRzLkVsZW1lbnRTY2FsZSA9IEVsZW1lbnRTY2FsZV8xLmRlZmF1bHQ7XHJcbnZhciBEb21VdGlsXzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvRG9tVXRpbFwiKTtcclxuZXhwb3J0cy5Eb21VdGlsID0gRG9tVXRpbF8xLmRlZmF1bHQ7XHJcbnZhciBDdXN0b21JbnB1dHNfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9DdXN0b21JbnB1dHNcIik7XHJcbmV4cG9ydHMuQ3VzdG9tSW5wdXRzID0gQ3VzdG9tSW5wdXRzXzEuZGVmYXVsdDtcclxudmFyIENvcHlfVXRpbGl0eV8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL0NvcHkgVXRpbGl0eVwiKTtcclxuZXhwb3J0cy5Db3B5VXRpbGl0eSA9IENvcHlfVXRpbGl0eV8xLkNvcHlVdGlsaXR5O1xyXG52YXIgQ2hhbmdlTGFuZ3VhZ2VfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9DaGFuZ2VMYW5ndWFnZVwiKTtcclxuZXhwb3J0cy5DaGFuZ2VMYW5ndWFnZSA9IENoYW5nZUxhbmd1YWdlXzEuZGVmYXVsdDtcclxudmFyIERlYm91bmNlcl8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL0RlYm91bmNlclwiKTtcclxuZXhwb3J0cy5kZWJvdW5jZXIgPSBEZWJvdW5jZXJfMS5kZWZhdWx0O1xyXG52YXIgVVJMSGVscGVyXzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvVVJMSGVscGVyXCIpO1xyXG5leHBvcnRzLlVybEhlbHBlciA9IFVSTEhlbHBlcl8xLmRlZmF1bHQ7XHJcbnZhciBIVE1MSW1wb3J0XzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvSFRNTEltcG9ydFwiKTtcclxuZXhwb3J0cy5IVE1MSW1wb3J0ID0gSFRNTEltcG9ydF8xLmRlZmF1bHQ7XHJcbnZhciBDdXN0b21WYWxpZGF0aW9uVXRpbF8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL0N1c3RvbVZhbGlkYXRpb25VdGlsXCIpO1xyXG5leHBvcnRzLkN1c3RvbVZhbGlkYXRpb25VdGlsID0gQ3VzdG9tVmFsaWRhdGlvblV0aWxfMS5kZWZhdWx0O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvKipcbkBsaWNlbnNlIEBub2NvbXBpbGVcbkNvcHlyaWdodCAoYykgMjAxOCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5UaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG5UaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG5Db2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiovXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIChmdW5jdGlvbigpe2lmKHZvaWQgMD09PXdpbmRvdy5SZWZsZWN0fHx2b2lkIDA9PT13aW5kb3cuY3VzdG9tRWxlbWVudHN8fHdpbmRvdy5jdXN0b21FbGVtZW50cy5wb2x5ZmlsbFdyYXBGbHVzaENhbGxiYWNrKXJldHVybjtjb25zdCBhPUhUTUxFbGVtZW50O3dpbmRvdy5IVE1MRWxlbWVudD17SFRNTEVsZW1lbnQ6ZnVuY3Rpb24gSFRNTEVsZW1lbnQoKXtyZXR1cm4gUmVmbGVjdC5jb25zdHJ1Y3QoYSxbXSx0aGlzLmNvbnN0cnVjdG9yKX19LkhUTUxFbGVtZW50LEhUTUxFbGVtZW50LnByb3RvdHlwZT1hLnByb3RvdHlwZSxIVE1MRWxlbWVudC5wcm90b3R5cGUuY29uc3RydWN0b3I9SFRNTEVsZW1lbnQsT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxFbGVtZW50LGEpO30pKCk7XG5cbn0oKSk7XG4iLCIvKipcbkBsaWNlbnNlIEBub2NvbXBpbGVcbkNvcHlyaWdodCAoYykgMjAxOCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5UaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG5UaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG5Db2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiovXG4oZnVuY3Rpb24oKXsvKlxuXG4gQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4qL1xuJ3VzZSBzdHJpY3QnO3ZhciB3O2Z1bmN0aW9uIGJhKGEpe3ZhciBiPTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGI8YS5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6YVtiKytdfTp7ZG9uZTohMH19fWZ1bmN0aW9uIGNhKGEpe3ZhciBiPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmYVtTeW1ib2wuaXRlcmF0b3JdO3JldHVybiBiP2IuY2FsbChhKTp7bmV4dDpiYShhKX19ZnVuY3Rpb24gZGEoYSl7Zm9yKHZhciBiLGM9W107IShiPWEubmV4dCgpKS5kb25lOyljLnB1c2goYi52YWx1ZSk7cmV0dXJuIGN9XG52YXIgZmE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93PT09dGhpcz90aGlzOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWwmJm51bGwhPWdsb2JhbD9nbG9iYWw6dGhpcyxoYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydGllcz9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oYSxiLGMpe2EhPUFycmF5LnByb3RvdHlwZSYmYSE9T2JqZWN0LnByb3RvdHlwZSYmKGFbYl09Yy52YWx1ZSl9O2Z1bmN0aW9uIGlhKCl7aWE9ZnVuY3Rpb24oKXt9O2ZhLlN5bWJvbHx8KGZhLlN5bWJvbD1sYSl9ZnVuY3Rpb24gbWEoYSxiKXt0aGlzLmE9YTtoYSh0aGlzLFwiZGVzY3JpcHRpb25cIix7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmJ9KX1tYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfTtcbnZhciBsYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYyl7aWYodGhpcyBpbnN0YW5jZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvclwiKTtyZXR1cm4gbmV3IG1hKFwianNjb21wX3N5bWJvbF9cIisoY3x8XCJcIikrXCJfXCIrYisrLGMpfXZhciBiPTA7cmV0dXJuIGF9KCk7ZnVuY3Rpb24gbmEoKXtpYSgpO3ZhciBhPWZhLlN5bWJvbC5pdGVyYXRvcjthfHwoYT1mYS5TeW1ib2wuaXRlcmF0b3I9ZmEuU3ltYm9sKFwiU3ltYm9sLml0ZXJhdG9yXCIpKTtcImZ1bmN0aW9uXCIhPXR5cGVvZiBBcnJheS5wcm90b3R5cGVbYV0mJmhhKEFycmF5LnByb3RvdHlwZSxhLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gb2EoYmEodGhpcykpfX0pO25hPWZ1bmN0aW9uKCl7fX1cbmZ1bmN0aW9uIG9hKGEpe25hKCk7YT17bmV4dDphfTthW2ZhLlN5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307cmV0dXJuIGF9dmFyIHBhO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5zZXRQcm90b3R5cGVPZilwYT1PYmplY3Quc2V0UHJvdG90eXBlT2Y7ZWxzZXt2YXIgcWE7YTp7dmFyIHZhPXtQYTohMH0sd2E9e307dHJ5e3dhLl9fcHJvdG9fXz12YTtxYT13YS5QYTticmVhayBhfWNhdGNoKGEpe31xYT0hMX1wYT1xYT9mdW5jdGlvbihhLGIpe2EuX19wcm90b19fPWI7aWYoYS5fX3Byb3RvX18hPT1iKXRocm93IG5ldyBUeXBlRXJyb3IoYStcIiBpcyBub3QgZXh0ZW5zaWJsZVwiKTtyZXR1cm4gYX06bnVsbH12YXIgeGE9cGE7ZnVuY3Rpb24geWEoKXt0aGlzLmw9ITE7dGhpcy5iPW51bGw7dGhpcy5FYT12b2lkIDA7dGhpcy5hPTE7dGhpcy5ZPTA7dGhpcy5jPW51bGx9XG5mdW5jdGlvbiB6YShhKXtpZihhLmwpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7YS5sPSEwfXlhLnByb3RvdHlwZS5KPWZ1bmN0aW9uKGEpe3RoaXMuRWE9YX07ZnVuY3Rpb24gQWEoYSxiKXthLmM9e1NhOmIsV2E6ITB9O2EuYT1hLll9eWEucHJvdG90eXBlLnJldHVybj1mdW5jdGlvbihhKXt0aGlzLmM9e3JldHVybjphfTt0aGlzLmE9dGhpcy5ZfTtmdW5jdGlvbiBCYShhLGIpe2EuYT0zO3JldHVybnt2YWx1ZTpifX1mdW5jdGlvbiBDYShhKXt0aGlzLmE9bmV3IHlhO3RoaXMuYj1hfWZ1bmN0aW9uIERhKGEsYil7emEoYS5hKTt2YXIgYz1hLmEuYjtpZihjKXJldHVybiBFYShhLFwicmV0dXJuXCJpbiBjP2NbXCJyZXR1cm5cIl06ZnVuY3Rpb24oZCl7cmV0dXJue3ZhbHVlOmQsZG9uZTohMH19LGIsYS5hLnJldHVybik7YS5hLnJldHVybihiKTtyZXR1cm4gRmEoYSl9XG5mdW5jdGlvbiBFYShhLGIsYyxkKXt0cnl7dmFyIGU9Yi5jYWxsKGEuYS5iLGMpO2lmKCEoZSBpbnN0YW5jZW9mIE9iamVjdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkl0ZXJhdG9yIHJlc3VsdCBcIitlK1wiIGlzIG5vdCBhbiBvYmplY3RcIik7aWYoIWUuZG9uZSlyZXR1cm4gYS5hLmw9ITEsZTt2YXIgZj1lLnZhbHVlfWNhdGNoKGcpe3JldHVybiBhLmEuYj1udWxsLEFhKGEuYSxnKSxGYShhKX1hLmEuYj1udWxsO2QuY2FsbChhLmEsZik7cmV0dXJuIEZhKGEpfWZ1bmN0aW9uIEZhKGEpe2Zvcig7YS5hLmE7KXRyeXt2YXIgYj1hLmIoYS5hKTtpZihiKXJldHVybiBhLmEubD0hMSx7dmFsdWU6Yi52YWx1ZSxkb25lOiExfX1jYXRjaChjKXthLmEuRWE9dm9pZCAwLEFhKGEuYSxjKX1hLmEubD0hMTtpZihhLmEuYyl7Yj1hLmEuYzthLmEuYz1udWxsO2lmKGIuV2EpdGhyb3cgYi5TYTtyZXR1cm57dmFsdWU6Yi5yZXR1cm4sZG9uZTohMH19cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX1cbmZ1bmN0aW9uIEdhKGEpe3RoaXMubmV4dD1mdW5jdGlvbihiKXt6YShhLmEpO2EuYS5iP2I9RWEoYSxhLmEuYi5uZXh0LGIsYS5hLkopOihhLmEuSihiKSxiPUZhKGEpKTtyZXR1cm4gYn07dGhpcy50aHJvdz1mdW5jdGlvbihiKXt6YShhLmEpO2EuYS5iP2I9RWEoYSxhLmEuYltcInRocm93XCJdLGIsYS5hLkopOihBYShhLmEsYiksYj1GYShhKSk7cmV0dXJuIGJ9O3RoaXMucmV0dXJuPWZ1bmN0aW9uKGIpe3JldHVybiBEYShhLGIpfTtuYSgpO3RoaXNbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfX1mdW5jdGlvbiBIYShhLGIpe2I9bmV3IEdhKG5ldyBDYShiKSk7eGEmJnhhKGIsYS5wcm90b3R5cGUpO3JldHVybiBifUFycmF5LmZyb218fChBcnJheS5mcm9tPWZ1bmN0aW9uKGEpe3JldHVybltdLnNsaWNlLmNhbGwoYSl9KTtcbk9iamVjdC5hc3NpZ258fChPYmplY3QuYXNzaWduPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxjPTAsZDtjPGIubGVuZ3RoO2MrKylpZihkPWJbY10pZm9yKHZhciBlPWEsZj1kLGc9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZiksaD0wO2g8Zy5sZW5ndGg7aCsrKWQ9Z1toXSxlW2RdPWZbZF07cmV0dXJuIGF9KTsoZnVuY3Rpb24oKXtpZighZnVuY3Rpb24oKXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO2YuaW5pdEV2ZW50KFwiZm9vXCIsITAsITApO2YucHJldmVudERlZmF1bHQoKTtyZXR1cm4gZi5kZWZhdWx0UHJldmVudGVkfSgpKXt2YXIgYT1FdmVudC5wcm90b3R5cGUucHJldmVudERlZmF1bHQ7RXZlbnQucHJvdG90eXBlLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxhYmxlJiYoYS5jYWxsKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZGVmYXVsdFByZXZlbnRlZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sY29uZmlndXJhYmxlOiEwfSkpfX12YXIgYj0vVHJpZGVudC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtpZighd2luZG93LkV2ZW50fHxiJiZcImZ1bmN0aW9uXCIhPT10eXBlb2Ygd2luZG93LkV2ZW50KXt2YXIgYz13aW5kb3cuRXZlbnQ7d2luZG93LkV2ZW50PWZ1bmN0aW9uKGYsZyl7Zz1nfHx7fTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuaC5pbml0RXZlbnQoZiwhIWcuYnViYmxlcywhIWcuY2FuY2VsYWJsZSk7cmV0dXJuIGh9O2lmKGMpe2Zvcih2YXIgZCBpbiBjKXdpbmRvdy5FdmVudFtkXT1jW2RdO3dpbmRvdy5FdmVudC5wcm90b3R5cGU9Yy5wcm90b3R5cGV9fWlmKCF3aW5kb3cuQ3VzdG9tRXZlbnR8fGImJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiB3aW5kb3cuQ3VzdG9tRXZlbnQpd2luZG93LkN1c3RvbUV2ZW50PWZ1bmN0aW9uKGYsZyl7Zz1nfHx7fTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFdmVudChcIkN1c3RvbUV2ZW50XCIpO2guaW5pdEN1c3RvbUV2ZW50KGYsISFnLmJ1YmJsZXMsISFnLmNhbmNlbGFibGUsZy5kZXRhaWwpO3JldHVybiBofSx3aW5kb3cuQ3VzdG9tRXZlbnQucHJvdG90eXBlPXdpbmRvdy5FdmVudC5wcm90b3R5cGU7aWYoIXdpbmRvdy5Nb3VzZUV2ZW50fHxiJiZcImZ1bmN0aW9uXCIhPT10eXBlb2Ygd2luZG93Lk1vdXNlRXZlbnQpe2I9d2luZG93Lk1vdXNlRXZlbnQ7d2luZG93Lk1vdXNlRXZlbnQ9XG5mdW5jdGlvbihmLGcpe2c9Z3x8e307dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJNb3VzZUV2ZW50XCIpO2guaW5pdE1vdXNlRXZlbnQoZiwhIWcuYnViYmxlcywhIWcuY2FuY2VsYWJsZSxnLnZpZXd8fHdpbmRvdyxnLmRldGFpbCxnLnNjcmVlblgsZy5zY3JlZW5ZLGcuY2xpZW50WCxnLmNsaWVudFksZy5jdHJsS2V5LGcuYWx0S2V5LGcuc2hpZnRLZXksZy5tZXRhS2V5LGcuYnV0dG9uLGcucmVsYXRlZFRhcmdldCk7cmV0dXJuIGh9O2lmKGIpZm9yKHZhciBlIGluIGIpd2luZG93Lk1vdXNlRXZlbnRbZV09YltlXTt3aW5kb3cuTW91c2VFdmVudC5wcm90b3R5cGU9Yi5wcm90b3R5cGV9fSkoKTsoZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7fWZ1bmN0aW9uIGIocCx0KXtpZighcC5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm5bXTtzd2l0Y2gocC5ub2RlVHlwZSl7Y2FzZSBOb2RlLkRPQ1VNRU5UX05PREU6cmV0dXJuIEYuY2FsbChwLHQpO2Nhc2UgTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFOnJldHVybiBDLmNhbGwocCx0KTtkZWZhdWx0OnJldHVybiByLmNhbGwocCx0KX19dmFyIGM9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiBIVE1MVGVtcGxhdGVFbGVtZW50LGQ9IShkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuY2xvbmVOb2RlKClpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpLGU9ITE7L1RyaWRlbnQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJmZ1bmN0aW9uKCl7ZnVuY3Rpb24gcCh6LFIpe2lmKHogaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KWZvcih2YXIgYmI7YmI9ei5maXJzdENoaWxkOylELmNhbGwodGhpcyxiYixSKTtlbHNlIEQuY2FsbCh0aGlzLFxueixSKTtyZXR1cm4gen1lPSEwO3ZhciB0PU5vZGUucHJvdG90eXBlLmNsb25lTm9kZTtOb2RlLnByb3RvdHlwZS5jbG9uZU5vZGU9ZnVuY3Rpb24oeil7ej10LmNhbGwodGhpcyx6KTt0aGlzIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCYmKHouX19wcm90b19fPURvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlKTtyZXR1cm4gen07RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbD1IVE1MRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbDtEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yPUhUTUxFbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLHtub2RlVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERX0sY29uZmlndXJhYmxlOiEwfSxsb2NhbE5hbWU6e2dldDpmdW5jdGlvbigpe30sXG5jb25maWd1cmFibGU6ITB9LG5vZGVOYW1lOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5cIiNkb2N1bWVudC1mcmFnbWVudFwifSxjb25maWd1cmFibGU6ITB9fSk7dmFyIEQ9Tm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlO05vZGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1wO3ZhciBLPU5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkO05vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKHope3ogaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50P3AuY2FsbCh0aGlzLHosbnVsbCk6Sy5jYWxsKHRoaXMseik7cmV0dXJuIHp9O3ZhciBhYT1Ob2RlLnByb3RvdHlwZS5yZW1vdmVDaGlsZCxqYT1Ob2RlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQ7Tm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkPWZ1bmN0aW9uKHosUil7eiBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQ/KHAuY2FsbCh0aGlzLHosUiksYWEuY2FsbCh0aGlzLFIpKTpqYS5jYWxsKHRoaXMseixSKTtyZXR1cm4gUn07RG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ9XG5mdW5jdGlvbigpe3ZhciB6PXRoaXMuY3JlYXRlRWxlbWVudChcImRmXCIpO3ouX19wcm90b19fPURvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlO3JldHVybiB6fTt2YXIgcmE9RG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGU7RG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGU9ZnVuY3Rpb24oeixSKXtSPXJhLmNhbGwodGhpcyx6LFJ8fCExKTt6IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCYmKFIuX19wcm90b19fPURvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlKTtyZXR1cm4gUn19KCk7dmFyIGY9Tm9kZS5wcm90b3R5cGUuY2xvbmVOb2RlLGc9RG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQsaD1Eb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZSxrPU5vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkLGw9Tm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQsbT1Ob2RlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQscT1ET01QYXJzZXIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZyxcbkg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3cuSFRNTEVsZW1lbnQucHJvdG90eXBlLFwiaW5uZXJIVE1MXCIpfHx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5uZXJIVE1MfSxzZXQ6ZnVuY3Rpb24ocCl7dGhpcy5pbm5lckhUTUw9cH19LEU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3cuTm9kZS5wcm90b3R5cGUsXCJjaGlsZE5vZGVzXCIpfHx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlc319LHI9RWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbCxGPURvY3VtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsLEM9RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbCxNPWZ1bmN0aW9uKCl7aWYoIWMpe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTt0LmNvbnRlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG5wLmNvbnRlbnQuYXBwZW5kQ2hpbGQodCk7cD1wLmNsb25lTm9kZSghMCk7cmV0dXJuIDA9PT1wLmNvbnRlbnQuY2hpbGROb2Rlcy5sZW5ndGh8fDA9PT1wLmNvbnRlbnQuZmlyc3RDaGlsZC5jb250ZW50LmNoaWxkTm9kZXMubGVuZ3RofHxkfX0oKTtpZihjKXt2YXIgeT1kb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoXCJ0ZW1wbGF0ZVwiKSxXPSEwLHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO3YudGV4dENvbnRlbnQ9XCJ0ZW1wbGF0ZXtkaXNwbGF5Om5vbmU7fVwiO3ZhciBzYT1kb2N1bWVudC5oZWFkO3NhLmluc2VydEJlZm9yZSh2LHNhLmZpcnN0RWxlbWVudENoaWxkKTthLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSk7dmFyIGVhPSFkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLmhhc093blByb3BlcnR5KFwiaW5uZXJIVE1MXCIpO2EuVT1mdW5jdGlvbihwKXtpZighcC5jb250ZW50JiZwLm5hbWVzcGFjZVVSST09PVxuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSSl7cC5jb250ZW50PXkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2Zvcih2YXIgdDt0PXAuZmlyc3RDaGlsZDspbC5jYWxsKHAuY29udGVudCx0KTtpZihlYSlwLl9fcHJvdG9fXz1hLnByb3RvdHlwZTtlbHNlIGlmKHAuY2xvbmVOb2RlPWZ1bmN0aW9uKEQpe3JldHVybiBhLmIodGhpcyxEKX0sVyl0cnl7bihwKSxJKHApfWNhdGNoKEQpe1c9ITF9YS5hKHAuY29udGVudCl9fTt2YXIgdGE9e29wdGlvbjpbXCJzZWxlY3RcIl0sdGhlYWQ6W1widGFibGVcIl0sY29sOltcImNvbGdyb3VwXCIsXCJ0YWJsZVwiXSx0cjpbXCJ0Ym9keVwiLFwidGFibGVcIl0sdGg6W1widHJcIixcInRib2R5XCIsXCJ0YWJsZVwiXSx0ZDpbXCJ0clwiLFwidGJvZHlcIixcInRhYmxlXCJdfSxuPWZ1bmN0aW9uKHApe09iamVjdC5kZWZpbmVQcm9wZXJ0eShwLFwiaW5uZXJIVE1MXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB1YSh0aGlzKX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBEPXRhWygvPChbYS16XVteL1xcMD5cXHgyMFxcdFxcclxcblxcZl0rKS9pLmV4ZWModCl8fFxuW1wiXCIsXCJcIl0pWzFdLnRvTG93ZXJDYXNlKCldO2lmKEQpZm9yKHZhciBLPTA7SzxELmxlbmd0aDtLKyspdD1cIjxcIitEW0tdK1wiPlwiK3QrXCI8L1wiK0RbS10rXCI+XCI7eS5ib2R5LmlubmVySFRNTD10O2ZvcihhLmEoeSk7dGhpcy5jb250ZW50LmZpcnN0Q2hpbGQ7KWsuY2FsbCh0aGlzLmNvbnRlbnQsdGhpcy5jb250ZW50LmZpcnN0Q2hpbGQpO3Q9eS5ib2R5O2lmKEQpZm9yKEs9MDtLPEQubGVuZ3RoO0srKyl0PXQubGFzdENoaWxkO2Zvcig7dC5maXJzdENoaWxkOylsLmNhbGwodGhpcy5jb250ZW50LHQuZmlyc3RDaGlsZCl9LGNvbmZpZ3VyYWJsZTohMH0pfSxJPWZ1bmN0aW9uKHApe09iamVjdC5kZWZpbmVQcm9wZXJ0eShwLFwib3V0ZXJIVE1MXCIse2dldDpmdW5jdGlvbigpe3JldHVyblwiPHRlbXBsYXRlPlwiK3RoaXMuaW5uZXJIVE1MK1wiPC90ZW1wbGF0ZT5cIn0sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucGFyZW50Tm9kZSl7eS5ib2R5LmlubmVySFRNTD10O2Zvcih0PXRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7eS5ib2R5LmZpcnN0Q2hpbGQ7KWwuY2FsbCh0LFxueS5ib2R5LmZpcnN0Q2hpbGQpO20uY2FsbCh0aGlzLnBhcmVudE5vZGUsdCx0aGlzKX1lbHNlIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIHNldCB0aGUgJ291dGVySFRNTCcgcHJvcGVydHkgb24gJ0VsZW1lbnQnOiBUaGlzIGVsZW1lbnQgaGFzIG5vIHBhcmVudCBub2RlLlwiKTt9LGNvbmZpZ3VyYWJsZTohMH0pfTtuKGEucHJvdG90eXBlKTtJKGEucHJvdG90eXBlKTthLmE9ZnVuY3Rpb24ocCl7cD1iKHAsXCJ0ZW1wbGF0ZVwiKTtmb3IodmFyIHQ9MCxEPXAubGVuZ3RoLEs7dDxEJiYoSz1wW3RdKTt0KyspYS5VKEspfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLGZ1bmN0aW9uKCl7YS5hKGRvY3VtZW50KX0pO0RvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHA9Zy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7XCJ0ZW1wbGF0ZVwiPT09cC5sb2NhbE5hbWUmJmEuVShwKTtyZXR1cm4gcH07RE9NUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZyb21TdHJpbmc9XG5mdW5jdGlvbigpe3ZhciBwPXEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2EuYShwKTtyZXR1cm4gcH07T2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxFbGVtZW50LnByb3RvdHlwZSxcImlubmVySFRNTFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdWEodGhpcyl9LHNldDpmdW5jdGlvbihwKXtILnNldC5jYWxsKHRoaXMscCk7YS5hKHRoaXMpfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pO3ZhciBrYT0vWyZcXHUwMEEwXCJdL2csWGI9L1smXFx1MDBBMDw+XS9nLGNiPWZ1bmN0aW9uKHApe3N3aXRjaChwKXtjYXNlIFwiJlwiOnJldHVyblwiJmFtcDtcIjtjYXNlIFwiPFwiOnJldHVyblwiJmx0O1wiO2Nhc2UgXCI+XCI6cmV0dXJuXCImZ3Q7XCI7Y2FzZSAnXCInOnJldHVyblwiJnF1b3Q7XCI7Y2FzZSBcIlxcdTAwYTBcIjpyZXR1cm5cIiZuYnNwO1wifX07dj1mdW5jdGlvbihwKXtmb3IodmFyIHQ9e30sRD0wO0Q8cC5sZW5ndGg7RCsrKXRbcFtEXV09ITA7cmV0dXJuIHR9O3ZhciBRYT12KFwiYXJlYSBiYXNlIGJyIGNvbCBjb21tYW5kIGVtYmVkIGhyIGltZyBpbnB1dCBrZXlnZW4gbGluayBtZXRhIHBhcmFtIHNvdXJjZSB0cmFjayB3YnJcIi5zcGxpdChcIiBcIikpLFxuZGI9dihcInN0eWxlIHNjcmlwdCB4bXAgaWZyYW1lIG5vZW1iZWQgbm9mcmFtZXMgcGxhaW50ZXh0IG5vc2NyaXB0XCIuc3BsaXQoXCIgXCIpKSx1YT1mdW5jdGlvbihwLHQpe1widGVtcGxhdGVcIj09PXAubG9jYWxOYW1lJiYocD1wLmNvbnRlbnQpO2Zvcih2YXIgRD1cIlwiLEs9dD90KHApOkUuZ2V0LmNhbGwocCksYWE9MCxqYT1LLmxlbmd0aCxyYTthYTxqYSYmKHJhPUtbYWFdKTthYSsrKXthOnt2YXIgej1yYTt2YXIgUj1wO3ZhciBiYj10O3N3aXRjaCh6Lm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOmZvcih2YXIgWWI9ei5sb2NhbE5hbWUsZWI9XCI8XCIrWWIsZ2c9ei5hdHRyaWJ1dGVzLHVkPTA7Uj1nZ1t1ZF07dWQrKyllYis9XCIgXCIrUi5uYW1lKyc9XCInK1IudmFsdWUucmVwbGFjZShrYSxjYikrJ1wiJztlYis9XCI+XCI7ej1RYVtZYl0/ZWI6ZWIrdWEoeixiYikrXCI8L1wiK1liK1wiPlwiO2JyZWFrIGE7Y2FzZSBOb2RlLlRFWFRfTk9ERTp6PXouZGF0YTt6PVImJmRiW1IubG9jYWxOYW1lXT9cbno6ei5yZXBsYWNlKFhiLGNiKTticmVhayBhO2Nhc2UgTm9kZS5DT01NRU5UX05PREU6ej1cIlxceDNjIS0tXCIrei5kYXRhK1wiLS1cXHgzZVwiO2JyZWFrIGE7ZGVmYXVsdDp0aHJvdyB3aW5kb3cuY29uc29sZS5lcnJvcih6KSxFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTt9fUQrPXp9cmV0dXJuIER9fWlmKGN8fE0pe2EuYj1mdW5jdGlvbihwLHQpe3ZhciBEPWYuY2FsbChwLCExKTt0aGlzLlUmJnRoaXMuVShEKTt0JiYobC5jYWxsKEQuY29udGVudCxmLmNhbGwocC5jb250ZW50LCEwKSksdShELmNvbnRlbnQscC5jb250ZW50KSk7cmV0dXJuIER9O3ZhciB1PWZ1bmN0aW9uKHAsdCl7aWYodC5xdWVyeVNlbGVjdG9yQWxsJiYodD1iKHQsXCJ0ZW1wbGF0ZVwiKSwwIT09dC5sZW5ndGgpKXtwPWIocCxcInRlbXBsYXRlXCIpO2Zvcih2YXIgRD0wLEs9cC5sZW5ndGgsYWEsamE7RDxLO0QrKylqYT10W0RdLGFhPXBbRF0sYSYmYS5VJiZhLlUoamEpLG0uY2FsbChhYS5wYXJlbnROb2RlLEcuY2FsbChqYSxcbiEwKSxhYSl9fSxHPU5vZGUucHJvdG90eXBlLmNsb25lTm9kZT1mdW5jdGlvbihwKXtpZighZSYmZCYmdGhpcyBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpaWYocCl2YXIgdD1KLmNhbGwodGhpcy5vd25lckRvY3VtZW50LHRoaXMsITApO2Vsc2UgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7ZWxzZSB0aGlzLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJlwidGVtcGxhdGVcIj09PXRoaXMubG9jYWxOYW1lJiZ0aGlzLm5hbWVzcGFjZVVSST09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST90PWEuYih0aGlzLHApOnQ9Zi5jYWxsKHRoaXMscCk7cCYmdSh0LHRoaXMpO3JldHVybiB0fSxKPURvY3VtZW50LnByb3RvdHlwZS5pbXBvcnROb2RlPWZ1bmN0aW9uKHAsdCl7dD10fHwhMTtpZihcInRlbXBsYXRlXCI9PT1wLmxvY2FsTmFtZSlyZXR1cm4gYS5iKHAsdCk7dmFyIEQ9aC5jYWxsKHRoaXMscCx0KTtpZih0KXt1KEQsXG5wKTtwPWIoRCwnc2NyaXB0Om5vdChbdHlwZV0pLHNjcmlwdFt0eXBlPVwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiXSxzY3JpcHRbdHlwZT1cInRleHQvamF2YXNjcmlwdFwiXScpO2Zvcih2YXIgSyxhYT0wO2FhPHAubGVuZ3RoO2FhKyspe0s9cFthYV07dD1nLmNhbGwoZG9jdW1lbnQsXCJzY3JpcHRcIik7dC50ZXh0Q29udGVudD1LLnRleHRDb250ZW50O2Zvcih2YXIgamE9Sy5hdHRyaWJ1dGVzLHJhPTAsejtyYTxqYS5sZW5ndGg7cmErKyl6PWphW3JhXSx0LnNldEF0dHJpYnV0ZSh6Lm5hbWUsei52YWx1ZSk7bS5jYWxsKEsucGFyZW50Tm9kZSx0LEspfX1yZXR1cm4gRH19YyYmKHdpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50PWEpfSkoKTt2YXIgSWE9c2V0VGltZW91dDtmdW5jdGlvbiBKYSgpe31mdW5jdGlvbiBLYShhLGIpe3JldHVybiBmdW5jdGlvbigpe2EuYXBwbHkoYixhcmd1bWVudHMpfX1mdW5jdGlvbiB4KGEpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHgpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXdcIik7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm5vdCBhIGZ1bmN0aW9uXCIpO3RoaXMuST0wO3RoaXMuemE9ITE7dGhpcy5DPXZvaWQgMDt0aGlzLlc9W107TGEoYSx0aGlzKX1cbmZ1bmN0aW9uIE1hKGEsYil7Zm9yKDszPT09YS5JOylhPWEuQzswPT09YS5JP2EuVy5wdXNoKGIpOihhLnphPSEwLE5hKGZ1bmN0aW9uKCl7dmFyIGM9MT09PWEuST9iLllhOmIuWmE7aWYobnVsbD09PWMpKDE9PT1hLkk/T2E6UGEpKGIudmEsYS5DKTtlbHNle3RyeXt2YXIgZD1jKGEuQyl9Y2F0Y2goZSl7UGEoYi52YSxlKTtyZXR1cm59T2EoYi52YSxkKX19KSl9ZnVuY3Rpb24gT2EoYSxiKXt0cnl7aWYoYj09PWEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkEgcHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdHNlbGYuXCIpO2lmKGImJihcIm9iamVjdFwiPT09dHlwZW9mIGJ8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBiKSl7dmFyIGM9Yi50aGVuO2lmKGIgaW5zdGFuY2VvZiB4KXthLkk9MzthLkM9YjtSYShhKTtyZXR1cm59aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGMpe0xhKEthKGMsYiksYSk7cmV0dXJufX1hLkk9MTthLkM9YjtSYShhKX1jYXRjaChkKXtQYShhLGQpfX1cbmZ1bmN0aW9uIFBhKGEsYil7YS5JPTI7YS5DPWI7UmEoYSl9ZnVuY3Rpb24gUmEoYSl7Mj09PWEuSSYmMD09PWEuVy5sZW5ndGgmJk5hKGZ1bmN0aW9uKCl7YS56YXx8XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBjb25zb2xlJiZjb25zb2xlJiZjb25zb2xlLndhcm4oXCJQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb246XCIsYS5DKX0pO2Zvcih2YXIgYj0wLGM9YS5XLmxlbmd0aDtiPGM7YisrKU1hKGEsYS5XW2JdKTthLlc9bnVsbH1mdW5jdGlvbiBTYShhLGIsYyl7dGhpcy5ZYT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgYT9hOm51bGw7dGhpcy5aYT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgYj9iOm51bGw7dGhpcy52YT1jfWZ1bmN0aW9uIExhKGEsYil7dmFyIGM9ITE7dHJ5e2EoZnVuY3Rpb24oZCl7Y3x8KGM9ITAsT2EoYixkKSl9LGZ1bmN0aW9uKGQpe2N8fChjPSEwLFBhKGIsZCkpfSl9Y2F0Y2goZCl7Y3x8KGM9ITAsUGEoYixkKSl9fVxueC5wcm90b3R5cGVbXCJjYXRjaFwiXT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsYSl9O3gucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihKYSk7TWEodGhpcyxuZXcgU2EoYSxiLGMpKTtyZXR1cm4gY307eC5wcm90b3R5cGVbXCJmaW5hbGx5XCJdPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY29uc3RydWN0b3I7cmV0dXJuIHRoaXMudGhlbihmdW5jdGlvbihjKXtyZXR1cm4gYi5yZXNvbHZlKGEoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBjfSl9LGZ1bmN0aW9uKGMpe3JldHVybiBiLnJlc29sdmUoYSgpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGIucmVqZWN0KGMpfSl9KX07XG5mdW5jdGlvbiBUYShhKXtyZXR1cm4gbmV3IHgoZnVuY3Rpb24oYixjKXtmdW5jdGlvbiBkKGgsayl7dHJ5e2lmKGsmJihcIm9iamVjdFwiPT09dHlwZW9mIGt8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBrKSl7dmFyIGw9ay50aGVuO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBsKXtsLmNhbGwoayxmdW5jdGlvbihtKXtkKGgsbSl9LGMpO3JldHVybn19ZVtoXT1rOzA9PT0tLWYmJmIoZSl9Y2F0Y2gobSl7YyhtKX19aWYoIWF8fFwidW5kZWZpbmVkXCI9PT10eXBlb2YgYS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXlcIik7dmFyIGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYSk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBiKFtdKTtmb3IodmFyIGY9ZS5sZW5ndGgsZz0wO2c8ZS5sZW5ndGg7ZysrKWQoZyxlW2ddKX0pfVxuZnVuY3Rpb24gVWEoYSl7cmV0dXJuIGEmJlwib2JqZWN0XCI9PT10eXBlb2YgYSYmYS5jb25zdHJ1Y3Rvcj09PXg/YTpuZXcgeChmdW5jdGlvbihiKXtiKGEpfSl9ZnVuY3Rpb24gVmEoYSl7cmV0dXJuIG5ldyB4KGZ1bmN0aW9uKGIsYyl7YyhhKX0pfWZ1bmN0aW9uIFdhKGEpe3JldHVybiBuZXcgeChmdW5jdGlvbihiLGMpe2Zvcih2YXIgZD0wLGU9YS5sZW5ndGg7ZDxlO2QrKylhW2RdLnRoZW4oYixjKX0pfXZhciBOYT1cImZ1bmN0aW9uXCI9PT10eXBlb2Ygc2V0SW1tZWRpYXRlJiZmdW5jdGlvbihhKXtzZXRJbW1lZGlhdGUoYSl9fHxmdW5jdGlvbihhKXtJYShhLDApfTsvKlxuXG5Db3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcblRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4qL1xuaWYoIXdpbmRvdy5Qcm9taXNlKXt3aW5kb3cuUHJvbWlzZT14O3gucHJvdG90eXBlLnRoZW49eC5wcm90b3R5cGUudGhlbjt4LmFsbD1UYTt4LnJhY2U9V2E7eC5yZXNvbHZlPVVhO3gucmVqZWN0PVZhO3ZhciBYYT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKSxZYT1bXTsobmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGE9WWEubGVuZ3RoLGI9MDtiPGE7YisrKVlhW2JdKCk7WWEuc3BsaWNlKDAsYSl9KSkub2JzZXJ2ZShYYSx7Y2hhcmFjdGVyRGF0YTohMH0pO05hPWZ1bmN0aW9uKGEpe1lhLnB1c2goYSk7WGEudGV4dENvbnRlbnQ9MDxYYS50ZXh0Q29udGVudC5sZW5ndGg/XCJcIjpcImFcIn19Oy8qXG4gQ29weXJpZ2h0IChDKSAyMDE1IGJ5IFdlYlJlZmxlY3Rpb25cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuVEhFIFNPRlRXQVJFLlxuXG4qL1xuKGZ1bmN0aW9uKGEsYil7aWYoIShiIGluIGEpKXt2YXIgYz10eXBlb2YgZ2xvYmFsPT09dHlwZW9mIGM/d2luZG93Omdsb2JhbCxkPTAsZT1cIlwiK01hdGgucmFuZG9tKCksZj1cIl9fXFx1MDAwMXN5bWJvbEBAXCIrZSxnPWEuZ2V0T3duUHJvcGVydHlOYW1lcyxoPWEuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGs9YS5jcmVhdGUsbD1hLmtleXMsbT1hLmZyZWV6ZXx8YSxxPWEuZGVmaW5lUHJvcGVydHksSD1hLmRlZmluZVByb3BlcnRpZXMsRT1oKGEsXCJnZXRPd25Qcm9wZXJ0eU5hbWVzXCIpLHI9YS5wcm90b3R5cGUsRj1yLmhhc093blByb3BlcnR5LEM9ci5wcm9wZXJ0eUlzRW51bWVyYWJsZSxNPXIudG9TdHJpbmcseT1mdW5jdGlvbih1LEcsSil7Ri5jYWxsKHUsZil8fHEodSxmLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMSx3cml0YWJsZTohMSx2YWx1ZTp7fX0pO3VbZl1bXCJAQFwiK0ddPUp9LFc9ZnVuY3Rpb24odSxHKXt2YXIgSj1rKHUpO2coRykuZm9yRWFjaChmdW5jdGlvbihwKXt0YS5jYWxsKEcsXG5wKSYmUWEoSixwLEdbcF0pfSk7cmV0dXJuIEp9LHY9ZnVuY3Rpb24oKXt9LHNhPWZ1bmN0aW9uKHUpe3JldHVybiB1IT1mJiYhRi5jYWxsKGthLHUpfSxlYT1mdW5jdGlvbih1KXtyZXR1cm4gdSE9ZiYmRi5jYWxsKGthLHUpfSx0YT1mdW5jdGlvbih1KXt2YXIgRz1cIlwiK3U7cmV0dXJuIGVhKEcpP0YuY2FsbCh0aGlzLEcpJiZ0aGlzW2ZdW1wiQEBcIitHXTpDLmNhbGwodGhpcyx1KX0sbj1mdW5jdGlvbih1KXtxKHIsdSx7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsZ2V0OnYsc2V0OmZ1bmN0aW9uKEcpe3VhKHRoaXMsdSx7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6R30pO3kodGhpcyx1LCEwKX19KTtyZXR1cm4gbShrYVt1XT1xKGEodSksXCJjb25zdHJ1Y3RvclwiLFhiKSl9LEk9ZnVuY3Rpb24odSl7aWYodGhpcyYmdGhpcyE9PWMpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvclwiKTtyZXR1cm4gbihcIl9fXFx1MDAwMXN5bWJvbDpcIi5jb25jYXQodXx8XG5cIlwiLGUsKytkKSl9LGthPWsobnVsbCksWGI9e3ZhbHVlOkl9LGNiPWZ1bmN0aW9uKHUpe3JldHVybiBrYVt1XX0sUWE9ZnVuY3Rpb24odSxHLEope3ZhciBwPVwiXCIrRztpZihlYShwKSl7Rz11YTtpZihKLmVudW1lcmFibGUpe3ZhciB0PWsoSik7dC5lbnVtZXJhYmxlPSExfWVsc2UgdD1KO0codSxwLHQpO3kodSxwLCEhSi5lbnVtZXJhYmxlKX1lbHNlIHEodSxHLEopO3JldHVybiB1fSxkYj1mdW5jdGlvbih1KXtyZXR1cm4gZyh1KS5maWx0ZXIoZWEpLm1hcChjYil9O0UudmFsdWU9UWE7cShhLFwiZGVmaW5lUHJvcGVydHlcIixFKTtFLnZhbHVlPWRiO3EoYSxiLEUpO0UudmFsdWU9ZnVuY3Rpb24odSl7cmV0dXJuIGcodSkuZmlsdGVyKHNhKX07cShhLFwiZ2V0T3duUHJvcGVydHlOYW1lc1wiLEUpO0UudmFsdWU9ZnVuY3Rpb24odSxHKXt2YXIgSj1kYihHKTtKLmxlbmd0aD9sKEcpLmNvbmNhdChKKS5mb3JFYWNoKGZ1bmN0aW9uKHApe3RhLmNhbGwoRyxwKSYmUWEodSxwLEdbcF0pfSk6SCh1LFxuRyk7cmV0dXJuIHV9O3EoYSxcImRlZmluZVByb3BlcnRpZXNcIixFKTtFLnZhbHVlPXRhO3EocixcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsRSk7RS52YWx1ZT1JO3EoYyxcIlN5bWJvbFwiLEUpO0UudmFsdWU9ZnVuY3Rpb24odSl7dT1cIl9fXFx1MDAwMXN5bWJvbDpcIi5jb25jYXQoXCJfX1xcdTAwMDFzeW1ib2w6XCIsdSxlKTtyZXR1cm4gdSBpbiByP2thW3VdOm4odSl9O3EoSSxcImZvclwiLEUpO0UudmFsdWU9ZnVuY3Rpb24odSl7aWYoc2EodSkpdGhyb3cgbmV3IFR5cGVFcnJvcih1K1wiIGlzIG5vdCBhIHN5bWJvbFwiKTtyZXR1cm4gRi5jYWxsKGthLHUpP3Uuc2xpY2UoMjAsLWUubGVuZ3RoKTp2b2lkIDB9O3EoSSxcImtleUZvclwiLEUpO0UudmFsdWU9ZnVuY3Rpb24odSxHKXt2YXIgSj1oKHUsRyk7SiYmZWEoRykmJihKLmVudW1lcmFibGU9dGEuY2FsbCh1LEcpKTtyZXR1cm4gSn07cShhLFwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXCIsRSk7RS52YWx1ZT1mdW5jdGlvbih1LEcpe3JldHVybiAxPT09XG5hcmd1bWVudHMubGVuZ3RoP2sodSk6Vyh1LEcpfTtxKGEsXCJjcmVhdGVcIixFKTtFLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIHU9TS5jYWxsKHRoaXMpO3JldHVyblwiW29iamVjdCBTdHJpbmddXCI9PT11JiZlYSh0aGlzKT9cIltvYmplY3QgU3ltYm9sXVwiOnV9O3EocixcInRvU3RyaW5nXCIsRSk7dHJ5e3ZhciB1YT1rKHEoe30sXCJfX1xcdTAwMDFzeW1ib2w6XCIse2dldDpmdW5jdGlvbigpe3JldHVybiBxKHRoaXMsXCJfX1xcdTAwMDFzeW1ib2w6XCIse3ZhbHVlOiExfSlbXCJfX1xcdTAwMDFzeW1ib2w6XCJdfX0pKVtcIl9fXFx1MDAwMXN5bWJvbDpcIl18fHF9Y2F0Y2godSl7dWE9ZnVuY3Rpb24oRyxKLHApe3ZhciB0PWgocixKKTtkZWxldGUgcltKXTtxKEcsSixwKTtxKHIsSix0KX19fX0pKE9iamVjdCxcImdldE93blByb3BlcnR5U3ltYm9sc1wiKTtcbihmdW5jdGlvbihhKXt2YXIgYj1hLmRlZmluZVByb3BlcnR5LGM9YS5wcm90b3R5cGUsZD1jLnRvU3RyaW5nLGU7XCJpdGVyYXRvciBtYXRjaCByZXBsYWNlIHNlYXJjaCBzcGxpdCBoYXNJbnN0YW5jZSBpc0NvbmNhdFNwcmVhZGFibGUgdW5zY29wYWJsZXMgc3BlY2llcyB0b1ByaW1pdGl2ZSB0b1N0cmluZ1RhZ1wiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2lmKCEoZiBpbiBTeW1ib2wpKXN3aXRjaChiKFN5bWJvbCxmLHt2YWx1ZTpTeW1ib2woZil9KSxmKXtjYXNlIFwidG9TdHJpbmdUYWdcIjplPWEuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsXCJ0b1N0cmluZ1wiKSxlLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIGc9ZC5jYWxsKHRoaXMpLGg9dGhpc1tTeW1ib2wudG9TdHJpbmdUYWddO3JldHVyblwidW5kZWZpbmVkXCI9PT10eXBlb2YgaD9nOlwiW29iamVjdCBcIitoK1wiXVwifSxiKGMsXCJ0b1N0cmluZ1wiLGUpfX0pfSkoT2JqZWN0LFN5bWJvbCk7XG4oZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoKXtyZXR1cm4gdGhpc31iW2FdfHwoYlthXT1mdW5jdGlvbigpe3ZhciBlPTAsZj10aGlzLGc9e25leHQ6ZnVuY3Rpb24oKXt2YXIgaD1mLmxlbmd0aDw9ZTtyZXR1cm4gaD97ZG9uZTpofTp7ZG9uZTpoLHZhbHVlOmZbZSsrXX19fTtnW2FdPWQ7cmV0dXJuIGd9KTtjW2FdfHwoY1thXT1mdW5jdGlvbigpe3ZhciBlPVN0cmluZy5mcm9tQ29kZVBvaW50LGY9dGhpcyxnPTAsaD1mLmxlbmd0aCxrPXtuZXh0OmZ1bmN0aW9uKCl7dmFyIGw9aDw9ZyxtPWw/XCJcIjplKGYuY29kZVBvaW50QXQoZykpO2crPW0ubGVuZ3RoO3JldHVybiBsP3tkb25lOmx9Ontkb25lOmwsdmFsdWU6bX19fTtrW2FdPWQ7cmV0dXJuIGt9KX0pKFN5bWJvbC5pdGVyYXRvcixBcnJheS5wcm90b3R5cGUsU3RyaW5nLnByb3RvdHlwZSk7LypcblxuQ29weXJpZ2h0IChjKSAyMDE4IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcblRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG5UaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG5zdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuKi9cbnZhciBaYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO09iamVjdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcz9cIltvYmplY3QgVW5kZWZpbmVkXVwiOm51bGw9PT10aGlzP1wiW29iamVjdCBOdWxsXVwiOlphLmNhbGwodGhpcyl9O09iamVjdC5rZXlzPWZ1bmN0aW9uKGEpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKS5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuKGI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGIpKSYmYi5lbnVtZXJhYmxlfSl9O3ZhciAkYT13aW5kb3cuU3ltYm9sLml0ZXJhdG9yO1xuU3RyaW5nLnByb3RvdHlwZVskYV0mJlN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXR8fChTdHJpbmcucHJvdG90eXBlWyRhXT1mdW5jdGlvbiBhYigpe3ZhciBiLGM9dGhpcztyZXR1cm4gSGEoYWIsZnVuY3Rpb24oZCl7MT09ZC5hJiYoYj0wKTtpZigzIT1kLmEpcmV0dXJuIGI8Yy5sZW5ndGg/ZD1CYShkLGNbYl0pOihkLmE9MCxkPXZvaWQgMCksZDtiKys7ZC5hPTJ9KX0pO1NldC5wcm90b3R5cGVbJGFdfHwoU2V0LnByb3RvdHlwZVskYV09ZnVuY3Rpb24gZmIoKXt2YXIgYixjPXRoaXMsZDtyZXR1cm4gSGEoZmIsZnVuY3Rpb24oZSl7MT09ZS5hJiYoYj1bXSxjLmZvckVhY2goZnVuY3Rpb24oZil7Yi5wdXNoKGYpfSksZD0wKTtpZigzIT1lLmEpcmV0dXJuIGQ8Yi5sZW5ndGg/ZT1CYShlLGJbZF0pOihlLmE9MCxlPXZvaWQgMCksZTtkKys7ZS5hPTJ9KX0pO1xuTWFwLnByb3RvdHlwZVskYV18fChNYXAucHJvdG90eXBlWyRhXT1mdW5jdGlvbiBnYigpe3ZhciBiLGM9dGhpcyxkO3JldHVybiBIYShnYixmdW5jdGlvbihlKXsxPT1lLmEmJihiPVtdLGMuZm9yRWFjaChmdW5jdGlvbihmLGcpe2IucHVzaChbZyxmXSl9KSxkPTApO2lmKDMhPWUuYSlyZXR1cm4gZDxiLmxlbmd0aD9lPUJhKGUsYltkXSk6KGUuYT0wLGU9dm9pZCAwKSxlO2QrKztlLmE9Mn0pfSk7LypcblxuIENvcHlyaWdodCAoYykgMjAxNCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuKi9cbndpbmRvdy5XZWJDb21wb25lbnRzPXdpbmRvdy5XZWJDb21wb25lbnRzfHx7ZmxhZ3M6e319O3ZhciBoYj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzY3JpcHRbc3JjKj1cIndlYmNvbXBvbmVudHMtYnVuZGxlXCJdJyksaWI9L3djLSguKykvLEE9e307aWYoIUEubm9PcHRzKXtsb2NhdGlvbi5zZWFyY2guc2xpY2UoMSkuc3BsaXQoXCImXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7YT1hLnNwbGl0KFwiPVwiKTt2YXIgYjthWzBdJiYoYj1hWzBdLm1hdGNoKGliKSkmJihBW2JbMV1dPWFbMV18fCEwKX0pO2lmKGhiKWZvcih2YXIgamI9MCxrYj12b2lkIDA7a2I9aGIuYXR0cmlidXRlc1tqYl07amIrKylcInNyY1wiIT09a2IubmFtZSYmKEFba2IubmFtZV09a2IudmFsdWV8fCEwKTtpZihBLmxvZyYmQS5sb2cuc3BsaXQpe3ZhciBsYj1BLmxvZy5zcGxpdChcIixcIik7QS5sb2c9e307bGIuZm9yRWFjaChmdW5jdGlvbihhKXtBLmxvZ1thXT0hMH0pfWVsc2UgQS5sb2c9e319XG53aW5kb3cuV2ViQ29tcG9uZW50cy5mbGFncz1BO3ZhciBtYj1BLnNoYWR5ZG9tO2lmKG1iKXt3aW5kb3cuU2hhZHlET009d2luZG93LlNoYWR5RE9NfHx7fTt3aW5kb3cuU2hhZHlET00uZm9yY2U9bWI7dmFyIG5iPUEubm9QYXRjaDt3aW5kb3cuU2hhZHlET00ubm9QYXRjaD1cInRydWVcIj09PW5iPyEwOm5ifXZhciBvYj1BLnJlZ2lzdGVyfHxBLmNlO29iJiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMmJih3aW5kb3cuY3VzdG9tRWxlbWVudHMuZm9yY2VQb2x5ZmlsbD1vYik7LypcblxuQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcblRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG5UaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG5zdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuKi9cbmZ1bmN0aW9uIHBiKCl7fXBiLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57fX07ZnVuY3Rpb24gQihhKXthLl9fc2hhZHl8fChhLl9fc2hhZHk9bmV3IHBiKTtyZXR1cm4gYS5fX3NoYWR5fWZ1bmN0aW9uIEwoYSl7cmV0dXJuIGEmJmEuX19zaGFkeX07dmFyIE49d2luZG93LlNoYWR5RE9NfHx7fTtOLlVhPSEoIUVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvd3x8IU5vZGUucHJvdG90eXBlLmdldFJvb3ROb2RlKTt2YXIgcWI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihOb2RlLnByb3RvdHlwZSxcImZpcnN0Q2hpbGRcIik7Ti5CPSEhKHFiJiZxYi5jb25maWd1cmFibGUmJnFiLmdldCk7Ti5zYT1OLmZvcmNlfHwhTi5VYTtOLkQ9Ti5ub1BhdGNofHwhMTtOLmxhPU4ucHJlZmVyUGVyZm9ybWFuY2U7Ti51YT1cIm9uLWRlbWFuZFwiPT09Ti5EO04uSWE9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChcIlRyaWRlbnRcIik7ZnVuY3Rpb24gcmIoYSl7cmV0dXJuKGE9TChhKSkmJnZvaWQgMCE9PWEuZmlyc3RDaGlsZH1mdW5jdGlvbiBPKGEpe3JldHVybiBhIGluc3RhbmNlb2YgU2hhZG93Um9vdH1mdW5jdGlvbiBzYihhKXtyZXR1cm4oYT0oYT1MKGEpKSYmYS5yb290KSYmdGIoYSl9XG52YXIgdWI9RWxlbWVudC5wcm90b3R5cGUsdmI9dWIubWF0Y2hlc3x8dWIubWF0Y2hlc1NlbGVjdG9yfHx1Yi5tb3pNYXRjaGVzU2VsZWN0b3J8fHViLm1zTWF0Y2hlc1NlbGVjdG9yfHx1Yi5vTWF0Y2hlc1NlbGVjdG9yfHx1Yi53ZWJraXRNYXRjaGVzU2VsZWN0b3Isd2I9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIikseGI9MCx5Yj1bXTsobmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXtmb3IoO3liLmxlbmd0aDspdHJ5e3liLnNoaWZ0KCkoKX1jYXRjaChhKXt0aHJvdyB3Yi50ZXh0Q29udGVudD14YisrLGE7fX0pKS5vYnNlcnZlKHdiLHtjaGFyYWN0ZXJEYXRhOiEwfSk7ZnVuY3Rpb24gemIoYSl7eWIucHVzaChhKTt3Yi50ZXh0Q29udGVudD14YisrfXZhciBBYj0hIWRvY3VtZW50LmNvbnRhaW5zO2Z1bmN0aW9uIEJiKGEsYil7Zm9yKDtiOyl7aWYoYj09YSlyZXR1cm4hMDtiPWIuX19zaGFkeV9wYXJlbnROb2RlfXJldHVybiExfVxuZnVuY3Rpb24gQ2IoYSl7Zm9yKHZhciBiPWEubGVuZ3RoLTE7MDw9YjtiLS0pe3ZhciBjPWFbYl0sZD1jLmdldEF0dHJpYnV0ZShcImlkXCIpfHxjLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7ZCYmXCJsZW5ndGhcIiE9PWQmJmlzTmFOKGQpJiYoYVtkXT1jKX1hLml0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIGFbZV19O2EubmFtZWRJdGVtPWZ1bmN0aW9uKGUpe2lmKFwibGVuZ3RoXCIhPT1lJiZpc05hTihlKSYmYVtlXSlyZXR1cm4gYVtlXTtmb3IodmFyIGY9Y2EoYSksZz1mLm5leHQoKTshZy5kb25lO2c9Zi5uZXh0KCkpaWYoZz1nLnZhbHVlLChnLmdldEF0dHJpYnV0ZShcImlkXCIpfHxnLmdldEF0dHJpYnV0ZShcIm5hbWVcIikpPT1lKXJldHVybiBnO3JldHVybiBudWxsfTtyZXR1cm4gYX1mdW5jdGlvbiBEYihhKXt2YXIgYj1bXTtmb3IoYT1hLl9fc2hhZHlfbmF0aXZlX2ZpcnN0Q2hpbGQ7YTthPWEuX19zaGFkeV9uYXRpdmVfbmV4dFNpYmxpbmcpYi5wdXNoKGEpO3JldHVybiBifVxuZnVuY3Rpb24gRWIoYSl7dmFyIGI9W107Zm9yKGE9YS5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YTthPWEuX19zaGFkeV9uZXh0U2libGluZyliLnB1c2goYSk7cmV0dXJuIGJ9ZnVuY3Rpb24gRmIoYSxiLGMpe2MuY29uZmlndXJhYmxlPSEwO2lmKGMudmFsdWUpYVtiXT1jLnZhbHVlO2Vsc2UgdHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIsYyl9Y2F0Y2goZCl7fX1mdW5jdGlvbiBQKGEsYixjLGQpe2M9dm9pZCAwPT09Yz9cIlwiOmM7Zm9yKHZhciBlIGluIGIpZCYmMDw9ZC5pbmRleE9mKGUpfHxGYihhLGMrZSxiW2VdKX1mdW5jdGlvbiBHYihhLGIpe2Zvcih2YXIgYyBpbiBiKWMgaW4gYSYmRmIoYSxjLGJbY10pfWZ1bmN0aW9uIFEoYSl7dmFyIGI9e307T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZm9yRWFjaChmdW5jdGlvbihjKXtiW2NdPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxjKX0pO3JldHVybiBifVxuZnVuY3Rpb24gSGIoYSxiKXtmb3IodmFyIGM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYiksZD0wLGU7ZDxjLmxlbmd0aDtkKyspZT1jW2RdLGFbZV09YltlXX07dmFyIEliPVtdLEpiO2Z1bmN0aW9uIEtiKGEpe0pifHwoSmI9ITAsemIoTGIpKTtJYi5wdXNoKGEpfWZ1bmN0aW9uIExiKCl7SmI9ITE7Zm9yKHZhciBhPSEhSWIubGVuZ3RoO0liLmxlbmd0aDspSWIuc2hpZnQoKSgpO3JldHVybiBhfUxiLmxpc3Q9SWI7ZnVuY3Rpb24gTWIoKXt0aGlzLmE9ITE7dGhpcy5hZGRlZE5vZGVzPVtdO3RoaXMucmVtb3ZlZE5vZGVzPVtdO3RoaXMuaWE9bmV3IFNldH1mdW5jdGlvbiBOYihhKXthLmF8fChhLmE9ITAsemIoZnVuY3Rpb24oKXthLmZsdXNoKCl9KSl9TWIucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5hKXt0aGlzLmE9ITE7dmFyIGE9dGhpcy50YWtlUmVjb3JkcygpO2EubGVuZ3RoJiZ0aGlzLmlhLmZvckVhY2goZnVuY3Rpb24oYil7YihhKX0pfX07TWIucHJvdG90eXBlLnRha2VSZWNvcmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5hZGRlZE5vZGVzLmxlbmd0aHx8dGhpcy5yZW1vdmVkTm9kZXMubGVuZ3RoKXt2YXIgYT1be2FkZGVkTm9kZXM6dGhpcy5hZGRlZE5vZGVzLHJlbW92ZWROb2Rlczp0aGlzLnJlbW92ZWROb2Rlc31dO3RoaXMuYWRkZWROb2Rlcz1bXTt0aGlzLnJlbW92ZWROb2Rlcz1bXTtyZXR1cm4gYX1yZXR1cm5bXX07XG5mdW5jdGlvbiBPYihhLGIpe3ZhciBjPUIoYSk7Yy5afHwoYy5aPW5ldyBNYik7Yy5aLmlhLmFkZChiKTt2YXIgZD1jLlo7cmV0dXJue01hOmIsUzpkLE5hOmEsdGFrZVJlY29yZHM6ZnVuY3Rpb24oKXtyZXR1cm4gZC50YWtlUmVjb3JkcygpfX19ZnVuY3Rpb24gUGIoYSl7dmFyIGI9YSYmYS5TO2ImJihiLmlhLmRlbGV0ZShhLk1hKSxiLmlhLnNpemV8fChCKGEuTmEpLlo9bnVsbCkpfVxuZnVuY3Rpb24gUWIoYSxiKXt2YXIgYz1iLmdldFJvb3ROb2RlKCk7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGQpe3ZhciBlPWM9PT1kLnRhcmdldC5nZXRSb290Tm9kZSgpO2lmKGUmJmQuYWRkZWROb2Rlcyl7aWYoZT1bXS5zbGljZS5jYWxsKGQuYWRkZWROb2RlcykuZmlsdGVyKGZ1bmN0aW9uKGYpe3JldHVybiBjPT09Zi5nZXRSb290Tm9kZSgpfSksZS5sZW5ndGgpcmV0dXJuIGQ9T2JqZWN0LmNyZWF0ZShkKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCxcImFkZGVkTm9kZXNcIix7dmFsdWU6ZSxjb25maWd1cmFibGU6ITB9KSxkfWVsc2UgaWYoZSlyZXR1cm4gZH0pLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4gZH0pfTt2YXIgUmI9L1smXFx1MDBBMFwiXS9nLFNiPS9bJlxcdTAwQTA8Pl0vZztmdW5jdGlvbiBUYihhKXtzd2l0Y2goYSl7Y2FzZSBcIiZcIjpyZXR1cm5cIiZhbXA7XCI7Y2FzZSBcIjxcIjpyZXR1cm5cIiZsdDtcIjtjYXNlIFwiPlwiOnJldHVyblwiJmd0O1wiO2Nhc2UgJ1wiJzpyZXR1cm5cIiZxdW90O1wiO2Nhc2UgXCJcXHUwMGEwXCI6cmV0dXJuXCImbmJzcDtcIn19ZnVuY3Rpb24gVWIoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKyliW2FbY11dPSEwO3JldHVybiBifXZhciBWYj1VYihcImFyZWEgYmFzZSBiciBjb2wgY29tbWFuZCBlbWJlZCBociBpbWcgaW5wdXQga2V5Z2VuIGxpbmsgbWV0YSBwYXJhbSBzb3VyY2UgdHJhY2sgd2JyXCIuc3BsaXQoXCIgXCIpKSxXYj1VYihcInN0eWxlIHNjcmlwdCB4bXAgaWZyYW1lIG5vZW1iZWQgbm9mcmFtZXMgcGxhaW50ZXh0IG5vc2NyaXB0XCIuc3BsaXQoXCIgXCIpKTtcbmZ1bmN0aW9uIFpiKGEsYil7XCJ0ZW1wbGF0ZVwiPT09YS5sb2NhbE5hbWUmJihhPWEuY29udGVudCk7Zm9yKHZhciBjPVwiXCIsZD1iP2IoYSk6YS5jaGlsZE5vZGVzLGU9MCxmPWQubGVuZ3RoLGc9dm9pZCAwO2U8ZiYmKGc9ZFtlXSk7ZSsrKXthOnt2YXIgaD1nO3ZhciBrPWEsbD1iO3N3aXRjaChoLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOms9aC5sb2NhbE5hbWU7Zm9yKHZhciBtPVwiPFwiK2sscT1oLmF0dHJpYnV0ZXMsSD0wLEU7RT1xW0hdO0grKyltKz1cIiBcIitFLm5hbWUrJz1cIicrRS52YWx1ZS5yZXBsYWNlKFJiLFRiKSsnXCInO20rPVwiPlwiO2g9VmJba10/bTptK1piKGgsbCkrXCI8L1wiK2srXCI+XCI7YnJlYWsgYTtjYXNlIE5vZGUuVEVYVF9OT0RFOmg9aC5kYXRhO2g9ayYmV2Jbay5sb2NhbE5hbWVdP2g6aC5yZXBsYWNlKFNiLFRiKTticmVhayBhO2Nhc2UgTm9kZS5DT01NRU5UX05PREU6aD1cIlxceDNjIS0tXCIraC5kYXRhK1wiLS1cXHgzZVwiO2JyZWFrIGE7ZGVmYXVsdDp0aHJvdyB3aW5kb3cuY29uc29sZS5lcnJvcihoKSxcbkVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO319Yys9aH1yZXR1cm4gY307dmFyICRiPU4uQixhYz17cXVlcnlTZWxlY3RvcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9xdWVyeVNlbGVjdG9yKGEpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3F1ZXJ5U2VsZWN0b3JBbGwoYSl9fSxiYz17fTtmdW5jdGlvbiBjYyhhKXtiY1thXT1mdW5jdGlvbihiKXtyZXR1cm4gYltcIl9fc2hhZHlfbmF0aXZlX1wiK2FdfX1mdW5jdGlvbiBkYyhhLGIpe1AoYSxiLFwiX19zaGFkeV9uYXRpdmVfXCIpO2Zvcih2YXIgYyBpbiBiKWNjKGMpfWZ1bmN0aW9uIFMoYSxiKXtiPXZvaWQgMD09PWI/W106Yjtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXSxlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxkKTtlJiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsXCJfX3NoYWR5X25hdGl2ZV9cIitkLGUpLGUudmFsdWU/YWNbZF18fChhY1tkXT1lLnZhbHVlKTpjYyhkKSl9fVxudmFyIGVjPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZG9jdW1lbnQsTm9kZUZpbHRlci5TSE9XX0FMTCxudWxsLCExKSxmYz1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKGRvY3VtZW50LE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5ULG51bGwsITEpLGdjPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudChcImluZXJ0XCIpO2Z1bmN0aW9uIGhjKGEpe2Zvcih2YXIgYjtiPWEuX19zaGFkeV9uYXRpdmVfZmlyc3RDaGlsZDspYS5fX3NoYWR5X25hdGl2ZV9yZW1vdmVDaGlsZChiKX12YXIgaWM9W1wiZmlyc3RFbGVtZW50Q2hpbGRcIixcImxhc3RFbGVtZW50Q2hpbGRcIixcImNoaWxkcmVuXCIsXCJjaGlsZEVsZW1lbnRDb3VudFwiXSxqYz1bXCJxdWVyeVNlbGVjdG9yXCIsXCJxdWVyeVNlbGVjdG9yQWxsXCJdO1xuZnVuY3Rpb24ga2MoKXt2YXIgYT1bXCJkaXNwYXRjaEV2ZW50XCIsXCJhZGRFdmVudExpc3RlbmVyXCIsXCJyZW1vdmVFdmVudExpc3RlbmVyXCJdO3dpbmRvdy5FdmVudFRhcmdldD9TKHdpbmRvdy5FdmVudFRhcmdldC5wcm90b3R5cGUsYSk6KFMoTm9kZS5wcm90b3R5cGUsYSksUyhXaW5kb3cucHJvdG90eXBlLGEpKTskYj9TKE5vZGUucHJvdG90eXBlLFwicGFyZW50Tm9kZSBmaXJzdENoaWxkIGxhc3RDaGlsZCBwcmV2aW91c1NpYmxpbmcgbmV4dFNpYmxpbmcgY2hpbGROb2RlcyBwYXJlbnRFbGVtZW50IHRleHRDb250ZW50XCIuc3BsaXQoXCIgXCIpKTpkYyhOb2RlLnByb3RvdHlwZSx7cGFyZW50Tm9kZTp7Z2V0OmZ1bmN0aW9uKCl7ZWMuY3VycmVudE5vZGU9dGhpcztyZXR1cm4gZWMucGFyZW50Tm9kZSgpfX0sZmlyc3RDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7ZWMuY3VycmVudE5vZGU9dGhpcztyZXR1cm4gZWMuZmlyc3RDaGlsZCgpfX0sbGFzdENoaWxkOntnZXQ6ZnVuY3Rpb24oKXtlYy5jdXJyZW50Tm9kZT1cbnRoaXM7cmV0dXJuIGVjLmxhc3RDaGlsZCgpfX0scHJldmlvdXNTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtlYy5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBlYy5wcmV2aW91c1NpYmxpbmcoKX19LG5leHRTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtlYy5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBlYy5uZXh0U2libGluZygpfX0sY2hpbGROb2Rlczp7Z2V0OmZ1bmN0aW9uKCl7dmFyIGI9W107ZWMuY3VycmVudE5vZGU9dGhpcztmb3IodmFyIGM9ZWMuZmlyc3RDaGlsZCgpO2M7KWIucHVzaChjKSxjPWVjLm5leHRTaWJsaW5nKCk7cmV0dXJuIGJ9fSxwYXJlbnRFbGVtZW50OntnZXQ6ZnVuY3Rpb24oKXtmYy5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBmYy5wYXJlbnROb2RlKCl9fSx0ZXh0Q29udGVudDp7Z2V0OmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMubm9kZVR5cGUpe2Nhc2UgTm9kZS5FTEVNRU5UX05PREU6Y2FzZSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6Zm9yKHZhciBiPVxuZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcih0aGlzLE5vZGVGaWx0ZXIuU0hPV19URVhULG51bGwsITEpLGM9XCJcIixkO2Q9Yi5uZXh0Tm9kZSgpOyljKz1kLm5vZGVWYWx1ZTtyZXR1cm4gYztkZWZhdWx0OnJldHVybiB0aGlzLm5vZGVWYWx1ZX19LHNldDpmdW5jdGlvbihiKXtpZihcInVuZGVmaW5lZFwiPT09dHlwZW9mIGJ8fG51bGw9PT1iKWI9XCJcIjtzd2l0Y2godGhpcy5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpoYyh0aGlzKTsoMDxiLmxlbmd0aHx8dGhpcy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKSYmdGhpcy5fX3NoYWR5X25hdGl2ZV9pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYiksdm9pZCAwKTticmVhaztkZWZhdWx0OnRoaXMubm9kZVZhbHVlPWJ9fX19KTtTKE5vZGUucHJvdG90eXBlLFwiYXBwZW5kQ2hpbGQgaW5zZXJ0QmVmb3JlIHJlbW92ZUNoaWxkIHJlcGxhY2VDaGlsZCBjbG9uZU5vZGUgY29udGFpbnNcIi5zcGxpdChcIiBcIikpO1xuUyhIVE1MRWxlbWVudC5wcm90b3R5cGUsW1wicGFyZW50RWxlbWVudFwiLFwiY29udGFpbnNcIl0pO2E9e2ZpcnN0RWxlbWVudENoaWxkOntnZXQ6ZnVuY3Rpb24oKXtmYy5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBmYy5maXJzdENoaWxkKCl9fSxsYXN0RWxlbWVudENoaWxkOntnZXQ6ZnVuY3Rpb24oKXtmYy5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBmYy5sYXN0Q2hpbGQoKX19LGNoaWxkcmVuOntnZXQ6ZnVuY3Rpb24oKXt2YXIgYj1bXTtmYy5jdXJyZW50Tm9kZT10aGlzO2Zvcih2YXIgYz1mYy5maXJzdENoaWxkKCk7YzspYi5wdXNoKGMpLGM9ZmMubmV4dFNpYmxpbmcoKTtyZXR1cm4gQ2IoYil9fSxjaGlsZEVsZW1lbnRDb3VudDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4/dGhpcy5jaGlsZHJlbi5sZW5ndGg6MH19fTskYj8oUyhFbGVtZW50LnByb3RvdHlwZSxpYyksUyhFbGVtZW50LnByb3RvdHlwZSxbXCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nXCIsXCJuZXh0RWxlbWVudFNpYmxpbmdcIixcblwiaW5uZXJIVE1MXCIsXCJjbGFzc05hbWVcIl0pLFMoSFRNTEVsZW1lbnQucHJvdG90eXBlLFtcImNoaWxkcmVuXCIsXCJpbm5lckhUTUxcIixcImNsYXNzTmFtZVwiXSkpOihkYyhFbGVtZW50LnByb3RvdHlwZSxhKSxkYyhFbGVtZW50LnByb3RvdHlwZSx7cHJldmlvdXNFbGVtZW50U2libGluZzp7Z2V0OmZ1bmN0aW9uKCl7ZmMuY3VycmVudE5vZGU9dGhpcztyZXR1cm4gZmMucHJldmlvdXNTaWJsaW5nKCl9fSxuZXh0RWxlbWVudFNpYmxpbmc6e2dldDpmdW5jdGlvbigpe2ZjLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIGZjLm5leHRTaWJsaW5nKCl9fSxpbm5lckhUTUw6e2dldDpmdW5jdGlvbigpe3JldHVybiBaYih0aGlzLERiKX0sc2V0OmZ1bmN0aW9uKGIpe3ZhciBjPVwidGVtcGxhdGVcIj09PXRoaXMubG9jYWxOYW1lP3RoaXMuY29udGVudDp0aGlzO2hjKGMpO3ZhciBkPXRoaXMubG9jYWxOYW1lfHxcImRpdlwiO2Q9dGhpcy5uYW1lc3BhY2VVUkkmJnRoaXMubmFtZXNwYWNlVVJJIT09Z2MubmFtZXNwYWNlVVJJP1xuZ2MuY3JlYXRlRWxlbWVudE5TKHRoaXMubmFtZXNwYWNlVVJJLGQpOmdjLmNyZWF0ZUVsZW1lbnQoZCk7ZC5pbm5lckhUTUw9Yjtmb3IoYj1cInRlbXBsYXRlXCI9PT10aGlzLmxvY2FsTmFtZT9kLmNvbnRlbnQ6ZDtkPWIuX19zaGFkeV9uYXRpdmVfZmlyc3RDaGlsZDspYy5fX3NoYWR5X25hdGl2ZV9pbnNlcnRCZWZvcmUoZCx2b2lkIDApfX0sY2xhc3NOYW1lOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIn0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixiKX19fSkpO1MoRWxlbWVudC5wcm90b3R5cGUsXCJzZXRBdHRyaWJ1dGUgZ2V0QXR0cmlidXRlIGhhc0F0dHJpYnV0ZSByZW1vdmVBdHRyaWJ1dGUgZm9jdXMgYmx1clwiLnNwbGl0KFwiIFwiKSk7UyhFbGVtZW50LnByb3RvdHlwZSxqYyk7UyhIVE1MRWxlbWVudC5wcm90b3R5cGUsW1wiZm9jdXNcIixcImJsdXJcIl0pO3dpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50JiZcblMod2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQucHJvdG90eXBlLFtcImlubmVySFRNTFwiXSk7JGI/UyhEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZSxpYyk6ZGMoRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUsYSk7UyhEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZSxqYyk7JGI/KFMoRG9jdW1lbnQucHJvdG90eXBlLGljKSxTKERvY3VtZW50LnByb3RvdHlwZSxbXCJhY3RpdmVFbGVtZW50XCJdKSk6ZGMoRG9jdW1lbnQucHJvdG90eXBlLGEpO1MoRG9jdW1lbnQucHJvdG90eXBlLFtcImltcG9ydE5vZGVcIixcImdldEVsZW1lbnRCeUlkXCJdKTtTKERvY3VtZW50LnByb3RvdHlwZSxqYyl9O3ZhciBsYz1RKHtnZXQgY2hpbGROb2Rlcygpe3JldHVybiB0aGlzLl9fc2hhZHlfY2hpbGROb2Rlc30sZ2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2ZpcnN0Q2hpbGR9LGdldCBsYXN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2xhc3RDaGlsZH0sZ2V0IGNoaWxkRWxlbWVudENvdW50KCl7cmV0dXJuIHRoaXMuX19zaGFkeV9jaGlsZEVsZW1lbnRDb3VudH0sZ2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9jaGlsZHJlbn0sZ2V0IGZpcnN0RWxlbWVudENoaWxkKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9maXJzdEVsZW1lbnRDaGlsZH0sZ2V0IGxhc3RFbGVtZW50Q2hpbGQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2xhc3RFbGVtZW50Q2hpbGR9LGdldCBzaGFkb3dSb290KCl7cmV0dXJuIHRoaXMuX19zaGFkeV9zaGFkb3dSb290fX0pLG1jPVEoe2dldCB0ZXh0Q29udGVudCgpe3JldHVybiB0aGlzLl9fc2hhZHlfdGV4dENvbnRlbnR9LHNldCB0ZXh0Q29udGVudChhKXt0aGlzLl9fc2hhZHlfdGV4dENvbnRlbnQ9XG5hfSxnZXQgaW5uZXJIVE1MKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9pbm5lckhUTUx9LHNldCBpbm5lckhUTUwoYSl7cmV0dXJuIHRoaXMuX19zaGFkeV9pbm5lckhUTUw9YX19KSxuYz1RKHtnZXQgcGFyZW50RWxlbWVudCgpe3JldHVybiB0aGlzLl9fc2hhZHlfcGFyZW50RWxlbWVudH0sZ2V0IHBhcmVudE5vZGUoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3BhcmVudE5vZGV9LGdldCBuZXh0U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfbmV4dFNpYmxpbmd9LGdldCBwcmV2aW91c1NpYmxpbmcoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3ByZXZpb3VzU2libGluZ30sZ2V0IG5leHRFbGVtZW50U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfbmV4dEVsZW1lbnRTaWJsaW5nfSxnZXQgcHJldmlvdXNFbGVtZW50U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfcHJldmlvdXNFbGVtZW50U2libGluZ30sZ2V0IGNsYXNzTmFtZSgpe3JldHVybiB0aGlzLl9fc2hhZHlfY2xhc3NOYW1lfSxcbnNldCBjbGFzc05hbWUoYSl7cmV0dXJuIHRoaXMuX19zaGFkeV9jbGFzc05hbWU9YX19KTtmdW5jdGlvbiBvYyhhKXtmb3IodmFyIGIgaW4gYSl7dmFyIGM9YVtiXTtjJiYoYy5lbnVtZXJhYmxlPSExKX19b2MobGMpO29jKG1jKTtvYyhuYyk7dmFyIHBjPU4uQnx8ITA9PT1OLkQscWM9cGM/ZnVuY3Rpb24oKXt9OmZ1bmN0aW9uKGEpe3ZhciBiPUIoYSk7Yi5LYXx8KGIuS2E9ITAsR2IoYSxuYykpfSxyYz1wYz9mdW5jdGlvbigpe306ZnVuY3Rpb24oYSl7dmFyIGI9QihhKTtiLkphfHwoYi5KYT0hMCxHYihhLGxjKSx3aW5kb3cuY3VzdG9tRWxlbWVudHMmJndpbmRvdy5jdXN0b21FbGVtZW50cy5wb2x5ZmlsbFdyYXBGbHVzaENhbGxiYWNrJiYhTi5EfHxHYihhLG1jKSl9O3ZhciBzYz1cIl9fZXZlbnRXcmFwcGVyc1wiK0RhdGUubm93KCksdGM9ZnVuY3Rpb24oKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV2ZW50LnByb3RvdHlwZSxcImNvbXBvc2VkXCIpO3JldHVybiBhP2Z1bmN0aW9uKGIpe3JldHVybiBhLmdldC5jYWxsKGIpfTpudWxsfSgpLHVjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe312YXIgYj0hMSxjPXtnZXQgY2FwdHVyZSgpe2I9ITA7cmV0dXJuITF9fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RcIixhLGMpO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLGEsYyk7cmV0dXJuIGJ9KCk7ZnVuY3Rpb24gdmMoYSl7aWYoYSYmXCJvYmplY3RcIj09PXR5cGVvZiBhKXt2YXIgYj0hIWEuY2FwdHVyZTt2YXIgYz0hIWEub25jZTt2YXIgZD0hIWEucGFzc2l2ZTt2YXIgZT1hLk99ZWxzZSBiPSEhYSxkPWM9ITE7cmV0dXJue0dhOmUsY2FwdHVyZTpiLG9uY2U6YyxwYXNzaXZlOmQsRmE6dWM/YTpifX1cbnZhciB3Yz17Ymx1cjohMCxmb2N1czohMCxmb2N1c2luOiEwLGZvY3Vzb3V0OiEwLGNsaWNrOiEwLGRibGNsaWNrOiEwLG1vdXNlZG93bjohMCxtb3VzZWVudGVyOiEwLG1vdXNlbGVhdmU6ITAsbW91c2Vtb3ZlOiEwLG1vdXNlb3V0OiEwLG1vdXNlb3ZlcjohMCxtb3VzZXVwOiEwLHdoZWVsOiEwLGJlZm9yZWlucHV0OiEwLGlucHV0OiEwLGtleWRvd246ITAsa2V5dXA6ITAsY29tcG9zaXRpb25zdGFydDohMCxjb21wb3NpdGlvbnVwZGF0ZTohMCxjb21wb3NpdGlvbmVuZDohMCx0b3VjaHN0YXJ0OiEwLHRvdWNoZW5kOiEwLHRvdWNobW92ZTohMCx0b3VjaGNhbmNlbDohMCxwb2ludGVyb3ZlcjohMCxwb2ludGVyZW50ZXI6ITAscG9pbnRlcmRvd246ITAscG9pbnRlcm1vdmU6ITAscG9pbnRlcnVwOiEwLHBvaW50ZXJjYW5jZWw6ITAscG9pbnRlcm91dDohMCxwb2ludGVybGVhdmU6ITAsZ290cG9pbnRlcmNhcHR1cmU6ITAsbG9zdHBvaW50ZXJjYXB0dXJlOiEwLGRyYWdzdGFydDohMCxcbmRyYWc6ITAsZHJhZ2VudGVyOiEwLGRyYWdsZWF2ZTohMCxkcmFnb3ZlcjohMCxkcm9wOiEwLGRyYWdlbmQ6ITAsRE9NQWN0aXZhdGU6ITAsRE9NRm9jdXNJbjohMCxET01Gb2N1c091dDohMCxrZXlwcmVzczohMH0seGM9e0RPTUF0dHJNb2RpZmllZDohMCxET01BdHRyaWJ1dGVOYW1lQ2hhbmdlZDohMCxET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQ6ITAsRE9NRWxlbWVudE5hbWVDaGFuZ2VkOiEwLERPTU5vZGVJbnNlcnRlZDohMCxET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQ6ITAsRE9NTm9kZVJlbW92ZWQ6ITAsRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQ6ITAsRE9NU3VidHJlZU1vZGlmaWVkOiEwfTtmdW5jdGlvbiB5YyhhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIE5vZGU/YS5fX3NoYWR5X2dldFJvb3ROb2RlKCk6YX1cbmZ1bmN0aW9uIHpjKGEsYil7dmFyIGM9W10sZD1hO2ZvcihhPXljKGEpO2Q7KWMucHVzaChkKSxkLl9fc2hhZHlfYXNzaWduZWRTbG90P2Q9ZC5fX3NoYWR5X2Fzc2lnbmVkU2xvdDpkLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFJiZkLmhvc3QmJihifHxkIT09YSk/ZD1kLmhvc3Q6ZD1kLl9fc2hhZHlfcGFyZW50Tm9kZTtjW2MubGVuZ3RoLTFdPT09ZG9jdW1lbnQmJmMucHVzaCh3aW5kb3cpO3JldHVybiBjfWZ1bmN0aW9uIEFjKGEpe2EuX19jb21wb3NlZFBhdGh8fChhLl9fY29tcG9zZWRQYXRoPXpjKGEudGFyZ2V0LCEwKSk7cmV0dXJuIGEuX19jb21wb3NlZFBhdGh9ZnVuY3Rpb24gQmMoYSxiKXtpZighTylyZXR1cm4gYTthPXpjKGEsITApO2Zvcih2YXIgYz0wLGQsZT12b2lkIDAsZixnPXZvaWQgMDtjPGIubGVuZ3RoO2MrKylpZihkPWJbY10sZj15YyhkKSxmIT09ZSYmKGc9YS5pbmRleE9mKGYpLGU9ZiksIU8oZil8fC0xPGcpcmV0dXJuIGR9XG5mdW5jdGlvbiBDYyhhKXtmdW5jdGlvbiBiKGMsZCl7Yz1uZXcgYShjLGQpO2MuX19jb21wb3NlZD1kJiYhIWQuY29tcG9zZWQ7cmV0dXJuIGN9Yi5fX3Byb3RvX189YTtiLnByb3RvdHlwZT1hLnByb3RvdHlwZTtyZXR1cm4gYn12YXIgRGM9e2ZvY3VzOiEwLGJsdXI6ITB9O2Z1bmN0aW9uIEVjKGEpe3JldHVybiBhLl9fdGFyZ2V0IT09YS50YXJnZXR8fGEuX19yZWxhdGVkVGFyZ2V0IT09YS5yZWxhdGVkVGFyZ2V0fWZ1bmN0aW9uIEZjKGEsYixjKXtpZihjPWIuX19oYW5kbGVycyYmYi5fX2hhbmRsZXJzW2EudHlwZV0mJmIuX19oYW5kbGVyc1thLnR5cGVdW2NdKWZvcih2YXIgZD0wLGU7KGU9Y1tkXSkmJighRWMoYSl8fGEudGFyZ2V0IT09YS5yZWxhdGVkVGFyZ2V0KSYmKGUuY2FsbChiLGEpLCFhLl9faW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKTtkKyspO31cbmZ1bmN0aW9uIEdjKGEpe3ZhciBiPWEuY29tcG9zZWRQYXRoKCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsXCJjdXJyZW50VGFyZ2V0XCIse2dldDpmdW5jdGlvbigpe3JldHVybiBkfSxjb25maWd1cmFibGU6ITB9KTtmb3IodmFyIGM9Yi5sZW5ndGgtMTswPD1jO2MtLSl7dmFyIGQ9YltjXTtGYyhhLGQsXCJjYXB0dXJlXCIpO2lmKGEubWEpcmV0dXJufU9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwiZXZlbnRQaGFzZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRXZlbnQuQVRfVEFSR0VUfX0pO3ZhciBlO2ZvcihjPTA7YzxiLmxlbmd0aDtjKyspe2Q9YltjXTt2YXIgZj1MKGQpO2Y9ZiYmZi5yb290O2lmKDA9PT1jfHxmJiZmPT09ZSlpZihGYyhhLGQsXCJidWJibGVcIiksZCE9PXdpbmRvdyYmKGU9ZC5fX3NoYWR5X2dldFJvb3ROb2RlKCkpLGEubWEpYnJlYWt9fVxuZnVuY3Rpb24gSGMoYSxiLGMsZCxlLGYpe2Zvcih2YXIgZz0wO2c8YS5sZW5ndGg7ZysrKXt2YXIgaD1hW2ddLGs9aC50eXBlLGw9aC5jYXB0dXJlLG09aC5vbmNlLHE9aC5wYXNzaXZlO2lmKGI9PT1oLm5vZGUmJmM9PT1rJiZkPT09bCYmZT09PW0mJmY9PT1xKXJldHVybiBnfXJldHVybi0xfWZ1bmN0aW9uIEljKGEpe0xiKCk7cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfZGlzcGF0Y2hFdmVudChhKX1cbmZ1bmN0aW9uIEpjKGEsYixjKXt2YXIgZD12YyhjKSxlPWQuY2FwdHVyZSxmPWQub25jZSxnPWQucGFzc2l2ZSxoPWQuR2E7ZD1kLkZhO2lmKGIpe3ZhciBrPXR5cGVvZiBiO2lmKFwiZnVuY3Rpb25cIj09PWt8fFwib2JqZWN0XCI9PT1rKWlmKFwib2JqZWN0XCIhPT1rfHxiLmhhbmRsZUV2ZW50JiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi5oYW5kbGVFdmVudCl7aWYoeGNbYV0pcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfYWRkRXZlbnRMaXN0ZW5lcihhLGIsZCk7dmFyIGw9aHx8dGhpcztpZihoPWJbc2NdKXtpZigtMTxIYyhoLGwsYSxlLGYsZykpcmV0dXJufWVsc2UgYltzY109W107aD1mdW5jdGlvbihtKXtmJiZ0aGlzLl9fc2hhZHlfcmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGIsYyk7bS5fX3RhcmdldHx8S2MobSk7aWYobCE9PXRoaXMpe3ZhciBxPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSxcImN1cnJlbnRUYXJnZXRcIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KG0sXCJjdXJyZW50VGFyZ2V0XCIsXG57Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGNvbmZpZ3VyYWJsZTohMH0pfW0uX19wcmV2aW91c0N1cnJlbnRUYXJnZXQ9bS5jdXJyZW50VGFyZ2V0O2lmKCFPKGwpJiZcInNsb3RcIiE9PWwubG9jYWxOYW1lfHwtMSE9bS5jb21wb3NlZFBhdGgoKS5pbmRleE9mKGwpKWlmKG0uY29tcG9zZWR8fC0xPG0uY29tcG9zZWRQYXRoKCkuaW5kZXhPZihsKSlpZihFYyhtKSYmbS50YXJnZXQ9PT1tLnJlbGF0ZWRUYXJnZXQpbS5ldmVudFBoYXNlPT09RXZlbnQuQlVCQkxJTkdfUEhBU0UmJm0uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7ZWxzZSBpZihtLmV2ZW50UGhhc2U9PT1FdmVudC5DQVBUVVJJTkdfUEhBU0V8fG0uYnViYmxlc3x8bS50YXJnZXQ9PT1sfHxsIGluc3RhbmNlb2YgV2luZG93KXt2YXIgSD1cImZ1bmN0aW9uXCI9PT1rP2IuY2FsbChsLG0pOmIuaGFuZGxlRXZlbnQmJmIuaGFuZGxlRXZlbnQobSk7bCE9PXRoaXMmJihxPyhPYmplY3QuZGVmaW5lUHJvcGVydHkobSxcImN1cnJlbnRUYXJnZXRcIixcbnEpLHE9bnVsbCk6ZGVsZXRlIG0uY3VycmVudFRhcmdldCk7cmV0dXJuIEh9fTtiW3NjXS5wdXNoKHtub2RlOmwsdHlwZTphLGNhcHR1cmU6ZSxvbmNlOmYscGFzc2l2ZTpnLGxiOmh9KTtEY1thXT8odGhpcy5fX2hhbmRsZXJzPXRoaXMuX19oYW5kbGVyc3x8e30sdGhpcy5fX2hhbmRsZXJzW2FdPXRoaXMuX19oYW5kbGVyc1thXXx8e2NhcHR1cmU6W10sYnViYmxlOltdfSx0aGlzLl9faGFuZGxlcnNbYV1bZT9cImNhcHR1cmVcIjpcImJ1YmJsZVwiXS5wdXNoKGgpKTp0aGlzLl9fc2hhZHlfbmF0aXZlX2FkZEV2ZW50TGlzdGVuZXIoYSxoLGQpfX19XG5mdW5jdGlvbiBMYyhhLGIsYyl7aWYoYil7dmFyIGQ9dmMoYyk7Yz1kLmNhcHR1cmU7dmFyIGU9ZC5vbmNlLGY9ZC5wYXNzaXZlLGc9ZC5HYTtkPWQuRmE7aWYoeGNbYV0pcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfcmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGIsZCk7dmFyIGg9Z3x8dGhpcztnPXZvaWQgMDt2YXIgaz1udWxsO3RyeXtrPWJbc2NdfWNhdGNoKGwpe31rJiYoZT1IYyhrLGgsYSxjLGUsZiksLTE8ZSYmKGc9ay5zcGxpY2UoZSwxKVswXS5sYixrLmxlbmd0aHx8KGJbc2NdPXZvaWQgMCkpKTt0aGlzLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxnfHxiLGQpO2cmJkRjW2FdJiZ0aGlzLl9faGFuZGxlcnMmJnRoaXMuX19oYW5kbGVyc1thXSYmKGE9dGhpcy5fX2hhbmRsZXJzW2FdW2M/XCJjYXB0dXJlXCI6XCJidWJibGVcIl0sYj1hLmluZGV4T2YoZyksLTE8YiYmYS5zcGxpY2UoYiwxKSl9fVxuZnVuY3Rpb24gTWMoKXtmb3IodmFyIGEgaW4gRGMpd2luZG93Ll9fc2hhZHlfbmF0aXZlX2FkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihiKXtiLl9fdGFyZ2V0fHwoS2MoYiksR2MoYikpfSwhMCl9XG52YXIgTmM9USh7Z2V0IGNvbXBvc2VkKCl7dm9pZCAwPT09dGhpcy5fX2NvbXBvc2VkJiYodGM/dGhpcy5fX2NvbXBvc2VkPVwiZm9jdXNpblwiPT09dGhpcy50eXBlfHxcImZvY3Vzb3V0XCI9PT10aGlzLnR5cGV8fHRjKHRoaXMpOiExIT09dGhpcy5pc1RydXN0ZWQmJih0aGlzLl9fY29tcG9zZWQ9d2NbdGhpcy50eXBlXSkpO3JldHVybiB0aGlzLl9fY29tcG9zZWR8fCExfSxjb21wb3NlZFBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9fY29tcG9zZWRQYXRofHwodGhpcy5fX2NvbXBvc2VkUGF0aD16Yyh0aGlzLl9fdGFyZ2V0LHRoaXMuY29tcG9zZWQpKTtyZXR1cm4gdGhpcy5fX2NvbXBvc2VkUGF0aH0sZ2V0IHRhcmdldCgpe3JldHVybiBCYyh0aGlzLmN1cnJlbnRUYXJnZXR8fHRoaXMuX19wcmV2aW91c0N1cnJlbnRUYXJnZXQsdGhpcy5jb21wb3NlZFBhdGgoKSl9LGdldCByZWxhdGVkVGFyZ2V0KCl7aWYoIXRoaXMuX19yZWxhdGVkVGFyZ2V0KXJldHVybiBudWxsO3RoaXMuX19yZWxhdGVkVGFyZ2V0Q29tcG9zZWRQYXRofHxcbih0aGlzLl9fcmVsYXRlZFRhcmdldENvbXBvc2VkUGF0aD16Yyh0aGlzLl9fcmVsYXRlZFRhcmdldCwhMCkpO3JldHVybiBCYyh0aGlzLmN1cnJlbnRUYXJnZXR8fHRoaXMuX19wcmV2aW91c0N1cnJlbnRUYXJnZXQsdGhpcy5fX3JlbGF0ZWRUYXJnZXRDb21wb3NlZFBhdGgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtFdmVudC5wcm90b3R5cGUuc3RvcFByb3BhZ2F0aW9uLmNhbGwodGhpcyk7dGhpcy5tYT0hMH0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7RXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbi5jYWxsKHRoaXMpO3RoaXMubWE9dGhpcy5fX2ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD0hMH19KTtcbmZ1bmN0aW9uIEtjKGEpe2EuX190YXJnZXQ9YS50YXJnZXQ7YS5fX3JlbGF0ZWRUYXJnZXQ9YS5yZWxhdGVkVGFyZ2V0O2lmKE4uQil7dmFyIGI9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpO2lmKCFiLmhhc093blByb3BlcnR5KFwiX19zaGFkeV9wYXRjaGVkUHJvdG9cIikpe3ZhciBjPU9iamVjdC5jcmVhdGUoYik7Yy5fX3NoYWR5X3NvdXJjZVByb3RvPWI7UChjLE5jKTtiLl9fc2hhZHlfcGF0Y2hlZFByb3RvPWN9YS5fX3Byb3RvX189Yi5fX3NoYWR5X3BhdGNoZWRQcm90b31lbHNlIFAoYSxOYyl9dmFyIE9jPUNjKEV2ZW50KSxQYz1DYyhDdXN0b21FdmVudCksUWM9Q2MoTW91c2VFdmVudCk7XG5mdW5jdGlvbiBSYygpe2lmKCF0YyYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFdmVudC5wcm90b3R5cGUsXCJpc1RydXN0ZWRcIikpe3ZhciBhPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsY29tcG9zZWQ6ITB9KTt0aGlzLl9fc2hhZHlfZGlzcGF0Y2hFdmVudChiKX07RWxlbWVudC5wcm90b3R5cGUuY2xpY2s/RWxlbWVudC5wcm90b3R5cGUuY2xpY2s9YTpIVE1MRWxlbWVudC5wcm90b3R5cGUuY2xpY2smJihIVE1MRWxlbWVudC5wcm90b3R5cGUuY2xpY2s9YSl9fVxudmFyIFNjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEVsZW1lbnQucHJvdG90eXBlKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuXCJvblwiPT09YS5zdWJzdHJpbmcoMCwyKX0pLFRjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEhUTUxFbGVtZW50LnByb3RvdHlwZSkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVyblwib25cIj09PWEuc3Vic3RyaW5nKDAsMil9KTtmdW5jdGlvbiBVYyhhKXtyZXR1cm57c2V0OmZ1bmN0aW9uKGIpe3ZhciBjPUIodGhpcyksZD1hLnN1YnN0cmluZygyKTtjLk58fChjLk49e30pO2MuTlthXSYmdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGQsYy5OW2FdKTt0aGlzLl9fc2hhZHlfYWRkRXZlbnRMaXN0ZW5lcihkLGIpO2MuTlthXT1ifSxnZXQ6ZnVuY3Rpb24oKXt2YXIgYj1MKHRoaXMpO3JldHVybiBiJiZiLk4mJmIuTlthXX0sY29uZmlndXJhYmxlOiEwfX07ZnVuY3Rpb24gVmMoYSxiKXtyZXR1cm57aW5kZXg6YSxhYTpbXSxoYTpifX1cbmZ1bmN0aW9uIFdjKGEsYixjLGQpe3ZhciBlPTAsZj0wLGc9MCxoPTAsaz1NYXRoLm1pbihiLWUsZC1mKTtpZigwPT1lJiYwPT1mKWE6e2ZvcihnPTA7ZzxrO2crKylpZihhW2ddIT09Y1tnXSlicmVhayBhO2c9a31pZihiPT1hLmxlbmd0aCYmZD09Yy5sZW5ndGgpe2g9YS5sZW5ndGg7Zm9yKHZhciBsPWMubGVuZ3RoLG09MDttPGstZyYmWGMoYVstLWhdLGNbLS1sXSk7KW0rKztoPW19ZSs9ZztmKz1nO2ItPWg7ZC09aDtpZigwPT1iLWUmJjA9PWQtZilyZXR1cm5bXTtpZihlPT1iKXtmb3IoYj1WYyhlLDApO2Y8ZDspYi5hYS5wdXNoKGNbZisrXSk7cmV0dXJuW2JdfWlmKGY9PWQpcmV0dXJuW1ZjKGUsYi1lKV07az1lO2c9ZjtkPWQtZysxO2g9Yi1rKzE7Yj1BcnJheShkKTtmb3IobD0wO2w8ZDtsKyspYltsXT1BcnJheShoKSxiW2xdWzBdPWw7Zm9yKGw9MDtsPGg7bCsrKWJbMF1bbF09bDtmb3IobD0xO2w8ZDtsKyspZm9yKG09MTttPGg7bSsrKWlmKGFbayttLTFdPT09Y1tnK2wtMV0pYltsXVttXT1cbmJbbC0xXVttLTFdO2Vsc2V7dmFyIHE9YltsLTFdW21dKzEsSD1iW2xdW20tMV0rMTtiW2xdW21dPXE8SD9xOkh9az1iLmxlbmd0aC0xO2c9YlswXS5sZW5ndGgtMTtkPWJba11bZ107Zm9yKGE9W107MDxrfHwwPGc7KTA9PWs/KGEucHVzaCgyKSxnLS0pOjA9PWc/KGEucHVzaCgzKSxrLS0pOihoPWJbay0xXVtnLTFdLGw9YltrLTFdW2ddLG09YltrXVtnLTFdLHE9bDxtP2w8aD9sOmg6bTxoP206aCxxPT1oPyhoPT1kP2EucHVzaCgwKTooYS5wdXNoKDEpLGQ9aCksay0tLGctLSk6cT09bD8oYS5wdXNoKDMpLGstLSxkPWwpOihhLnB1c2goMiksZy0tLGQ9bSkpO2EucmV2ZXJzZSgpO2I9dm9pZCAwO2s9W107Zm9yKGc9MDtnPGEubGVuZ3RoO2crKylzd2l0Y2goYVtnXSl7Y2FzZSAwOmImJihrLnB1c2goYiksYj12b2lkIDApO2UrKztmKys7YnJlYWs7Y2FzZSAxOmJ8fChiPVZjKGUsMCkpO2IuaGErKztlKys7Yi5hYS5wdXNoKGNbZl0pO2YrKzticmVhaztjYXNlIDI6Ynx8KGI9VmMoZSxcbjApKTtiLmhhKys7ZSsrO2JyZWFrO2Nhc2UgMzpifHwoYj1WYyhlLDApKSxiLmFhLnB1c2goY1tmXSksZisrfWImJmsucHVzaChiKTtyZXR1cm4ga31mdW5jdGlvbiBYYyhhLGIpe3JldHVybiBhPT09Yn07dmFyIFljPVEoe2Rpc3BhdGNoRXZlbnQ6SWMsYWRkRXZlbnRMaXN0ZW5lcjpKYyxyZW1vdmVFdmVudExpc3RlbmVyOkxjfSk7dmFyIFpjPW51bGw7ZnVuY3Rpb24gJGMoKXtaY3x8KFpjPXdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltKTtyZXR1cm4gWmN8fG51bGx9ZnVuY3Rpb24gYWQoYSxiLGMpe3ZhciBkPSRjKCk7cmV0dXJuIGQmJlwiY2xhc3NcIj09PWI/KGQuc2V0RWxlbWVudENsYXNzKGEsYyksITApOiExfWZ1bmN0aW9uIGJkKGEsYil7dmFyIGM9JGMoKTtjJiZjLnVuc2NvcGVOb2RlKGEsYil9ZnVuY3Rpb24gY2QoYSxiKXt2YXIgYz0kYygpO2lmKCFjKXJldHVybiEwO2lmKGEubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpe2M9ITA7Zm9yKGE9YS5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YTthPWEuX19zaGFkeV9uZXh0U2libGluZyljPWMmJmNkKGEsYik7cmV0dXJuIGN9cmV0dXJuIGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERT8hMDpjLmN1cnJlbnRTY29wZUZvck5vZGUoYSk9PT1ifVxuZnVuY3Rpb24gZGQoYSl7aWYoYS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVyblwiXCI7dmFyIGI9JGMoKTtyZXR1cm4gYj9iLmN1cnJlbnRTY29wZUZvck5vZGUoYSk6XCJcIn1mdW5jdGlvbiBlZChhLGIpe2lmKGEpZm9yKGEubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmYihhKSxhPWEuX19zaGFkeV9maXJzdENoaWxkO2E7YT1hLl9fc2hhZHlfbmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZlZChhLGIpfTt2YXIgZmQ9d2luZG93LmRvY3VtZW50LGdkPU4ubGEsaGQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihOb2RlLnByb3RvdHlwZSxcImlzQ29ubmVjdGVkXCIpLGlkPWhkJiZoZC5nZXQ7ZnVuY3Rpb24gamQoYSl7Zm9yKHZhciBiO2I9YS5fX3NoYWR5X2ZpcnN0Q2hpbGQ7KWEuX19zaGFkeV9yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBrZChhKXt2YXIgYj1MKGEpO2lmKGImJnZvaWQgMCE9PWIua2EpZm9yKGI9YS5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YjtiPWIuX19zaGFkeV9uZXh0U2libGluZylrZChiKTtpZihhPUwoYSkpYS5rYT12b2lkIDB9ZnVuY3Rpb24gbGQoYSl7dmFyIGI9YTtpZihhJiZcInNsb3RcIj09PWEubG9jYWxOYW1lKXt2YXIgYz1MKGEpOyhjPWMmJmMuVikmJihiPWMubGVuZ3RoP2NbMF06bGQoYS5fX3NoYWR5X25leHRTaWJsaW5nKSl9cmV0dXJuIGJ9XG5mdW5jdGlvbiBtZChhLGIsYyl7aWYoYT0oYT1MKGEpKSYmYS5aKXtpZihiKWlmKGIubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpZm9yKHZhciBkPTAsZT1iLmNoaWxkTm9kZXMubGVuZ3RoO2Q8ZTtkKyspYS5hZGRlZE5vZGVzLnB1c2goYi5jaGlsZE5vZGVzW2RdKTtlbHNlIGEuYWRkZWROb2Rlcy5wdXNoKGIpO2MmJmEucmVtb3ZlZE5vZGVzLnB1c2goYyk7TmIoYSl9fVxudmFyIHRkPVEoe2dldCBwYXJlbnROb2RlKCl7dmFyIGE9TCh0aGlzKTthPWEmJmEucGFyZW50Tm9kZTtyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfcGFyZW50Tm9kZX0sZ2V0IGZpcnN0Q2hpbGQoKXt2YXIgYT1MKHRoaXMpO2E9YSYmYS5maXJzdENoaWxkO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkfSxnZXQgbGFzdENoaWxkKCl7dmFyIGE9TCh0aGlzKTthPWEmJmEubGFzdENoaWxkO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9sYXN0Q2hpbGR9LGdldCBuZXh0U2libGluZygpe3ZhciBhPUwodGhpcyk7YT1hJiZhLm5leHRTaWJsaW5nO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZ30sZ2V0IHByZXZpb3VzU2libGluZygpe3ZhciBhPUwodGhpcyk7YT1hJiZhLnByZXZpb3VzU2libGluZztyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfcHJldmlvdXNTaWJsaW5nfSxcbmdldCBjaGlsZE5vZGVzKCl7aWYocmIodGhpcykpe3ZhciBhPUwodGhpcyk7aWYoIWEuY2hpbGROb2Rlcyl7YS5jaGlsZE5vZGVzPVtdO2Zvcih2YXIgYj10aGlzLl9fc2hhZHlfZmlyc3RDaGlsZDtiO2I9Yi5fX3NoYWR5X25leHRTaWJsaW5nKWEuY2hpbGROb2Rlcy5wdXNoKGIpfXZhciBjPWEuY2hpbGROb2Rlc31lbHNlIGM9dGhpcy5fX3NoYWR5X25hdGl2ZV9jaGlsZE5vZGVzO2MuaXRlbT1mdW5jdGlvbihkKXtyZXR1cm4gY1tkXX07cmV0dXJuIGN9LGdldCBwYXJlbnRFbGVtZW50KCl7dmFyIGE9TCh0aGlzKTsoYT1hJiZhLnBhcmVudE5vZGUpJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUmJihhPW51bGwpO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9wYXJlbnRFbGVtZW50fSxnZXQgaXNDb25uZWN0ZWQoKXtpZihpZCYmaWQuY2FsbCh0aGlzKSlyZXR1cm4hMDtpZih0aGlzLm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpcmV0dXJuITE7XG52YXIgYT10aGlzLm93bmVyRG9jdW1lbnQ7aWYoQWIpe2lmKGEuX19zaGFkeV9uYXRpdmVfY29udGFpbnModGhpcykpcmV0dXJuITB9ZWxzZSBpZihhLmRvY3VtZW50RWxlbWVudCYmYS5kb2N1bWVudEVsZW1lbnQuX19zaGFkeV9uYXRpdmVfY29udGFpbnModGhpcykpcmV0dXJuITA7Zm9yKGE9dGhpczthJiYhKGEgaW5zdGFuY2VvZiBEb2N1bWVudCk7KWE9YS5fX3NoYWR5X3BhcmVudE5vZGV8fChPKGEpP2EuaG9zdDp2b2lkIDApO3JldHVybiEhKGEmJmEgaW5zdGFuY2VvZiBEb2N1bWVudCl9LGdldCB0ZXh0Q29udGVudCgpe2lmKHJiKHRoaXMpKXtmb3IodmFyIGE9W10sYj10aGlzLl9fc2hhZHlfZmlyc3RDaGlsZDtiO2I9Yi5fX3NoYWR5X25leHRTaWJsaW5nKWIubm9kZVR5cGUhPT1Ob2RlLkNPTU1FTlRfTk9ERSYmYS5wdXNoKGIuX19zaGFkeV90ZXh0Q29udGVudCk7cmV0dXJuIGEuam9pbihcIlwiKX1yZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV90ZXh0Q29udGVudH0sc2V0IHRleHRDb250ZW50KGEpe2lmKFwidW5kZWZpbmVkXCI9PT1cbnR5cGVvZiBhfHxudWxsPT09YSlhPVwiXCI7c3dpdGNoKHRoaXMubm9kZVR5cGUpe2Nhc2UgTm9kZS5FTEVNRU5UX05PREU6Y2FzZSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6aWYoIXJiKHRoaXMpJiZOLkIpe3ZhciBiPXRoaXMuX19zaGFkeV9maXJzdENoaWxkOyhiIT10aGlzLl9fc2hhZHlfbGFzdENoaWxkfHxiJiZiLm5vZGVUeXBlIT1Ob2RlLlRFWFRfTk9ERSkmJmpkKHRoaXMpO3RoaXMuX19zaGFkeV9uYXRpdmVfdGV4dENvbnRlbnQ9YX1lbHNlIGpkKHRoaXMpLCgwPGEubGVuZ3RofHx0aGlzLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpJiZ0aGlzLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGEpKTticmVhaztkZWZhdWx0OnRoaXMubm9kZVZhbHVlPWF9fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYSxiKXtpZih0aGlzLm93bmVyRG9jdW1lbnQhPT1mZCYmYS5vd25lckRvY3VtZW50IT09ZmQpcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfaW5zZXJ0QmVmb3JlKGEsXG5iKSxhO2lmKGE9PT10aGlzKXRocm93IEVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2FwcGVuZENoaWxkJyBvbiAnTm9kZSc6IFRoZSBuZXcgY2hpbGQgZWxlbWVudCBjb250YWlucyB0aGUgcGFyZW50LlwiKTtpZihiKXt2YXIgYz1MKGIpO2M9YyYmYy5wYXJlbnROb2RlO2lmKHZvaWQgMCE9PWMmJmMhPT10aGlzfHx2b2lkIDA9PT1jJiZiLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGUhPT10aGlzKXRocm93IEVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luc2VydEJlZm9yZScgb24gJ05vZGUnOiBUaGUgbm9kZSBiZWZvcmUgd2hpY2ggdGhlIG5ldyBub2RlIGlzIHRvIGJlIGluc2VydGVkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZS5cIik7fWlmKGI9PT1hKXJldHVybiBhO21kKHRoaXMsYSk7dmFyIGQ9W10sZT0oYz1uZCh0aGlzKSk/Yy5ob3N0LmxvY2FsTmFtZTpkZCh0aGlzKSxmPWEuX19zaGFkeV9wYXJlbnROb2RlO2lmKGYpe3ZhciBnPWRkKGEpO3ZhciBoPSEhY3x8IW5kKGEpfHxcbmdkJiZ2b2lkIDAhPT10aGlzLl9fbm9JbnNlcnRpb25Qb2ludDtmLl9fc2hhZHlfcmVtb3ZlQ2hpbGQoYSxoKX1mPSEwO3ZhciBrPSghZ2R8fHZvaWQgMD09PWEuX19ub0luc2VydGlvblBvaW50JiZ2b2lkIDA9PT10aGlzLl9fbm9JbnNlcnRpb25Qb2ludCkmJiFjZChhLGUpLGw9YyYmIWEuX19ub0luc2VydGlvblBvaW50JiYoIWdkfHxhLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKTtpZihsfHxrKWsmJihnPWd8fGRkKGEpKSxlZChhLGZ1bmN0aW9uKG0pe2wmJlwic2xvdFwiPT09bS5sb2NhbE5hbWUmJmQucHVzaChtKTtpZihrKXt2YXIgcT1nOyRjKCkmJihxJiZiZChtLHEpLChxPSRjKCkpJiZxLnNjb3BlTm9kZShtLGUpKX19KTtkLmxlbmd0aCYmKG9kKGMpLGMuYy5wdXNoLmFwcGx5KGMuYyxkIGluc3RhbmNlb2YgQXJyYXk/ZDpkYShjYShkKSkpLHBkKGMpKTtyYih0aGlzKSYmKHFkKGEsdGhpcyxiKSxoPUwodGhpcyksaC5yb290PyhmPSExLHNiKHRoaXMpJiZcbnBkKGgucm9vdCkpOmMmJlwic2xvdFwiPT09dGhpcy5sb2NhbE5hbWUmJihmPSExLHBkKGMpKSk7Zj8oYz1PKHRoaXMpP3RoaXMuaG9zdDp0aGlzLGI/KGI9bGQoYiksYy5fX3NoYWR5X25hdGl2ZV9pbnNlcnRCZWZvcmUoYSxiKSk6Yy5fX3NoYWR5X25hdGl2ZV9hcHBlbmRDaGlsZChhKSk6YS5vd25lckRvY3VtZW50IT09dGhpcy5vd25lckRvY3VtZW50JiZ0aGlzLm93bmVyRG9jdW1lbnQuYWRvcHROb2RlKGEpO3JldHVybiBhfSxhcHBlbmRDaGlsZDpmdW5jdGlvbihhKXtpZih0aGlzIT1hfHwhTyhhKSlyZXR1cm4gdGhpcy5fX3NoYWR5X2luc2VydEJlZm9yZShhKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24oYSxiKXtiPXZvaWQgMD09PWI/ITE6YjtpZih0aGlzLm93bmVyRG9jdW1lbnQhPT1mZClyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9yZW1vdmVDaGlsZChhKTtpZihhLl9fc2hhZHlfcGFyZW50Tm9kZSE9PXRoaXMpdGhyb3cgRXJyb3IoXCJUaGUgbm9kZSB0byBiZSByZW1vdmVkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZTogXCIrXG5hKTttZCh0aGlzLG51bGwsYSk7dmFyIGM9bmQoYSksZD1jJiZyZChjLGEpLGU9TCh0aGlzKTtpZihyYih0aGlzKSYmKHNkKGEsdGhpcyksc2IodGhpcykpKXtwZChlLnJvb3QpO3ZhciBmPSEwfWlmKCRjKCkmJiFiJiZjJiZhLm5vZGVUeXBlIT09Tm9kZS5URVhUX05PREUpe3ZhciBnPWRkKGEpO2VkKGEsZnVuY3Rpb24oaCl7YmQoaCxnKX0pfWtkKGEpO2MmJigoYj1cInNsb3RcIj09PXRoaXMubG9jYWxOYW1lKSYmKGY9ITApLChkfHxiKSYmcGQoYykpO2Z8fChmPU8odGhpcyk/dGhpcy5ob3N0OnRoaXMsKCFlLnJvb3QmJlwic2xvdFwiIT09YS5sb2NhbE5hbWV8fGY9PT1hLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGUpJiZmLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGEpKTtyZXR1cm4gYX0scmVwbGFjZUNoaWxkOmZ1bmN0aW9uKGEsYil7dGhpcy5fX3NoYWR5X2luc2VydEJlZm9yZShhLGIpO3RoaXMuX19zaGFkeV9yZW1vdmVDaGlsZChiKTtyZXR1cm4gYX0sY2xvbmVOb2RlOmZ1bmN0aW9uKGEpe2lmKFwidGVtcGxhdGVcIj09XG50aGlzLmxvY2FsTmFtZSlyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9jbG9uZU5vZGUoYSk7dmFyIGI9dGhpcy5fX3NoYWR5X25hdGl2ZV9jbG9uZU5vZGUoITEpO2lmKGEmJmIubm9kZVR5cGUhPT1Ob2RlLkFUVFJJQlVURV9OT0RFKXthPXRoaXMuX19zaGFkeV9maXJzdENoaWxkO2Zvcih2YXIgYzthO2E9YS5fX3NoYWR5X25leHRTaWJsaW5nKWM9YS5fX3NoYWR5X2Nsb25lTm9kZSghMCksYi5fX3NoYWR5X2FwcGVuZENoaWxkKGMpfXJldHVybiBifSxnZXRSb290Tm9kZTpmdW5jdGlvbihhKXtpZih0aGlzJiZ0aGlzLm5vZGVUeXBlKXt2YXIgYj1CKHRoaXMpLGM9Yi5rYTt2b2lkIDA9PT1jJiYoTyh0aGlzKT8oYz10aGlzLGIua2E9Yyk6KGM9KGM9dGhpcy5fX3NoYWR5X3BhcmVudE5vZGUpP2MuX19zaGFkeV9nZXRSb290Tm9kZShhKTp0aGlzLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5fX3NoYWR5X25hdGl2ZV9jb250YWlucyh0aGlzKSYmKGIua2E9YykpKTtyZXR1cm4gY319LFxuY29udGFpbnM6ZnVuY3Rpb24oYSl7cmV0dXJuIEJiKHRoaXMsYSl9fSk7dmFyIHdkPVEoe2dldCBhc3NpZ25lZFNsb3QoKXt2YXIgYT10aGlzLl9fc2hhZHlfcGFyZW50Tm9kZTsoYT1hJiZhLl9fc2hhZHlfc2hhZG93Um9vdCkmJnZkKGEpO3JldHVybihhPUwodGhpcykpJiZhLmFzc2lnbmVkU2xvdHx8bnVsbH19KTtmdW5jdGlvbiB4ZChhLGIsYyl7dmFyIGQ9W107eWQoYSxiLGMsZCk7cmV0dXJuIGR9ZnVuY3Rpb24geWQoYSxiLGMsZCl7Zm9yKGE9YS5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YTthPWEuX19zaGFkeV9uZXh0U2libGluZyl7dmFyIGU7aWYoZT1hLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe2U9YTt2YXIgZj1iLGc9YyxoPWQsaz1mKGUpO2smJmgucHVzaChlKTtnJiZnKGspP2U9azooeWQoZSxmLGcsaCksZT12b2lkIDApfWlmKGUpYnJlYWt9fVxudmFyIHpkPVEoe2dldCBmaXJzdEVsZW1lbnRDaGlsZCgpe3ZhciBhPUwodGhpcyk7aWYoYSYmdm9pZCAwIT09YS5maXJzdENoaWxkKXtmb3IoYT10aGlzLl9fc2hhZHlfZmlyc3RDaGlsZDthJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWE9YS5fX3NoYWR5X25leHRTaWJsaW5nO3JldHVybiBhfXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX2ZpcnN0RWxlbWVudENoaWxkfSxnZXQgbGFzdEVsZW1lbnRDaGlsZCgpe3ZhciBhPUwodGhpcyk7aWYoYSYmdm9pZCAwIT09YS5sYXN0Q2hpbGQpe2ZvcihhPXRoaXMuX19zaGFkeV9sYXN0Q2hpbGQ7YSYmYS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFOylhPWEuX19zaGFkeV9wcmV2aW91c1NpYmxpbmc7cmV0dXJuIGF9cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfbGFzdEVsZW1lbnRDaGlsZH0sZ2V0IGNoaWxkcmVuKCl7cmV0dXJuIHJiKHRoaXMpP0NiKEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChFYih0aGlzKSxcbmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9KSk6dGhpcy5fX3NoYWR5X25hdGl2ZV9jaGlsZHJlbn0sZ2V0IGNoaWxkRWxlbWVudENvdW50KCl7dmFyIGE9dGhpcy5fX3NoYWR5X2NoaWxkcmVuO3JldHVybiBhP2EubGVuZ3RoOjB9fSksQWQ9USh7cXVlcnlTZWxlY3RvcjpmdW5jdGlvbihhKXtyZXR1cm4geGQodGhpcyxmdW5jdGlvbihiKXtyZXR1cm4gdmIuY2FsbChiLGEpfSxmdW5jdGlvbihiKXtyZXR1cm4hIWJ9KVswXXx8bnVsbH0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihhLGIpe2lmKGIpe2I9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fX3NoYWR5X25hdGl2ZV9xdWVyeVNlbGVjdG9yQWxsKGEpKTt2YXIgYz10aGlzLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKTtyZXR1cm4gQ2IoYi5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIGQuX19zaGFkeV9nZXRSb290Tm9kZSgpPT1jfSkpfXJldHVybiBDYih4ZCh0aGlzLGZ1bmN0aW9uKGQpe3JldHVybiB2Yi5jYWxsKGQsXG5hKX0pKX19KSxCZD1OLmxhJiYhTi5EP0hiKHt9LHpkKTp6ZDtIYih6ZCxBZCk7dmFyIENkPXdpbmRvdy5kb2N1bWVudDtmdW5jdGlvbiBEZChhLGIpe2lmKFwic2xvdFwiPT09YilhPWEuX19zaGFkeV9wYXJlbnROb2RlLHNiKGEpJiZwZChMKGEpLnJvb3QpO2Vsc2UgaWYoXCJzbG90XCI9PT1hLmxvY2FsTmFtZSYmXCJuYW1lXCI9PT1iJiYoYj1uZChhKSkpe2lmKGIuYSl7RWQoYik7dmFyIGM9YS5MYSxkPUZkKGEpO2lmKGQhPT1jKXtjPWIuYltjXTt2YXIgZT1jLmluZGV4T2YoYSk7MDw9ZSYmYy5zcGxpY2UoZSwxKTtjPWIuYltkXXx8KGIuYltkXT1bXSk7Yy5wdXNoKGEpOzE8Yy5sZW5ndGgmJihiLmJbZF09R2QoYykpfX1wZChiKX19XG52YXIgSGQ9USh7Z2V0IHByZXZpb3VzRWxlbWVudFNpYmxpbmcoKXt2YXIgYT1MKHRoaXMpO2lmKGEmJnZvaWQgMCE9PWEucHJldmlvdXNTaWJsaW5nKXtmb3IoYT10aGlzLl9fc2hhZHlfcHJldmlvdXNTaWJsaW5nO2EmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERTspYT1hLl9fc2hhZHlfcHJldmlvdXNTaWJsaW5nO3JldHVybiBhfXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3ByZXZpb3VzRWxlbWVudFNpYmxpbmd9LGdldCBuZXh0RWxlbWVudFNpYmxpbmcoKXt2YXIgYT1MKHRoaXMpO2lmKGEmJnZvaWQgMCE9PWEubmV4dFNpYmxpbmcpe2ZvcihhPXRoaXMuX19zaGFkeV9uZXh0U2libGluZzthJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWE9YS5fX3NoYWR5X25leHRTaWJsaW5nO3JldHVybiBhfXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX25leHRFbGVtZW50U2libGluZ30sZ2V0IHNsb3QoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzbG90XCIpfSxcbnNldCBzbG90KGEpe3RoaXMuX19zaGFkeV9zZXRBdHRyaWJ1dGUoXCJzbG90XCIsYSl9LGdldCBjbGFzc05hbWUoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIn0sc2V0IGNsYXNzTmFtZShhKXt0aGlzLl9fc2hhZHlfc2V0QXR0cmlidXRlKFwiY2xhc3NcIixhKX0sc2V0QXR0cmlidXRlOmZ1bmN0aW9uKGEsYil7dGhpcy5vd25lckRvY3VtZW50IT09Q2Q/dGhpcy5fX3NoYWR5X25hdGl2ZV9zZXRBdHRyaWJ1dGUoYSxiKTphZCh0aGlzLGEsYil8fCh0aGlzLl9fc2hhZHlfbmF0aXZlX3NldEF0dHJpYnV0ZShhLGIpLERkKHRoaXMsYSkpfSxyZW1vdmVBdHRyaWJ1dGU6ZnVuY3Rpb24oYSl7dGhpcy5vd25lckRvY3VtZW50IT09Q2Q/dGhpcy5fX3NoYWR5X25hdGl2ZV9yZW1vdmVBdHRyaWJ1dGUoYSk6YWQodGhpcyxhLFwiXCIpP1wiXCI9PT10aGlzLmdldEF0dHJpYnV0ZShhKSYmdGhpcy5fX3NoYWR5X25hdGl2ZV9yZW1vdmVBdHRyaWJ1dGUoYSk6KHRoaXMuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQXR0cmlidXRlKGEpLFxuRGQodGhpcyxhKSl9fSk7Ti5sYXx8U2MuZm9yRWFjaChmdW5jdGlvbihhKXtIZFthXT1VYyhhKX0pO1xudmFyIE1kPVEoe2F0dGFjaFNoYWRvdzpmdW5jdGlvbihhKXtpZighdGhpcyl0aHJvdyBFcnJvcihcIk11c3QgcHJvdmlkZSBhIGhvc3QuXCIpO2lmKCFhKXRocm93IEVycm9yKFwiTm90IGVub3VnaCBhcmd1bWVudHMuXCIpO2lmKGEuc2hhZHlVcGdyYWRlRnJhZ21lbnQmJiFOLklhKXt2YXIgYj1hLnNoYWR5VXBncmFkZUZyYWdtZW50O2IuX19wcm90b19fPVNoYWRvd1Jvb3QucHJvdG90eXBlO0lkKGIsdGhpcyxhKTtKZChiLGIpO2E9Yi5fX25vSW5zZXJ0aW9uUG9pbnQ/bnVsbDpiLnF1ZXJ5U2VsZWN0b3JBbGwoXCJzbG90XCIpO2IuX19ub0luc2VydGlvblBvaW50PXZvaWQgMDtpZihhJiZhLmxlbmd0aCl7dmFyIGM9YjtvZChjKTtjLmMucHVzaC5hcHBseShjLmMsYSBpbnN0YW5jZW9mIEFycmF5P2E6ZGEoY2EoYSkpKTtwZChiKX1iLmhvc3QuX19zaGFkeV9uYXRpdmVfYXBwZW5kQ2hpbGQoYil9ZWxzZSBiPW5ldyBLZChMZCx0aGlzLGEpO3JldHVybiB0aGlzLl9fQ0Vfc2hhZG93Um9vdD1ifSxcbmdldCBzaGFkb3dSb290KCl7dmFyIGE9TCh0aGlzKTtyZXR1cm4gYSYmYS5iYnx8bnVsbH19KTtIYihIZCxNZCk7dmFyIE5kPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudChcImluZXJ0XCIpLE9kPVEoe2dldCBpbm5lckhUTUwoKXtyZXR1cm4gcmIodGhpcyk/WmIoXCJ0ZW1wbGF0ZVwiPT09dGhpcy5sb2NhbE5hbWU/dGhpcy5jb250ZW50OnRoaXMsRWIpOnRoaXMuX19zaGFkeV9uYXRpdmVfaW5uZXJIVE1MfSxzZXQgaW5uZXJIVE1MKGEpe2lmKFwidGVtcGxhdGVcIj09PXRoaXMubG9jYWxOYW1lKXRoaXMuX19zaGFkeV9uYXRpdmVfaW5uZXJIVE1MPWE7ZWxzZXtqZCh0aGlzKTt2YXIgYj10aGlzLmxvY2FsTmFtZXx8XCJkaXZcIjtiPXRoaXMubmFtZXNwYWNlVVJJJiZ0aGlzLm5hbWVzcGFjZVVSSSE9PU5kLm5hbWVzcGFjZVVSST9OZC5jcmVhdGVFbGVtZW50TlModGhpcy5uYW1lc3BhY2VVUkksYik6TmQuY3JlYXRlRWxlbWVudChiKTtmb3IoTi5CP2IuX19zaGFkeV9uYXRpdmVfaW5uZXJIVE1MPWE6Yi5pbm5lckhUTUw9YTthPWIuX19zaGFkeV9maXJzdENoaWxkOyl0aGlzLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGEpfX19KTt2YXIgUGQ9USh7Ymx1cjpmdW5jdGlvbigpe3ZhciBhPUwodGhpcyk7KGE9KGE9YSYmYS5yb290KSYmYS5hY3RpdmVFbGVtZW50KT9hLl9fc2hhZHlfYmx1cigpOnRoaXMuX19zaGFkeV9uYXRpdmVfYmx1cigpfX0pO04ubGF8fFRjLmZvckVhY2goZnVuY3Rpb24oYSl7UGRbYV09VWMoYSl9KTt2YXIgUWQ9USh7YXNzaWduZWROb2RlczpmdW5jdGlvbihhKXtpZihcInNsb3RcIj09PXRoaXMubG9jYWxOYW1lKXt2YXIgYj10aGlzLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKTtiJiZPKGIpJiZ2ZChiKTtyZXR1cm4oYj1MKHRoaXMpKT8oYSYmYS5mbGF0dGVuP2IuVjpiLmFzc2lnbmVkTm9kZXMpfHxbXTpbXX19LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiLGMpe2lmKFwic2xvdFwiIT09dGhpcy5sb2NhbE5hbWV8fFwic2xvdGNoYW5nZVwiPT09YSlKYy5jYWxsKHRoaXMsYSxiLGMpO2Vsc2V7XCJvYmplY3RcIiE9PXR5cGVvZiBjJiYoYz17Y2FwdHVyZTohIWN9KTt2YXIgZD10aGlzLl9fc2hhZHlfcGFyZW50Tm9kZTtpZighZCl0aHJvdyBFcnJvcihcIlNoYWR5RE9NIGNhbm5vdCBhdHRhY2ggZXZlbnQgdG8gc2xvdCB1bmxlc3MgaXQgaGFzIGEgYHBhcmVudE5vZGVgXCIpO2MuTz10aGlzO2QuX19zaGFkeV9hZGRFdmVudExpc3RlbmVyKGEsYixjKX19LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxcbmIsYyl7aWYoXCJzbG90XCIhPT10aGlzLmxvY2FsTmFtZXx8XCJzbG90Y2hhbmdlXCI9PT1hKUxjLmNhbGwodGhpcyxhLGIsYyk7ZWxzZXtcIm9iamVjdFwiIT09dHlwZW9mIGMmJihjPXtjYXB0dXJlOiEhY30pO3ZhciBkPXRoaXMuX19zaGFkeV9wYXJlbnROb2RlO2lmKCFkKXRocm93IEVycm9yKFwiU2hhZHlET00gY2Fubm90IGF0dGFjaCBldmVudCB0byBzbG90IHVubGVzcyBpdCBoYXMgYSBgcGFyZW50Tm9kZWBcIik7Yy5PPXRoaXM7ZC5fX3NoYWR5X3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxiLGMpfX19KTt2YXIgUmQ9USh7Z2V0RWxlbWVudEJ5SWQ6ZnVuY3Rpb24oYSl7cmV0dXJuXCJcIj09PWE/bnVsbDp4ZCh0aGlzLGZ1bmN0aW9uKGIpe3JldHVybiBiLmlkPT1hfSxmdW5jdGlvbihiKXtyZXR1cm4hIWJ9KVswXXx8bnVsbH19KTt2YXIgU2Q9USh7Z2V0IGFjdGl2ZUVsZW1lbnQoKXt2YXIgYT1OLkI/ZG9jdW1lbnQuX19zaGFkeV9uYXRpdmVfYWN0aXZlRWxlbWVudDpkb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKCFhfHwhYS5ub2RlVHlwZSlyZXR1cm4gbnVsbDt2YXIgYj0hIU8odGhpcyk7aWYoISh0aGlzPT09ZG9jdW1lbnR8fGImJnRoaXMuaG9zdCE9PWEmJnRoaXMuaG9zdC5fX3NoYWR5X25hdGl2ZV9jb250YWlucyhhKSkpcmV0dXJuIG51bGw7Zm9yKGI9bmQoYSk7YiYmYiE9PXRoaXM7KWE9Yi5ob3N0LGI9bmQoYSk7cmV0dXJuIHRoaXM9PT1kb2N1bWVudD9iP251bGw6YTpiPT09dGhpcz9hOm51bGx9fSk7dmFyIFRkPXdpbmRvdy5kb2N1bWVudCxVZD1RKHtpbXBvcnROb2RlOmZ1bmN0aW9uKGEsYil7aWYoYS5vd25lckRvY3VtZW50IT09VGR8fFwidGVtcGxhdGVcIj09PWEubG9jYWxOYW1lKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX2ltcG9ydE5vZGUoYSxiKTt2YXIgYz10aGlzLl9fc2hhZHlfbmF0aXZlX2ltcG9ydE5vZGUoYSwhMSk7aWYoYilmb3IoYT1hLl9fc2hhZHlfZmlyc3RDaGlsZDthO2E9YS5fX3NoYWR5X25leHRTaWJsaW5nKWI9dGhpcy5fX3NoYWR5X2ltcG9ydE5vZGUoYSwhMCksYy5fX3NoYWR5X2FwcGVuZENoaWxkKGIpO3JldHVybiBjfX0pO3ZhciBWZD1RKHtkaXNwYXRjaEV2ZW50OkljLGFkZEV2ZW50TGlzdGVuZXI6SmMuYmluZCh3aW5kb3cpLHJlbW92ZUV2ZW50TGlzdGVuZXI6TGMuYmluZCh3aW5kb3cpfSk7dmFyIFdkPXt9O09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEVsZW1lbnQucHJvdG90eXBlLFwicGFyZW50RWxlbWVudFwiKSYmKFdkLnBhcmVudEVsZW1lbnQ9dGQucGFyZW50RWxlbWVudCk7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsXCJjb250YWluc1wiKSYmKFdkLmNvbnRhaW5zPXRkLmNvbnRhaW5zKTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSxcImNoaWxkcmVuXCIpJiYoV2QuY2hpbGRyZW49emQuY2hpbGRyZW4pO09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEVsZW1lbnQucHJvdG90eXBlLFwiaW5uZXJIVE1MXCIpJiYoV2QuaW5uZXJIVE1MPU9kLmlubmVySFRNTCk7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsXCJjbGFzc05hbWVcIikmJihXZC5jbGFzc05hbWU9SGQuY2xhc3NOYW1lKTtcbnZhciBYZD17RXZlbnRUYXJnZXQ6W1ljXSxOb2RlOlt0ZCx3aW5kb3cuRXZlbnRUYXJnZXQ/bnVsbDpZY10sVGV4dDpbd2RdLENvbW1lbnQ6W3dkXSxDREFUQVNlY3Rpb246W3dkXSxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246W3dkXSxFbGVtZW50OltIZCx6ZCx3ZCwhTi5CfHxcImlubmVySFRNTFwiaW4gRWxlbWVudC5wcm90b3R5cGU/T2Q6bnVsbCx3aW5kb3cuSFRNTFNsb3RFbGVtZW50P251bGw6UWRdLEhUTUxFbGVtZW50OltQZCxXZF0sSFRNTFNsb3RFbGVtZW50OltRZF0sRG9jdW1lbnRGcmFnbWVudDpbQmQsUmRdLERvY3VtZW50OltVZCxCZCxSZCxTZF0sV2luZG93OltWZF19LFlkPU4uQj9udWxsOltcImlubmVySFRNTFwiLFwidGV4dENvbnRlbnRcIl07ZnVuY3Rpb24gWmQoYSxiLGMsZCl7Yi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBhJiZlJiZQKGEsZSxjLGQpfSl9XG5mdW5jdGlvbiAkZChhKXt2YXIgYj1hP251bGw6WWQsYztmb3IoYyBpbiBYZClaZCh3aW5kb3dbY10mJndpbmRvd1tjXS5wcm90b3R5cGUsWGRbY10sYSxiKX1bXCJUZXh0XCIsXCJDb21tZW50XCIsXCJDREFUQVNlY3Rpb25cIixcIlByb2Nlc3NpbmdJbnN0cnVjdGlvblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXdpbmRvd1thXSxjPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2MuX19zaGFkeV9wcm90b0lzUGF0Y2hlZD0hMDtaZChjLFhkLkV2ZW50VGFyZ2V0KTtaZChjLFhkLk5vZGUpO1hkW2FdJiZaZChjLFhkW2FdKTtiLnByb3RvdHlwZS5fX3NoYWR5X3BhdGNoZWRQcm90bz1jfSk7ZnVuY3Rpb24gYWUoYSl7YS5fX3NoYWR5X3Byb3RvSXNQYXRjaGVkPSEwO1pkKGEsWGQuRXZlbnRUYXJnZXQpO1pkKGEsWGQuTm9kZSk7WmQoYSxYZC5FbGVtZW50KTtaZChhLFhkLkhUTUxFbGVtZW50KTtaZChhLFhkLkhUTUxTbG90RWxlbWVudCk7cmV0dXJuIGF9O3ZhciBiZT1OLnVhLGNlPU4uQjtmdW5jdGlvbiBkZShhLGIpe2lmKGJlJiYhYS5fX3NoYWR5X3Byb3RvSXNQYXRjaGVkJiYhTyhhKSl7dmFyIGM9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpLGQ9Yy5oYXNPd25Qcm9wZXJ0eShcIl9fc2hhZHlfcGF0Y2hlZFByb3RvXCIpJiZjLl9fc2hhZHlfcGF0Y2hlZFByb3RvO2R8fChkPU9iamVjdC5jcmVhdGUoYyksYWUoZCksYy5fX3NoYWR5X3BhdGNoZWRQcm90bz1kKTtPYmplY3Quc2V0UHJvdG90eXBlT2YoYSxkKX1jZXx8KDE9PT1iP3FjKGEpOjI9PT1iJiZyYyhhKSl9XG5mdW5jdGlvbiBlZShhLGIsYyxkKXtkZShhLDEpO2Q9ZHx8bnVsbDt2YXIgZT1CKGEpLGY9ZD9CKGQpOm51bGw7ZS5wcmV2aW91c1NpYmxpbmc9ZD9mLnByZXZpb3VzU2libGluZzpiLl9fc2hhZHlfbGFzdENoaWxkO2lmKGY9TChlLnByZXZpb3VzU2libGluZykpZi5uZXh0U2libGluZz1hO2lmKGY9TChlLm5leHRTaWJsaW5nPWQpKWYucHJldmlvdXNTaWJsaW5nPWE7ZS5wYXJlbnROb2RlPWI7ZD9kPT09Yy5maXJzdENoaWxkJiYoYy5maXJzdENoaWxkPWEpOihjLmxhc3RDaGlsZD1hLGMuZmlyc3RDaGlsZHx8KGMuZmlyc3RDaGlsZD1hKSk7Yy5jaGlsZE5vZGVzPW51bGx9XG5mdW5jdGlvbiBxZChhLGIsYyl7ZGUoYiwyKTt2YXIgZD1CKGIpO3ZvaWQgMCE9PWQuZmlyc3RDaGlsZCYmKGQuY2hpbGROb2Rlcz1udWxsKTtpZihhLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKWZvcihhPWEuX19zaGFkeV9uYXRpdmVfZmlyc3RDaGlsZDthO2E9YS5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZyllZShhLGIsZCxjKTtlbHNlIGVlKGEsYixkLGMpfVxuZnVuY3Rpb24gc2QoYSxiKXt2YXIgYz1CKGEpO2I9QihiKTthPT09Yi5maXJzdENoaWxkJiYoYi5maXJzdENoaWxkPWMubmV4dFNpYmxpbmcpO2E9PT1iLmxhc3RDaGlsZCYmKGIubGFzdENoaWxkPWMucHJldmlvdXNTaWJsaW5nKTthPWMucHJldmlvdXNTaWJsaW5nO3ZhciBkPWMubmV4dFNpYmxpbmc7YSYmKEIoYSkubmV4dFNpYmxpbmc9ZCk7ZCYmKEIoZCkucHJldmlvdXNTaWJsaW5nPWEpO2MucGFyZW50Tm9kZT1jLnByZXZpb3VzU2libGluZz1jLm5leHRTaWJsaW5nPXZvaWQgMDt2b2lkIDAhPT1iLmNoaWxkTm9kZXMmJihiLmNoaWxkTm9kZXM9bnVsbCl9XG5mdW5jdGlvbiBKZChhLGIpe3ZhciBjPUIoYSk7aWYoYnx8dm9pZCAwPT09Yy5maXJzdENoaWxkKXtjLmNoaWxkTm9kZXM9bnVsbDt2YXIgZD1jLmZpcnN0Q2hpbGQ9YS5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkO2MubGFzdENoaWxkPWEuX19zaGFkeV9uYXRpdmVfbGFzdENoaWxkO2RlKGEsMik7Yz1kO2ZvcihkPXZvaWQgMDtjO2M9Yy5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZyl7dmFyIGU9QihjKTtlLnBhcmVudE5vZGU9Ynx8YTtlLm5leHRTaWJsaW5nPWMuX19zaGFkeV9uYXRpdmVfbmV4dFNpYmxpbmc7ZS5wcmV2aW91c1NpYmxpbmc9ZHx8bnVsbDtkPWM7ZGUoYywxKX19fTt2YXIgZmU9USh7YWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIsYyl7XCJvYmplY3RcIiE9PXR5cGVvZiBjJiYoYz17Y2FwdHVyZTohIWN9KTtjLk89Yy5PfHx0aGlzO3RoaXMuaG9zdC5fX3NoYWR5X2FkZEV2ZW50TGlzdGVuZXIoYSxiLGMpfSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYixjKXtcIm9iamVjdFwiIT09dHlwZW9mIGMmJihjPXtjYXB0dXJlOiEhY30pO2MuTz1jLk98fHRoaXM7dGhpcy5ob3N0Ll9fc2hhZHlfcmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGIsYyl9fSk7ZnVuY3Rpb24gZ2UoYSxiKXtQKGEsZmUsYik7UChhLFNkLGIpO1AoYSxPZCxiKTtQKGEsemQsYik7Ti5EJiYhYj8oUChhLHRkLGIpLFAoYSxSZCxiKSk6Ti5CfHwoUChhLG5jKSxQKGEsbGMpLFAoYSxtYykpfTt2YXIgTGQ9e30saGU9Ti5kZWZlckNvbm5lY3Rpb25DYWxsYmFja3MmJlwibG9hZGluZ1wiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZSxpZTtmdW5jdGlvbiBqZShhKXt2YXIgYj1bXTtkbyBiLnVuc2hpZnQoYSk7d2hpbGUoYT1hLl9fc2hhZHlfcGFyZW50Tm9kZSk7cmV0dXJuIGJ9ZnVuY3Rpb24gS2QoYSxiLGMpe2lmKGEhPT1MZCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTt0aGlzLmE9bnVsbDtJZCh0aGlzLGIsYyl9XG5mdW5jdGlvbiBJZChhLGIsYyl7YS5ob3N0PWI7YS5tb2RlPWMmJmMubW9kZTtKZChhLmhvc3QpO2I9QihhLmhvc3QpO2Iucm9vdD1hO2IuYmI9XCJjbG9zZWRcIiE9PWEubW9kZT9hOm51bGw7Yj1CKGEpO2IuZmlyc3RDaGlsZD1iLmxhc3RDaGlsZD1iLnBhcmVudE5vZGU9Yi5uZXh0U2libGluZz1iLnByZXZpb3VzU2libGluZz1udWxsO2lmKE4ucHJlZmVyUGVyZm9ybWFuY2UpZm9yKDtiPWEuaG9zdC5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkOylhLmhvc3QuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQ2hpbGQoYik7ZWxzZSBwZChhKX1mdW5jdGlvbiBwZChhKXthLlR8fChhLlQ9ITAsS2IoZnVuY3Rpb24oKXtyZXR1cm4gdmQoYSl9KSl9XG5mdW5jdGlvbiB2ZChhKXt2YXIgYjtpZihiPWEuVCl7Zm9yKHZhciBjO2E7KWE6e2EuVCYmKGM9YSksYj1hO2E9Yi5ob3N0Ll9fc2hhZHlfZ2V0Um9vdE5vZGUoKTtpZihPKGEpJiYoYj1MKGIuaG9zdCkpJiYwPGIuY2EpYnJlYWsgYTthPXZvaWQgMH1iPWN9KGM9YikmJmMuX3JlbmRlclNlbGYoKX1cbktkLnByb3RvdHlwZS5fcmVuZGVyU2VsZj1mdW5jdGlvbigpe3ZhciBhPWhlO2hlPSEwO3RoaXMuVD0hMTtpZih0aGlzLmEpe0VkKHRoaXMpO2Zvcih2YXIgYj0wLGM7Yjx0aGlzLmEubGVuZ3RoO2IrKyl7Yz10aGlzLmFbYl07dmFyIGQ9TChjKSxlPWQuYXNzaWduZWROb2RlcztkLmFzc2lnbmVkTm9kZXM9W107ZC5WPVtdO2lmKGQuQmE9ZSlmb3IoZD0wO2Q8ZS5sZW5ndGg7ZCsrKXt2YXIgZj1MKGVbZF0pO2Yub2E9Zi5hc3NpZ25lZFNsb3Q7Zi5hc3NpZ25lZFNsb3Q9PT1jJiYoZi5hc3NpZ25lZFNsb3Q9bnVsbCl9fWZvcihiPXRoaXMuaG9zdC5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YjtiPWIuX19zaGFkeV9uZXh0U2libGluZylrZSh0aGlzLGIpO2ZvcihiPTA7Yjx0aGlzLmEubGVuZ3RoO2IrKyl7Yz10aGlzLmFbYl07ZT1MKGMpO2lmKCFlLmFzc2lnbmVkTm9kZXMubGVuZ3RoKWZvcihkPWMuX19zaGFkeV9maXJzdENoaWxkO2Q7ZD1kLl9fc2hhZHlfbmV4dFNpYmxpbmcpa2UodGhpcyxcbmQsYyk7KGQ9KGQ9TChjLl9fc2hhZHlfcGFyZW50Tm9kZSkpJiZkLnJvb3QpJiYodGIoZCl8fGQuVCkmJmQuX3JlbmRlclNlbGYoKTtsZSh0aGlzLGUuVixlLmFzc2lnbmVkTm9kZXMpO2lmKGQ9ZS5CYSl7Zm9yKGY9MDtmPGQubGVuZ3RoO2YrKylMKGRbZl0pLm9hPW51bGw7ZS5CYT1udWxsO2QubGVuZ3RoPmUuYXNzaWduZWROb2Rlcy5sZW5ndGgmJihlLnJhPSEwKX1lLnJhJiYoZS5yYT0hMSxtZSh0aGlzLGMpKX1jPXRoaXMuYTtiPVtdO2ZvcihlPTA7ZTxjLmxlbmd0aDtlKyspZD1jW2VdLl9fc2hhZHlfcGFyZW50Tm9kZSwoZj1MKGQpKSYmZi5yb290fHwhKDA+Yi5pbmRleE9mKGQpKXx8Yi5wdXNoKGQpO2ZvcihjPTA7YzxiLmxlbmd0aDtjKyspe2Y9YltjXTtlPWY9PT10aGlzP3RoaXMuaG9zdDpmO2Q9W107Zm9yKGY9Zi5fX3NoYWR5X2ZpcnN0Q2hpbGQ7ZjtmPWYuX19zaGFkeV9uZXh0U2libGluZylpZihcInNsb3RcIj09Zi5sb2NhbE5hbWUpZm9yKHZhciBnPUwoZikuVixoPTA7aDxcbmcubGVuZ3RoO2grKylkLnB1c2goZ1toXSk7ZWxzZSBkLnB1c2goZik7Zj1EYihlKTtnPVdjKGQsZC5sZW5ndGgsZixmLmxlbmd0aCk7Zm9yKHZhciBrPWg9MCxsPXZvaWQgMDtoPGcubGVuZ3RoJiYobD1nW2hdKTtoKyspe2Zvcih2YXIgbT0wLHE9dm9pZCAwO208bC5hYS5sZW5ndGgmJihxPWwuYWFbbV0pO20rKylxLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGU9PT1lJiZlLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKHEpLGYuc3BsaWNlKGwuaW5kZXgraywxKTtrLT1sLmhhfWs9MDtmb3IobD12b2lkIDA7azxnLmxlbmd0aCYmKGw9Z1trXSk7aysrKWZvcihoPWZbbC5pbmRleF0sbT1sLmluZGV4O208bC5pbmRleCtsLmhhO20rKylxPWRbbV0sZS5fX3NoYWR5X25hdGl2ZV9pbnNlcnRCZWZvcmUocSxoKSxmLnNwbGljZShtLDAscSl9fWlmKCFOLnByZWZlclBlcmZvcm1hbmNlJiYhdGhpcy5BYSlmb3IoYj10aGlzLmhvc3QuX19zaGFkeV9maXJzdENoaWxkO2I7Yj1iLl9fc2hhZHlfbmV4dFNpYmxpbmcpYz1cbkwoYiksYi5fX3NoYWR5X25hdGl2ZV9wYXJlbnROb2RlIT09dGhpcy5ob3N0fHxcInNsb3RcIiE9PWIubG9jYWxOYW1lJiZjLmFzc2lnbmVkU2xvdHx8dGhpcy5ob3N0Ll9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGIpO3RoaXMuQWE9ITA7aGU9YTtpZSYmaWUoKX07ZnVuY3Rpb24ga2UoYSxiLGMpe3ZhciBkPUIoYiksZT1kLm9hO2Qub2E9bnVsbDtjfHwoYz0oYT1hLmJbYi5fX3NoYWR5X3Nsb3R8fFwiX19jYXRjaGFsbFwiXSkmJmFbMF0pO2M/KEIoYykuYXNzaWduZWROb2Rlcy5wdXNoKGIpLGQuYXNzaWduZWRTbG90PWMpOmQuYXNzaWduZWRTbG90PXZvaWQgMDtlIT09ZC5hc3NpZ25lZFNsb3QmJmQuYXNzaWduZWRTbG90JiYoQihkLmFzc2lnbmVkU2xvdCkucmE9ITApfVxuZnVuY3Rpb24gbGUoYSxiLGMpe2Zvcih2YXIgZD0wLGU9dm9pZCAwO2Q8Yy5sZW5ndGgmJihlPWNbZF0pO2QrKylpZihcInNsb3RcIj09ZS5sb2NhbE5hbWUpe3ZhciBmPUwoZSkuYXNzaWduZWROb2RlcztmJiZmLmxlbmd0aCYmbGUoYSxiLGYpfWVsc2UgYi5wdXNoKGNbZF0pfWZ1bmN0aW9uIG1lKGEsYil7Yi5fX3NoYWR5X25hdGl2ZV9kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInNsb3RjaGFuZ2VcIikpO2I9TChiKTtiLmFzc2lnbmVkU2xvdCYmbWUoYSxiLmFzc2lnbmVkU2xvdCl9ZnVuY3Rpb24gb2QoYSl7YS5jPWEuY3x8W107YS5hPWEuYXx8W107YS5iPWEuYnx8e319XG5mdW5jdGlvbiBFZChhKXtpZihhLmMmJmEuYy5sZW5ndGgpe2Zvcih2YXIgYj1hLmMsYyxkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBlPWJbZF07SmQoZSk7dmFyIGY9ZS5fX3NoYWR5X3BhcmVudE5vZGU7SmQoZik7Zj1MKGYpO2YuY2E9KGYuY2F8fDApKzE7Zj1GZChlKTthLmJbZl0/KGM9Y3x8e30sY1tmXT0hMCxhLmJbZl0ucHVzaChlKSk6YS5iW2ZdPVtlXTthLmEucHVzaChlKX1pZihjKWZvcih2YXIgZyBpbiBjKWEuYltnXT1HZChhLmJbZ10pO2EuYz1bXX19ZnVuY3Rpb24gRmQoYSl7dmFyIGI9YS5uYW1lfHxhLmdldEF0dHJpYnV0ZShcIm5hbWVcIil8fFwiX19jYXRjaGFsbFwiO3JldHVybiBhLkxhPWJ9XG5mdW5jdGlvbiBHZChhKXtyZXR1cm4gYS5zb3J0KGZ1bmN0aW9uKGIsYyl7Yj1qZShiKTtmb3IodmFyIGQ9amUoYyksZT0wO2U8Yi5sZW5ndGg7ZSsrKXtjPWJbZV07dmFyIGY9ZFtlXTtpZihjIT09ZilyZXR1cm4gYj1FYihjLl9fc2hhZHlfcGFyZW50Tm9kZSksYi5pbmRleE9mKGMpLWIuaW5kZXhPZihmKX19KX1cbmZ1bmN0aW9uIHJkKGEsYil7aWYoYS5hKXtFZChhKTt2YXIgYz1hLmIsZDtmb3IoZCBpbiBjKWZvcih2YXIgZT1jW2RdLGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGc9ZVtmXTtpZihCYihiLGcpKXtlLnNwbGljZShmLDEpO3ZhciBoPWEuYS5pbmRleE9mKGcpOzA8PWgmJihhLmEuc3BsaWNlKGgsMSksKGg9TChnLl9fc2hhZHlfcGFyZW50Tm9kZSkpJiZoLmNhJiZoLmNhLS0pO2YtLTtnPUwoZyk7aWYoaD1nLlYpZm9yKHZhciBrPTA7azxoLmxlbmd0aDtrKyspe3ZhciBsPWhba10sbT1sLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGU7bSYmbS5fX3NoYWR5X25hdGl2ZV9yZW1vdmVDaGlsZChsKX1nLlY9W107Zy5hc3NpZ25lZE5vZGVzPVtdO2g9ITB9fXJldHVybiBofX1mdW5jdGlvbiB0YihhKXtFZChhKTtyZXR1cm4hKCFhLmF8fCFhLmEubGVuZ3RoKX1cbihmdW5jdGlvbihhKXthLl9fcHJvdG9fXz1Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZTtnZShhLFwiX19zaGFkeV9cIik7Z2UoYSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYSx7bm9kZVR5cGU6e3ZhbHVlOk5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSxjb25maWd1cmFibGU6ITB9LG5vZGVOYW1lOnt2YWx1ZTpcIiNkb2N1bWVudC1mcmFnbWVudFwiLGNvbmZpZ3VyYWJsZTohMH0sbm9kZVZhbHVlOnt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMH19KTtbXCJsb2NhbE5hbWVcIixcIm5hbWVzcGFjZVVSSVwiLFwicHJlZml4XCJdLmZvckVhY2goZnVuY3Rpb24oYil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7dmFsdWU6dm9pZCAwLGNvbmZpZ3VyYWJsZTohMH0pfSk7W1wib3duZXJEb2N1bWVudFwiLFwiYmFzZVVSSVwiLFwiaXNDb25uZWN0ZWRcIl0uZm9yRWFjaChmdW5jdGlvbihiKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ob3N0W2JdfSxcbmNvbmZpZ3VyYWJsZTohMH0pfSl9KShLZC5wcm90b3R5cGUpO1xuaWYod2luZG93LmN1c3RvbUVsZW1lbnRzJiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lJiZOLnNhJiYhTi5wcmVmZXJQZXJmb3JtYW5jZSl7dmFyIG5lPW5ldyBNYXA7aWU9ZnVuY3Rpb24oKXt2YXIgYT1bXTtuZS5mb3JFYWNoKGZ1bmN0aW9uKGQsZSl7YS5wdXNoKFtlLGRdKX0pO25lLmNsZWFyKCk7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBjPWFbYl1bMF07YVtiXVsxXT9jLl9fc2hhZHlkb21fY29ubmVjdGVkQ2FsbGJhY2soKTpjLl9fc2hhZHlkb21fZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19O2hlJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicmVhZHlzdGF0ZWNoYW5nZVwiLGZ1bmN0aW9uKCl7aGU9ITE7aWUoKX0se29uY2U6ITB9KTt2YXIgb2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPTAsZT1cIl9faXNDb25uZWN0ZWRcIitkKys7aWYoYnx8YylhLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjaz1hLnByb3RvdHlwZS5fX3NoYWR5ZG9tX2Nvbm5lY3RlZENhbGxiYWNrPVxuZnVuY3Rpb24oKXtoZT9uZS5zZXQodGhpcywhMCk6dGhpc1tlXXx8KHRoaXNbZV09ITAsYiYmYi5jYWxsKHRoaXMpKX0sYS5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2s9YS5wcm90b3R5cGUuX19zaGFkeWRvbV9kaXNjb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe2hlP3RoaXMuaXNDb25uZWN0ZWR8fG5lLnNldCh0aGlzLCExKTp0aGlzW2VdJiYodGhpc1tlXT0hMSxjJiZjLmNhbGwodGhpcykpfTtyZXR1cm4gYX0scGU9d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSxxZT1mdW5jdGlvbihhLGIpe3ZhciBjPWIucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrLGQ9Yi5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2s7cGUuY2FsbCh3aW5kb3cuY3VzdG9tRWxlbWVudHMsYSxvZShiLGMsZCkpO2IucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWM7Yi5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2s9ZH07d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZT1cbnFlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZSxcImRlZmluZVwiLHt2YWx1ZTpxZSxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBuZChhKXthPWEuX19zaGFkeV9nZXRSb290Tm9kZSgpO2lmKE8oYSkpcmV0dXJuIGF9O2Z1bmN0aW9uIHJlKGEpe3RoaXMubm9kZT1hfXc9cmUucHJvdG90eXBlO3cuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2FkZEV2ZW50TGlzdGVuZXIoYSxiLGMpfTt3LnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9yZW1vdmVFdmVudExpc3RlbmVyKGEsYixjKX07dy5hcHBlbmRDaGlsZD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYXBwZW5kQ2hpbGQoYSl9O3cuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2luc2VydEJlZm9yZShhLGIpfTt3LnJlbW92ZUNoaWxkPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9yZW1vdmVDaGlsZChhKX07dy5yZXBsYWNlQ2hpbGQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfcmVwbGFjZUNoaWxkKGEsYil9O1xudy5jbG9uZU5vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2Nsb25lTm9kZShhKX07dy5nZXRSb290Tm9kZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZ2V0Um9vdE5vZGUoYSl9O3cuY29udGFpbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2NvbnRhaW5zKGEpfTt3LmRpc3BhdGNoRXZlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2Rpc3BhdGNoRXZlbnQoYSl9O3cuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKGEsYil7dGhpcy5ub2RlLl9fc2hhZHlfc2V0QXR0cmlidXRlKGEsYil9O3cuZ2V0QXR0cmlidXRlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9uYXRpdmVfZ2V0QXR0cmlidXRlKGEpfTt3Lmhhc0F0dHJpYnV0ZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfbmF0aXZlX2hhc0F0dHJpYnV0ZShhKX07dy5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24oYSl7dGhpcy5ub2RlLl9fc2hhZHlfcmVtb3ZlQXR0cmlidXRlKGEpfTtcbncuYXR0YWNoU2hhZG93PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9hdHRhY2hTaGFkb3coYSl9O3cuZm9jdXM9ZnVuY3Rpb24oKXt0aGlzLm5vZGUuX19zaGFkeV9uYXRpdmVfZm9jdXMoKX07dy5ibHVyPWZ1bmN0aW9uKCl7dGhpcy5ub2RlLl9fc2hhZHlfYmx1cigpfTt3LmltcG9ydE5vZGU9ZnVuY3Rpb24oYSxiKXtpZih0aGlzLm5vZGUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX05PREUpcmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2ltcG9ydE5vZGUoYSxiKX07dy5nZXRFbGVtZW50QnlJZD1mdW5jdGlvbihhKXtpZih0aGlzLm5vZGUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX05PREUpcmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2dldEVsZW1lbnRCeUlkKGEpfTt3LnF1ZXJ5U2VsZWN0b3I9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3F1ZXJ5U2VsZWN0b3IoYSl9O1xudy5xdWVyeVNlbGVjdG9yQWxsPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3F1ZXJ5U2VsZWN0b3JBbGwoYSxiKX07dy5hc3NpZ25lZE5vZGVzPWZ1bmN0aW9uKGEpe2lmKFwic2xvdFwiPT09dGhpcy5ub2RlLmxvY2FsTmFtZSlyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYXNzaWduZWROb2RlcyhhKX07XG5mYS5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhyZS5wcm90b3R5cGUse2FjdGl2ZUVsZW1lbnQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKE8odGhpcy5ub2RlKXx8dGhpcy5ub2RlLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9OT0RFKXJldHVybiB0aGlzLm5vZGUuX19zaGFkeV9hY3RpdmVFbGVtZW50fX0sX2FjdGl2ZUVsZW1lbnQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZUVsZW1lbnR9fSxob3N0Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihPKHRoaXMubm9kZSkpcmV0dXJuIHRoaXMubm9kZS5ob3N0fX0scGFyZW50Tm9kZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3BhcmVudE5vZGV9fSxmaXJzdENoaWxkOntjb25maWd1cmFibGU6ITAsXG5lbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9maXJzdENoaWxkfX0sbGFzdENoaWxkOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfbGFzdENoaWxkfX0sbmV4dFNpYmxpbmc6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9uZXh0U2libGluZ319LHByZXZpb3VzU2libGluZzp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3ByZXZpb3VzU2libGluZ319LGNoaWxkTm9kZXM6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9jaGlsZE5vZGVzfX0scGFyZW50RWxlbWVudDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsXG5nZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfcGFyZW50RWxlbWVudH19LGZpcnN0RWxlbWVudENoaWxkOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZmlyc3RFbGVtZW50Q2hpbGR9fSxsYXN0RWxlbWVudENoaWxkOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfbGFzdEVsZW1lbnRDaGlsZH19LG5leHRFbGVtZW50U2libGluZzp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X25leHRFbGVtZW50U2libGluZ319LHByZXZpb3VzRWxlbWVudFNpYmxpbmc6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wcmV2aW91c0VsZW1lbnRTaWJsaW5nfX0sXG5jaGlsZHJlbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2NoaWxkcmVufX0sY2hpbGRFbGVtZW50Q291bnQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9jaGlsZEVsZW1lbnRDb3VudH19LHNoYWRvd1Jvb3Q6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9zaGFkb3dSb290fX0sYXNzaWduZWRTbG90Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYXNzaWduZWRTbG90fX0saXNDb25uZWN0ZWQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9pc0Nvbm5lY3RlZH19LGlubmVySFRNTDp7Y29uZmlndXJhYmxlOiEwLFxuZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaW5uZXJIVE1MfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5ub2RlLl9fc2hhZHlfaW5uZXJIVE1MPWF9fSx0ZXh0Q29udGVudDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3RleHRDb250ZW50fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5ub2RlLl9fc2hhZHlfdGV4dENvbnRlbnQ9YX19LHNsb3Q6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9zbG90fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5ub2RlLl9fc2hhZHlfc2xvdD1hfX0sY2xhc3NOYW1lOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2xhc3NOYW1lfSxzZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2NsYXNzTmFtZT1cbmF9fX0pO2Z1bmN0aW9uIHNlKGEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShyZS5wcm90b3R5cGUsYSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVtcIl9fc2hhZHlfXCIrYV19LHNldDpmdW5jdGlvbihiKXt0aGlzLm5vZGVbXCJfX3NoYWR5X1wiK2FdPWJ9LGNvbmZpZ3VyYWJsZTohMH0pfVNjLmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIHNlKGEpfSk7VGMuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gc2UoYSl9KTt2YXIgdGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gdWUoYSl7aWYoTyhhKXx8YSBpbnN0YW5jZW9mIHJlKXJldHVybiBhO3ZhciBiPXRlLmdldChhKTtifHwoYj1uZXcgcmUoYSksdGUuc2V0KGEsYikpO3JldHVybiBifTtpZihOLnNhKXt2YXIgdmU9Ti5CP2Z1bmN0aW9uKGEpe3JldHVybiBhfTpmdW5jdGlvbihhKXtyYyhhKTtxYyhhKTtyZXR1cm4gYX0sU2hhZHlET009e2luVXNlOk4uc2EscGF0Y2g6dmUsaXNTaGFkeVJvb3Q6TyxlbnF1ZXVlOktiLGZsdXNoOkxiLGZsdXNoSW5pdGlhbDpmdW5jdGlvbihhKXshYS5BYSYmYS5UJiZ2ZChhKX0sc2V0dGluZ3M6TixmaWx0ZXJNdXRhdGlvbnM6UWIsb2JzZXJ2ZUNoaWxkcmVuOk9iLHVub2JzZXJ2ZUNoaWxkcmVuOlBiLGRlZmVyQ29ubmVjdGlvbkNhbGxiYWNrczpOLmRlZmVyQ29ubmVjdGlvbkNhbGxiYWNrcyxwcmVmZXJQZXJmb3JtYW5jZTpOLnByZWZlclBlcmZvcm1hbmNlLGhhbmRsZXNEeW5hbWljU2NvcGluZzohMCx3cmFwOk4uRD91ZTp2ZSx3cmFwSWZOZWVkZWQ6ITA9PT1OLkQ/dWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LFdyYXBwZXI6cmUsY29tcG9zZWRQYXRoOkFjLG5vUGF0Y2g6Ti5ELHBhdGNoT25EZW1hbmQ6Ti51YSxuYXRpdmVNZXRob2RzOmFjLFxubmF0aXZlVHJlZTpiYyxwYXRjaEVsZW1lbnRQcm90bzphZX07d2luZG93LlNoYWR5RE9NPVNoYWR5RE9NO2tjKCk7JGQoXCJfX3NoYWR5X1wiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZG9jdW1lbnQsXCJfYWN0aXZlRWxlbWVudFwiLFNkLmFjdGl2ZUVsZW1lbnQpO1AoV2luZG93LnByb3RvdHlwZSxWZCxcIl9fc2hhZHlfXCIpO04uRD9OLnVhJiZQKEVsZW1lbnQucHJvdG90eXBlLE1kKTooJGQoKSxSYygpKTtNYygpO3dpbmRvdy5FdmVudD1PYzt3aW5kb3cuQ3VzdG9tRXZlbnQ9UGM7d2luZG93Lk1vdXNlRXZlbnQ9UWM7d2luZG93LlNoYWRvd1Jvb3Q9S2R9Oy8qXG5cbiBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdFxuIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kXG4gYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heVxuIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnlcbiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQXG4gcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuKi9cbi8qXG5cbiBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdFxuIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kXG4gYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heVxuIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnlcbiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQXG4gcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuKi9cbnZhciB3ZT13aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQseGU9d2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50TlMseWU9d2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5pbXBvcnROb2RlLHplPXdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUucHJlcGVuZCxBZT13aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmFwcGVuZCxCZT13aW5kb3cuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUucHJlcGVuZCxDZT13aW5kb3cuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUuYXBwZW5kLERlPXdpbmRvdy5Ob2RlLnByb3RvdHlwZS5jbG9uZU5vZGUsRWU9d2luZG93Lk5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkLEZlPXdpbmRvdy5Ob2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmUsR2U9d2luZG93Lk5vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkLEhlPXdpbmRvdy5Ob2RlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQsSWU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3cuTm9kZS5wcm90b3R5cGUsXG5cInRleHRDb250ZW50XCIpLEplPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3csS2U9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUsXCJpbm5lckhUTUxcIiksTGU9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZSxNZT13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlLE5lPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGUsT2U9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5TLFBlPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVOUyxRZT13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlTlMsUmU9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmluc2VydEFkamFjZW50RWxlbWVudCxTZT13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0QWRqYWNlbnRIVE1MLFRlPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5wcmVwZW5kLFxuVWU9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFwcGVuZCxWZT13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYmVmb3JlLFdlPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hZnRlcixYZT13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUucmVwbGFjZVdpdGgsWWU9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLnJlbW92ZSxaZT13aW5kb3cuSFRNTEVsZW1lbnQsJGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3cuSFRNTEVsZW1lbnQucHJvdG90eXBlLFwiaW5uZXJIVE1MXCIpLGFmPXdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0QWRqYWNlbnRFbGVtZW50LGJmPXdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0QWRqYWNlbnRIVE1MO3ZhciBjZj1uZXcgU2V0O1wiYW5ub3RhdGlvbi14bWwgY29sb3ItcHJvZmlsZSBmb250LWZhY2UgZm9udC1mYWNlLXNyYyBmb250LWZhY2UtdXJpIGZvbnQtZmFjZS1mb3JtYXQgZm9udC1mYWNlLW5hbWUgbWlzc2luZy1nbHlwaFwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBjZi5hZGQoYSl9KTtmdW5jdGlvbiBkZihhKXt2YXIgYj1jZi5oYXMoYSk7YT0vXlthLXpdWy4wLTlfYS16XSotWy0uMC05X2Etel0qJC8udGVzdChhKTtyZXR1cm4hYiYmYX12YXIgZWY9ZG9jdW1lbnQuY29udGFpbnM/ZG9jdW1lbnQuY29udGFpbnMuYmluZChkb2N1bWVudCk6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zLmJpbmQoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcbmZ1bmN0aW9uIFQoYSl7dmFyIGI9YS5pc0Nvbm5lY3RlZDtpZih2b2lkIDAhPT1iKXJldHVybiBiO2lmKGVmKGEpKXJldHVybiEwO2Zvcig7YSYmIShhLl9fQ0VfaXNJbXBvcnREb2N1bWVudHx8YSBpbnN0YW5jZW9mIERvY3VtZW50KTspYT1hLnBhcmVudE5vZGV8fCh3aW5kb3cuU2hhZG93Um9vdCYmYSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q/YS5ob3N0OnZvaWQgMCk7cmV0dXJuISghYXx8IShhLl9fQ0VfaXNJbXBvcnREb2N1bWVudHx8YSBpbnN0YW5jZW9mIERvY3VtZW50KSl9ZnVuY3Rpb24gZmYoYSl7dmFyIGI9YS5jaGlsZHJlbjtpZihiKXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiKTtiPVtdO2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZylhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJmIucHVzaChhKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIGdmKGEsYil7Zm9yKDtiJiZiIT09YSYmIWIubmV4dFNpYmxpbmc7KWI9Yi5wYXJlbnROb2RlO3JldHVybiBiJiZiIT09YT9iLm5leHRTaWJsaW5nOm51bGx9XG5mdW5jdGlvbiBoZihhLGIsYyl7Zm9yKHZhciBkPWE7ZDspe2lmKGQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSl7dmFyIGU9ZDtiKGUpO3ZhciBmPWUubG9jYWxOYW1lO2lmKFwibGlua1wiPT09ZiYmXCJpbXBvcnRcIj09PWUuZ2V0QXR0cmlidXRlKFwicmVsXCIpKXtkPWUuaW1wb3J0O3ZvaWQgMD09PWMmJihjPW5ldyBTZXQpO2lmKGQgaW5zdGFuY2VvZiBOb2RlJiYhYy5oYXMoZCkpZm9yKGMuYWRkKGQpLGQ9ZC5maXJzdENoaWxkO2Q7ZD1kLm5leHRTaWJsaW5nKWhmKGQsYixjKTtkPWdmKGEsZSk7Y29udGludWV9ZWxzZSBpZihcInRlbXBsYXRlXCI9PT1mKXtkPWdmKGEsZSk7Y29udGludWV9aWYoZT1lLl9fQ0Vfc2hhZG93Um9vdClmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaGYoZSxiLGMpfWQ9ZC5maXJzdENoaWxkP2QuZmlyc3RDaGlsZDpnZihhLGQpfX07ZnVuY3Rpb24gamYoKXt2YXIgYT0hKG51bGw9PT1rZnx8dm9pZCAwPT09a2Z8fCFrZi5ub0RvY3VtZW50Q29uc3RydWN0aW9uT2JzZXJ2ZXIpLGI9IShudWxsPT09a2Z8fHZvaWQgMD09PWtmfHwha2Yuc2hhZHlEb21GYXN0V2Fsayk7dGhpcy5YPVtdO3RoaXMuYT1bXTt0aGlzLlI9ITE7dGhpcy5zaGFkeURvbUZhc3RXYWxrPWI7dGhpcy5qYj0hYX1mdW5jdGlvbiBsZihhLGIsYyxkKXt2YXIgZT13aW5kb3cuU2hhZHlEb207aWYoYS5zaGFkeURvbUZhc3RXYWxrJiZlJiZlLmluVXNlKXtpZihiLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJmMoYiksYi5xdWVyeVNlbGVjdG9yQWxsKWZvcihhPWUubmF0aXZlTWV0aG9kcy5xdWVyeVNlbGVjdG9yQWxsLmNhbGwoYixcIipcIiksYj0wO2I8YS5sZW5ndGg7YisrKWMoYVtiXSl9ZWxzZSBoZihiLGMsZCl9ZnVuY3Rpb24gbWYoYSxiKXthLlI9ITA7YS5YLnB1c2goYil9ZnVuY3Rpb24gbmYoYSxiKXthLlI9ITA7YS5hLnB1c2goYil9XG5mdW5jdGlvbiBvZihhLGIpe2EuUiYmbGYoYSxiLGZ1bmN0aW9uKGMpe3JldHVybiBwZihhLGMpfSl9ZnVuY3Rpb24gcGYoYSxiKXtpZihhLlImJiFiLl9fQ0VfcGF0Y2hlZCl7Yi5fX0NFX3BhdGNoZWQ9ITA7Zm9yKHZhciBjPTA7YzxhLlgubGVuZ3RoO2MrKylhLlhbY10oYik7Zm9yKGM9MDtjPGEuYS5sZW5ndGg7YysrKWEuYVtjXShiKX19ZnVuY3Rpb24gcWYoYSxiKXt2YXIgYz1bXTtsZihhLGIsZnVuY3Rpb24oZSl7cmV0dXJuIGMucHVzaChlKX0pO2ZvcihiPTA7YjxjLmxlbmd0aDtiKyspe3ZhciBkPWNbYl07MT09PWQuX19DRV9zdGF0ZT9hLmNvbm5lY3RlZENhbGxiYWNrKGQpOnJmKGEsZCl9fWZ1bmN0aW9uIHNmKGEsYil7dmFyIGM9W107bGYoYSxiLGZ1bmN0aW9uKGUpe3JldHVybiBjLnB1c2goZSl9KTtmb3IoYj0wO2I8Yy5sZW5ndGg7YisrKXt2YXIgZD1jW2JdOzE9PT1kLl9fQ0Vfc3RhdGUmJmEuZGlzY29ubmVjdGVkQ2FsbGJhY2soZCl9fVxuZnVuY3Rpb24gdGYoYSxiLGMpe2M9dm9pZCAwPT09Yz97fTpjO3ZhciBkPWMua2IsZT1jLnVwZ3JhZGV8fGZ1bmN0aW9uKGcpe3JldHVybiByZihhLGcpfSxmPVtdO2xmKGEsYixmdW5jdGlvbihnKXthLlImJnBmKGEsZyk7aWYoXCJsaW5rXCI9PT1nLmxvY2FsTmFtZSYmXCJpbXBvcnRcIj09PWcuZ2V0QXR0cmlidXRlKFwicmVsXCIpKXt2YXIgaD1nLmltcG9ydDtoIGluc3RhbmNlb2YgTm9kZSYmKGguX19DRV9pc0ltcG9ydERvY3VtZW50PSEwLGguX19DRV9yZWdpc3RyeT1kb2N1bWVudC5fX0NFX3JlZ2lzdHJ5KTtoJiZcImNvbXBsZXRlXCI9PT1oLnJlYWR5U3RhdGU/aC5fX0NFX2RvY3VtZW50TG9hZEhhbmRsZWQ9ITA6Zy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLGZ1bmN0aW9uKCl7dmFyIGs9Zy5pbXBvcnQ7aWYoIWsuX19DRV9kb2N1bWVudExvYWRIYW5kbGVkKXtrLl9fQ0VfZG9jdW1lbnRMb2FkSGFuZGxlZD0hMDt2YXIgbD1uZXcgU2V0O2QmJihkLmZvckVhY2goZnVuY3Rpb24obSl7cmV0dXJuIGwuYWRkKG0pfSksXG5sLmRlbGV0ZShrKSk7dGYoYSxrLHtrYjpsLHVwZ3JhZGU6ZX0pfX0pfWVsc2UgZi5wdXNoKGcpfSxkKTtmb3IoYj0wO2I8Zi5sZW5ndGg7YisrKWUoZltiXSl9XG5mdW5jdGlvbiByZihhLGIpe3RyeXt2YXIgYz1iLm93bmVyRG9jdW1lbnQsZD1jLl9fQ0VfcmVnaXN0cnk7dmFyIGU9ZCYmKGMuZGVmYXVsdFZpZXd8fGMuX19DRV9pc0ltcG9ydERvY3VtZW50KT91ZihkLGIubG9jYWxOYW1lKTp2b2lkIDA7aWYoZSYmdm9pZCAwPT09Yi5fX0NFX3N0YXRlKXtlLmNvbnN0cnVjdGlvblN0YWNrLnB1c2goYik7dHJ5e3RyeXtpZihuZXcgZS5jb25zdHJ1Y3RvckZ1bmN0aW9uIT09Yil0aHJvdyBFcnJvcihcIlRoZSBjdXN0b20gZWxlbWVudCBjb25zdHJ1Y3RvciBkaWQgbm90IHByb2R1Y2UgdGhlIGVsZW1lbnQgYmVpbmcgdXBncmFkZWQuXCIpO31maW5hbGx5e2UuY29uc3RydWN0aW9uU3RhY2sucG9wKCl9fWNhdGNoKGspe3Rocm93IGIuX19DRV9zdGF0ZT0yLGs7fWIuX19DRV9zdGF0ZT0xO2IuX19DRV9kZWZpbml0aW9uPWU7aWYoZS5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2smJmIuaGFzQXR0cmlidXRlcygpKXt2YXIgZj1lLm9ic2VydmVkQXR0cmlidXRlcztcbmZvcihlPTA7ZTxmLmxlbmd0aDtlKyspe3ZhciBnPWZbZV0saD1iLmdldEF0dHJpYnV0ZShnKTtudWxsIT09aCYmYS5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soYixnLG51bGwsaCxudWxsKX19VChiKSYmYS5jb25uZWN0ZWRDYWxsYmFjayhiKX19Y2F0Y2goayl7dmYoayl9fWpmLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbihhKXt2YXIgYj1hLl9fQ0VfZGVmaW5pdGlvbjtpZihiLmNvbm5lY3RlZENhbGxiYWNrKXRyeXtiLmNvbm5lY3RlZENhbGxiYWNrLmNhbGwoYSl9Y2F0Y2goYyl7dmYoYyl9fTtqZi5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7dmFyIGI9YS5fX0NFX2RlZmluaXRpb247aWYoYi5kaXNjb25uZWN0ZWRDYWxsYmFjayl0cnl7Yi5kaXNjb25uZWN0ZWRDYWxsYmFjay5jYWxsKGEpfWNhdGNoKGMpe3ZmKGMpfX07XG5qZi5wcm90b3R5cGUuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9YS5fX0NFX2RlZmluaXRpb247aWYoZi5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2smJi0xPGYub2JzZXJ2ZWRBdHRyaWJ1dGVzLmluZGV4T2YoYikpdHJ5e2YuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrLmNhbGwoYSxiLGMsZCxlKX1jYXRjaChnKXt2ZihnKX19O1xuZnVuY3Rpb24gd2YoYSxiLGMsZCl7dmFyIGU9Yi5fX0NFX3JlZ2lzdHJ5O2lmKGUmJihudWxsPT09ZHx8XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI9PT1kKSYmKGU9dWYoZSxjKSkpdHJ5e3ZhciBmPW5ldyBlLmNvbnN0cnVjdG9yRnVuY3Rpb247aWYodm9pZCAwPT09Zi5fX0NFX3N0YXRlfHx2b2lkIDA9PT1mLl9fQ0VfZGVmaW5pdGlvbil0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1wiK2MrXCInOiBUaGUgcmV0dXJuZWQgdmFsdWUgd2FzIG5vdCBjb25zdHJ1Y3RlZCB3aXRoIHRoZSBIVE1MRWxlbWVudCBjb25zdHJ1Y3Rvci5cIik7aWYoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIhPT1mLm5hbWVzcGFjZVVSSSl0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1wiK2MrXCInOiBUaGUgY29uc3RydWN0ZWQgZWxlbWVudCdzIG5hbWVzcGFjZSBtdXN0IGJlIHRoZSBIVE1MIG5hbWVzcGFjZS5cIik7aWYoZi5oYXNBdHRyaWJ1dGVzKCkpdGhyb3cgRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdcIitcbmMrXCInOiBUaGUgY29uc3RydWN0ZWQgZWxlbWVudCBtdXN0IG5vdCBoYXZlIGFueSBhdHRyaWJ1dGVzLlwiKTtpZihudWxsIT09Zi5maXJzdENoaWxkKXRocm93IEVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnXCIrYytcIic6IFRoZSBjb25zdHJ1Y3RlZCBlbGVtZW50IG11c3Qgbm90IGhhdmUgYW55IGNoaWxkcmVuLlwiKTtpZihudWxsIT09Zi5wYXJlbnROb2RlKXRocm93IEVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnXCIrYytcIic6IFRoZSBjb25zdHJ1Y3RlZCBlbGVtZW50IG11c3Qgbm90IGhhdmUgYSBwYXJlbnQgbm9kZS5cIik7aWYoZi5vd25lckRvY3VtZW50IT09Yil0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1wiK2MrXCInOiBUaGUgY29uc3RydWN0ZWQgZWxlbWVudCdzIG93bmVyIGRvY3VtZW50IGlzIGluY29ycmVjdC5cIik7aWYoZi5sb2NhbE5hbWUhPT1jKXRocm93IEVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnXCIrYytcIic6IFRoZSBjb25zdHJ1Y3RlZCBlbGVtZW50J3MgbG9jYWwgbmFtZSBpcyBpbmNvcnJlY3QuXCIpO1xucmV0dXJuIGZ9Y2F0Y2goZyl7cmV0dXJuIHZmKGcpLGI9bnVsbD09PWQ/d2UuY2FsbChiLGMpOnhlLmNhbGwoYixkLGMpLE9iamVjdC5zZXRQcm90b3R5cGVPZihiLEhUTUxVbmtub3duRWxlbWVudC5wcm90b3R5cGUpLGIuX19DRV9zdGF0ZT0yLGIuX19DRV9kZWZpbml0aW9uPXZvaWQgMCxwZihhLGIpLGJ9Yj1udWxsPT09ZD93ZS5jYWxsKGIsYyk6eGUuY2FsbChiLGQsYyk7cGYoYSxiKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIHZmKGEpe3ZhciBiPWEubWVzc2FnZSxjPWEuc291cmNlVVJMfHxhLmZpbGVOYW1lfHxcIlwiLGQ9YS5saW5lfHxhLmxpbmVOdW1iZXJ8fDAsZT1hLmNvbHVtbnx8YS5jb2x1bW5OdW1iZXJ8fDAsZj12b2lkIDA7dm9pZCAwPT09RXJyb3JFdmVudC5wcm90b3R5cGUuaW5pdEVycm9yRXZlbnQ/Zj1uZXcgRXJyb3JFdmVudChcImVycm9yXCIse2NhbmNlbGFibGU6ITAsbWVzc2FnZTpiLGZpbGVuYW1lOmMsbGluZW5vOmQsY29sbm86ZSxlcnJvcjphfSk6KGY9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFcnJvckV2ZW50XCIpLGYuaW5pdEVycm9yRXZlbnQoXCJlcnJvclwiLCExLCEwLGIsYyxkKSxmLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJkZWZhdWx0UHJldmVudGVkXCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KX0pO3ZvaWQgMD09PWYuZXJyb3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLFwiZXJyb3JcIixcbntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYX19KTt3aW5kb3cuZGlzcGF0Y2hFdmVudChmKTtmLmRlZmF1bHRQcmV2ZW50ZWR8fGNvbnNvbGUuZXJyb3IoYSl9O2Z1bmN0aW9uIHhmKCl7dmFyIGE9dGhpczt0aGlzLkM9dm9pZCAwO3RoaXMuQ2E9bmV3IFByb21pc2UoZnVuY3Rpb24oYil7YS5hPWJ9KX14Zi5wcm90b3R5cGUucmVzb2x2ZT1mdW5jdGlvbihhKXtpZih0aGlzLkMpdGhyb3cgRXJyb3IoXCJBbHJlYWR5IHJlc29sdmVkLlwiKTt0aGlzLkM9YTt0aGlzLmEoYSl9O2Z1bmN0aW9uIHlmKGEpe3ZhciBiPWRvY3VtZW50O3RoaXMuUz12b2lkIDA7dGhpcy5NPWE7dGhpcy5hPWI7dGYodGhpcy5NLHRoaXMuYSk7XCJsb2FkaW5nXCI9PT10aGlzLmEucmVhZHlTdGF0ZSYmKHRoaXMuUz1uZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLmIuYmluZCh0aGlzKSksdGhpcy5TLm9ic2VydmUodGhpcy5hLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pKX1mdW5jdGlvbiB6ZihhKXthLlMmJmEuUy5kaXNjb25uZWN0KCl9eWYucHJvdG90eXBlLmI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hLnJlYWR5U3RhdGU7XCJpbnRlcmFjdGl2ZVwiIT09YiYmXCJjb21wbGV0ZVwiIT09Ynx8emYodGhpcyk7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKylmb3IodmFyIGM9YVtiXS5hZGRlZE5vZGVzLGQ9MDtkPGMubGVuZ3RoO2QrKyl0Zih0aGlzLk0sY1tkXSl9O2Z1bmN0aW9uIFUoYSl7dGhpcy5lYT1uZXcgTWFwO3RoaXMuZmE9bmV3IE1hcDt0aGlzLnhhPW5ldyBNYXA7dGhpcy5uYT0hMTt0aGlzLnFhPW5ldyBNYXA7dGhpcy5kYT1mdW5jdGlvbihiKXtyZXR1cm4gYigpfTt0aGlzLlA9ITE7dGhpcy5nYT1bXTt0aGlzLk09YTt0aGlzLnlhPWEuamI/bmV3IHlmKGEpOnZvaWQgMH13PVUucHJvdG90eXBlO3cuJGE9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2lmKCEoYiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3VzdG9tIGVsZW1lbnQgY29uc3RydWN0b3IgZ2V0dGVycyBtdXN0IGJlIGZ1bmN0aW9ucy5cIik7QWYodGhpcyxhKTt0aGlzLmVhLnNldChhLGIpO3RoaXMuZ2EucHVzaChhKTt0aGlzLlB8fCh0aGlzLlA9ITAsdGhpcy5kYShmdW5jdGlvbigpe3JldHVybiBCZihjKX0pKX07XG53LmRlZmluZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7aWYoIShiIGluc3RhbmNlb2YgRnVuY3Rpb24pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDdXN0b20gZWxlbWVudCBjb25zdHJ1Y3RvcnMgbXVzdCBiZSBmdW5jdGlvbnMuXCIpO0FmKHRoaXMsYSk7Q2YodGhpcyxhLGIpO3RoaXMuZ2EucHVzaChhKTt0aGlzLlB8fCh0aGlzLlA9ITAsdGhpcy5kYShmdW5jdGlvbigpe3JldHVybiBCZihjKX0pKX07ZnVuY3Rpb24gQWYoYSxiKXtpZighZGYoYikpdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVGhlIGVsZW1lbnQgbmFtZSAnXCIrYitcIicgaXMgbm90IHZhbGlkLlwiKTtpZih1ZihhLGIpKXRocm93IEVycm9yKFwiQSBjdXN0b20gZWxlbWVudCB3aXRoIG5hbWUgJ1wiKyhiK1wiJyBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuXCIpKTtpZihhLm5hKXRocm93IEVycm9yKFwiQSBjdXN0b20gZWxlbWVudCBpcyBhbHJlYWR5IGJlaW5nIGRlZmluZWQuXCIpO31cbmZ1bmN0aW9uIENmKGEsYixjKXthLm5hPSEwO3ZhciBkO3RyeXt2YXIgZT1jLnByb3RvdHlwZTtpZighKGUgaW5zdGFuY2VvZiBPYmplY3QpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgY3VzdG9tIGVsZW1lbnQgY29uc3RydWN0b3IncyBwcm90b3R5cGUgaXMgbm90IGFuIG9iamVjdC5cIik7dmFyIGY9ZnVuY3Rpb24obSl7dmFyIHE9ZVttXTtpZih2b2lkIDAhPT1xJiYhKHEgaW5zdGFuY2VvZiBGdW5jdGlvbikpdGhyb3cgRXJyb3IoXCJUaGUgJ1wiK20rXCInIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbi5cIik7cmV0dXJuIHF9O3ZhciBnPWYoXCJjb25uZWN0ZWRDYWxsYmFja1wiKTt2YXIgaD1mKFwiZGlzY29ubmVjdGVkQ2FsbGJhY2tcIik7dmFyIGs9ZihcImFkb3B0ZWRDYWxsYmFja1wiKTt2YXIgbD0oZD1mKFwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrXCIpKSYmYy5vYnNlcnZlZEF0dHJpYnV0ZXN8fFtdfWNhdGNoKG0pe3Rocm93IG07fWZpbmFsbHl7YS5uYT0hMX1jPXtsb2NhbE5hbWU6YixcbmNvbnN0cnVjdG9yRnVuY3Rpb246Yyxjb25uZWN0ZWRDYWxsYmFjazpnLGRpc2Nvbm5lY3RlZENhbGxiYWNrOmgsYWRvcHRlZENhbGxiYWNrOmssYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrOmQsb2JzZXJ2ZWRBdHRyaWJ1dGVzOmwsY29uc3RydWN0aW9uU3RhY2s6W119O2EuZmEuc2V0KGIsYyk7YS54YS5zZXQoYy5jb25zdHJ1Y3RvckZ1bmN0aW9uLGMpO3JldHVybiBjfXcudXBncmFkZT1mdW5jdGlvbihhKXt0Zih0aGlzLk0sYSl9O1xuZnVuY3Rpb24gQmYoYSl7aWYoITEhPT1hLlApe2EuUD0hMTtmb3IodmFyIGI9W10sYz1hLmdhLGQ9bmV3IE1hcCxlPTA7ZTxjLmxlbmd0aDtlKyspZC5zZXQoY1tlXSxbXSk7dGYoYS5NLGRvY3VtZW50LHt1cGdyYWRlOmZ1bmN0aW9uKGspe2lmKHZvaWQgMD09PWsuX19DRV9zdGF0ZSl7dmFyIGw9ay5sb2NhbE5hbWUsbT1kLmdldChsKTttP20ucHVzaChrKTphLmZhLmhhcyhsKSYmYi5wdXNoKGspfX19KTtmb3IoZT0wO2U8Yi5sZW5ndGg7ZSsrKXJmKGEuTSxiW2VdKTtmb3IoZT0wO2U8Yy5sZW5ndGg7ZSsrKXtmb3IodmFyIGY9Y1tlXSxnPWQuZ2V0KGYpLGg9MDtoPGcubGVuZ3RoO2grKylyZihhLk0sZ1toXSk7KGY9YS5xYS5nZXQoZikpJiZmLnJlc29sdmUodm9pZCAwKX1jLmxlbmd0aD0wfX13LmdldD1mdW5jdGlvbihhKXtpZihhPXVmKHRoaXMsYSkpcmV0dXJuIGEuY29uc3RydWN0b3JGdW5jdGlvbn07XG53LndoZW5EZWZpbmVkPWZ1bmN0aW9uKGEpe2lmKCFkZihhKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN5bnRheEVycm9yKFwiJ1wiK2ErXCInIGlzIG5vdCBhIHZhbGlkIGN1c3RvbSBlbGVtZW50IG5hbWUuXCIpKTt2YXIgYj10aGlzLnFhLmdldChhKTtpZihiKXJldHVybiBiLkNhO2I9bmV3IHhmO3RoaXMucWEuc2V0KGEsYik7dmFyIGM9dGhpcy5mYS5oYXMoYSl8fHRoaXMuZWEuaGFzKGEpO2E9LTE9PT10aGlzLmdhLmluZGV4T2YoYSk7YyYmYSYmYi5yZXNvbHZlKHZvaWQgMCk7cmV0dXJuIGIuQ2F9O3cucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjaz1mdW5jdGlvbihhKXt0aGlzLnlhJiZ6Zih0aGlzLnlhKTt2YXIgYj10aGlzLmRhO3RoaXMuZGE9ZnVuY3Rpb24oYyl7cmV0dXJuIGEoZnVuY3Rpb24oKXtyZXR1cm4gYihjKX0pfX07XG5mdW5jdGlvbiB1ZihhLGIpe3ZhciBjPWEuZmEuZ2V0KGIpO2lmKGMpcmV0dXJuIGM7aWYoYz1hLmVhLmdldChiKSl7YS5lYS5kZWxldGUoYik7dHJ5e3JldHVybiBDZihhLGIsYygpKX1jYXRjaChkKXt2ZihkKX19fXdpbmRvdy5DdXN0b21FbGVtZW50UmVnaXN0cnk9VTtVLnByb3RvdHlwZS5kZWZpbmU9VS5wcm90b3R5cGUuZGVmaW5lO1UucHJvdG90eXBlLnVwZ3JhZGU9VS5wcm90b3R5cGUudXBncmFkZTtVLnByb3RvdHlwZS5nZXQ9VS5wcm90b3R5cGUuZ2V0O1UucHJvdG90eXBlLndoZW5EZWZpbmVkPVUucHJvdG90eXBlLndoZW5EZWZpbmVkO1UucHJvdG90eXBlLnBvbHlmaWxsRGVmaW5lTGF6eT1VLnByb3RvdHlwZS4kYTtVLnByb3RvdHlwZS5wb2x5ZmlsbFdyYXBGbHVzaENhbGxiYWNrPVUucHJvdG90eXBlLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2s7ZnVuY3Rpb24gRGYoYSxiLGMpe2Z1bmN0aW9uIGQoZSl7cmV0dXJuIGZ1bmN0aW9uKGYpe2Zvcih2YXIgZz1bXSxoPTA7aDxhcmd1bWVudHMubGVuZ3RoOysraClnW2hdPWFyZ3VtZW50c1toXTtoPVtdO2Zvcih2YXIgaz1bXSxsPTA7bDxnLmxlbmd0aDtsKyspe3ZhciBtPWdbbF07bSBpbnN0YW5jZW9mIEVsZW1lbnQmJlQobSkmJmsucHVzaChtKTtpZihtIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudClmb3IobT1tLmZpcnN0Q2hpbGQ7bTttPW0ubmV4dFNpYmxpbmcpaC5wdXNoKG0pO2Vsc2UgaC5wdXNoKG0pfWUuYXBwbHkodGhpcyxnKTtmb3IoZz0wO2c8ay5sZW5ndGg7ZysrKXNmKGEsa1tnXSk7aWYoVCh0aGlzKSlmb3IoZz0wO2c8aC5sZW5ndGg7ZysrKWs9aFtnXSxrIGluc3RhbmNlb2YgRWxlbWVudCYmcWYoYSxrKX19dm9pZCAwIT09Yy5wcmVwZW5kJiYoYi5wcmVwZW5kPWQoYy5wcmVwZW5kKSk7dm9pZCAwIT09Yy5hcHBlbmQmJihiLmFwcGVuZD1kKGMuYXBwZW5kKSl9XG47ZnVuY3Rpb24gRWYoYSl7RG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oYil7cmV0dXJuIHdmKGEsdGhpcyxiLG51bGwpfTtEb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZT1mdW5jdGlvbihiLGMpe2I9eWUuY2FsbCh0aGlzLGIsISFjKTt0aGlzLl9fQ0VfcmVnaXN0cnk/dGYoYSxiKTpvZihhLGIpO3JldHVybiBifTtEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudE5TPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIHdmKGEsdGhpcyxjLGIpfTtEZihhLERvY3VtZW50LnByb3RvdHlwZSx7cHJlcGVuZDp6ZSxhcHBlbmQ6QWV9KX07ZnVuY3Rpb24gRmYoYSl7ZnVuY3Rpb24gYihkKXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBmPVtdLGc9MDtnPGFyZ3VtZW50cy5sZW5ndGg7KytnKWZbZ109YXJndW1lbnRzW2ddO2c9W107Zm9yKHZhciBoPVtdLGs9MDtrPGYubGVuZ3RoO2srKyl7dmFyIGw9ZltrXTtsIGluc3RhbmNlb2YgRWxlbWVudCYmVChsKSYmaC5wdXNoKGwpO2lmKGwgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KWZvcihsPWwuZmlyc3RDaGlsZDtsO2w9bC5uZXh0U2libGluZylnLnB1c2gobCk7ZWxzZSBnLnB1c2gobCl9ZC5hcHBseSh0aGlzLGYpO2ZvcihmPTA7ZjxoLmxlbmd0aDtmKyspc2YoYSxoW2ZdKTtpZihUKHRoaXMpKWZvcihmPTA7ZjxnLmxlbmd0aDtmKyspaD1nW2ZdLGggaW5zdGFuY2VvZiBFbGVtZW50JiZxZihhLGgpfX12YXIgYz1FbGVtZW50LnByb3RvdHlwZTt2b2lkIDAhPT1WZSYmKGMuYmVmb3JlPWIoVmUpKTt2b2lkIDAhPT1XZSYmKGMuYWZ0ZXI9YihXZSkpO3ZvaWQgMCE9PVxuWGUmJihjLnJlcGxhY2VXaXRoPWZ1bmN0aW9uKGQpe2Zvcih2YXIgZT1bXSxmPTA7Zjxhcmd1bWVudHMubGVuZ3RoOysrZillW2ZdPWFyZ3VtZW50c1tmXTtmPVtdO2Zvcih2YXIgZz1bXSxoPTA7aDxlLmxlbmd0aDtoKyspe3ZhciBrPWVbaF07ayBpbnN0YW5jZW9mIEVsZW1lbnQmJlQoaykmJmcucHVzaChrKTtpZihrIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudClmb3Ioaz1rLmZpcnN0Q2hpbGQ7aztrPWsubmV4dFNpYmxpbmcpZi5wdXNoKGspO2Vsc2UgZi5wdXNoKGspfWg9VCh0aGlzKTtYZS5hcHBseSh0aGlzLGUpO2ZvcihlPTA7ZTxnLmxlbmd0aDtlKyspc2YoYSxnW2VdKTtpZihoKWZvcihzZihhLHRoaXMpLGU9MDtlPGYubGVuZ3RoO2UrKylnPWZbZV0sZyBpbnN0YW5jZW9mIEVsZW1lbnQmJnFmKGEsZyl9KTt2b2lkIDAhPT1ZZSYmKGMucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGQ9VCh0aGlzKTtZZS5jYWxsKHRoaXMpO2QmJnNmKGEsdGhpcyl9KX07ZnVuY3Rpb24gR2YoYSl7ZnVuY3Rpb24gYihlLGYpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiaW5uZXJIVE1MXCIse2VudW1lcmFibGU6Zi5lbnVtZXJhYmxlLGNvbmZpZ3VyYWJsZTohMCxnZXQ6Zi5nZXQsc2V0OmZ1bmN0aW9uKGcpe3ZhciBoPXRoaXMsaz12b2lkIDA7VCh0aGlzKSYmKGs9W10sbGYoYSx0aGlzLGZ1bmN0aW9uKHEpe3EhPT1oJiZrLnB1c2gocSl9KSk7Zi5zZXQuY2FsbCh0aGlzLGcpO2lmKGspZm9yKHZhciBsPTA7bDxrLmxlbmd0aDtsKyspe3ZhciBtPWtbbF07MT09PW0uX19DRV9zdGF0ZSYmYS5kaXNjb25uZWN0ZWRDYWxsYmFjayhtKX10aGlzLm93bmVyRG9jdW1lbnQuX19DRV9yZWdpc3RyeT90ZihhLHRoaXMpOm9mKGEsdGhpcyk7cmV0dXJuIGd9fSl9ZnVuY3Rpb24gYyhlLGYpe2UuaW5zZXJ0QWRqYWNlbnRFbGVtZW50PWZ1bmN0aW9uKGcsaCl7dmFyIGs9VChoKTtnPWYuY2FsbCh0aGlzLGcsaCk7ayYmc2YoYSxoKTtUKGcpJiZxZihhLGgpO3JldHVybiBnfX1cbmZ1bmN0aW9uIGQoZSxmKXtmdW5jdGlvbiBnKGgsayl7Zm9yKHZhciBsPVtdO2ghPT1rO2g9aC5uZXh0U2libGluZylsLnB1c2goaCk7Zm9yKGs9MDtrPGwubGVuZ3RoO2srKyl0ZihhLGxba10pfWUuaW5zZXJ0QWRqYWNlbnRIVE1MPWZ1bmN0aW9uKGgsayl7aD1oLnRvTG93ZXJDYXNlKCk7aWYoXCJiZWZvcmViZWdpblwiPT09aCl7dmFyIGw9dGhpcy5wcmV2aW91c1NpYmxpbmc7Zi5jYWxsKHRoaXMsaCxrKTtnKGx8fHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkLHRoaXMpfWVsc2UgaWYoXCJhZnRlcmJlZ2luXCI9PT1oKWw9dGhpcy5maXJzdENoaWxkLGYuY2FsbCh0aGlzLGgsayksZyh0aGlzLmZpcnN0Q2hpbGQsbCk7ZWxzZSBpZihcImJlZm9yZWVuZFwiPT09aClsPXRoaXMubGFzdENoaWxkLGYuY2FsbCh0aGlzLGgsayksZyhsfHx0aGlzLmZpcnN0Q2hpbGQsbnVsbCk7ZWxzZSBpZihcImFmdGVyZW5kXCI9PT1oKWw9dGhpcy5uZXh0U2libGluZyxmLmNhbGwodGhpcyxoLGspLGcodGhpcy5uZXh0U2libGluZyxcbmwpO2Vsc2UgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVGhlIHZhbHVlIHByb3ZpZGVkIChcIitTdHJpbmcoaCkrXCIpIGlzIG5vdCBvbmUgb2YgJ2JlZm9yZWJlZ2luJywgJ2FmdGVyYmVnaW4nLCAnYmVmb3JlZW5kJywgb3IgJ2FmdGVyZW5kJy5cIik7fX1KZSYmKEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdz1mdW5jdGlvbihlKXtlPUplLmNhbGwodGhpcyxlKTtpZihhLlImJiFlLl9fQ0VfcGF0Y2hlZCl7ZS5fX0NFX3BhdGNoZWQ9ITA7Zm9yKHZhciBmPTA7ZjxhLlgubGVuZ3RoO2YrKylhLlhbZl0oZSl9cmV0dXJuIHRoaXMuX19DRV9zaGFkb3dSb290PWV9KTtLZSYmS2UuZ2V0P2IoRWxlbWVudC5wcm90b3R5cGUsS2UpOiRlJiYkZS5nZXQ/YihIVE1MRWxlbWVudC5wcm90b3R5cGUsJGUpOm5mKGEsZnVuY3Rpb24oZSl7YihlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRGUuY2FsbCh0aGlzLCEwKS5pbm5lckhUTUx9LHNldDpmdW5jdGlvbihmKXt2YXIgZz1cblwidGVtcGxhdGVcIj09PXRoaXMubG9jYWxOYW1lLGg9Zz90aGlzLmNvbnRlbnQ6dGhpcyxrPXhlLmNhbGwoZG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkksdGhpcy5sb2NhbE5hbWUpO2ZvcihrLmlubmVySFRNTD1mOzA8aC5jaGlsZE5vZGVzLmxlbmd0aDspR2UuY2FsbChoLGguY2hpbGROb2Rlc1swXSk7Zm9yKGY9Zz9rLmNvbnRlbnQ6azswPGYuY2hpbGROb2Rlcy5sZW5ndGg7KUVlLmNhbGwoaCxmLmNoaWxkTm9kZXNbMF0pfX0pfSk7RWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKGUsZil7aWYoMSE9PXRoaXMuX19DRV9zdGF0ZSlyZXR1cm4gTWUuY2FsbCh0aGlzLGUsZik7dmFyIGc9TGUuY2FsbCh0aGlzLGUpO01lLmNhbGwodGhpcyxlLGYpO2Y9TGUuY2FsbCh0aGlzLGUpO2EuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHRoaXMsZSxnLGYsbnVsbCl9O0VsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKGUsZixnKXtpZigxIT09dGhpcy5fX0NFX3N0YXRlKXJldHVybiBQZS5jYWxsKHRoaXMsXG5lLGYsZyk7dmFyIGg9T2UuY2FsbCh0aGlzLGUsZik7UGUuY2FsbCh0aGlzLGUsZixnKTtnPU9lLmNhbGwodGhpcyxlLGYpO2EuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHRoaXMsZixoLGcsZSl9O0VsZW1lbnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbihlKXtpZigxIT09dGhpcy5fX0NFX3N0YXRlKXJldHVybiBOZS5jYWxsKHRoaXMsZSk7dmFyIGY9TGUuY2FsbCh0aGlzLGUpO05lLmNhbGwodGhpcyxlKTtudWxsIT09ZiYmYS5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodGhpcyxlLGYsbnVsbCxudWxsKX07RWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlTlM9ZnVuY3Rpb24oZSxmKXtpZigxIT09dGhpcy5fX0NFX3N0YXRlKXJldHVybiBRZS5jYWxsKHRoaXMsZSxmKTt2YXIgZz1PZS5jYWxsKHRoaXMsZSxmKTtRZS5jYWxsKHRoaXMsZSxmKTt2YXIgaD1PZS5jYWxsKHRoaXMsZSxmKTtnIT09aCYmYS5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodGhpcyxcbmYsZyxoLGUpfTthZj9jKEhUTUxFbGVtZW50LnByb3RvdHlwZSxhZik6UmUmJmMoRWxlbWVudC5wcm90b3R5cGUsUmUpO2JmP2QoSFRNTEVsZW1lbnQucHJvdG90eXBlLGJmKTpTZSYmZChFbGVtZW50LnByb3RvdHlwZSxTZSk7RGYoYSxFbGVtZW50LnByb3RvdHlwZSx7cHJlcGVuZDpUZSxhcHBlbmQ6VWV9KTtGZihhKX07dmFyIEhmPXt9O2Z1bmN0aW9uIElmKGEpe2Z1bmN0aW9uIGIoKXt2YXIgYz10aGlzLmNvbnN0cnVjdG9yO3ZhciBkPWRvY3VtZW50Ll9fQ0VfcmVnaXN0cnkueGEuZ2V0KGMpO2lmKCFkKXRocm93IEVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCBhIGN1c3RvbSBlbGVtZW50OiBUaGUgY29uc3RydWN0b3Igd2FzIG5vdCByZWdpc3RlcmVkIHdpdGggYGN1c3RvbUVsZW1lbnRzYC5cIik7dmFyIGU9ZC5jb25zdHJ1Y3Rpb25TdGFjaztpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGU9d2UuY2FsbChkb2N1bWVudCxkLmxvY2FsTmFtZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGUsYy5wcm90b3R5cGUpLGUuX19DRV9zdGF0ZT0xLGUuX19DRV9kZWZpbml0aW9uPWQscGYoYSxlKSxlO3ZhciBmPWUubGVuZ3RoLTEsZz1lW2ZdO2lmKGc9PT1IZil0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1wiK2QubG9jYWxOYW1lK1wiJzogVGhpcyBlbGVtZW50IHdhcyBhbHJlYWR5IGNvbnN0cnVjdGVkLlwiKTtlW2ZdPVxuSGY7T2JqZWN0LnNldFByb3RvdHlwZU9mKGcsYy5wcm90b3R5cGUpO3BmKGEsZyk7cmV0dXJuIGd9Yi5wcm90b3R5cGU9WmUucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRWxlbWVudC5wcm90b3R5cGUsXCJjb25zdHJ1Y3RvclwiLHt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpifSk7d2luZG93LkhUTUxFbGVtZW50PWJ9O2Z1bmN0aW9uIEpmKGEpe2Z1bmN0aW9uIGIoYyxkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxcInRleHRDb250ZW50XCIse2VudW1lcmFibGU6ZC5lbnVtZXJhYmxlLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZC5nZXQsc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSlkLnNldC5jYWxsKHRoaXMsZSk7ZWxzZXt2YXIgZj12b2lkIDA7aWYodGhpcy5maXJzdENoaWxkKXt2YXIgZz10aGlzLmNoaWxkTm9kZXMsaD1nLmxlbmd0aDtpZigwPGgmJlQodGhpcykpe2Y9QXJyYXkoaCk7Zm9yKHZhciBrPTA7azxoO2srKylmW2tdPWdba119fWQuc2V0LmNhbGwodGhpcyxlKTtpZihmKWZvcihlPTA7ZTxmLmxlbmd0aDtlKyspc2YoYSxmW2VdKX19fSl9Tm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKGMsZCl7aWYoYyBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpe3ZhciBlPWZmKGMpO2M9RmUuY2FsbCh0aGlzLGMsZCk7aWYoVCh0aGlzKSlmb3IoZD1cbjA7ZDxlLmxlbmd0aDtkKyspcWYoYSxlW2RdKTtyZXR1cm4gY31lPWMgaW5zdGFuY2VvZiBFbGVtZW50JiZUKGMpO2Q9RmUuY2FsbCh0aGlzLGMsZCk7ZSYmc2YoYSxjKTtUKHRoaXMpJiZxZihhLGMpO3JldHVybiBkfTtOb2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbihjKXtpZihjIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCl7dmFyIGQ9ZmYoYyk7Yz1FZS5jYWxsKHRoaXMsYyk7aWYoVCh0aGlzKSlmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKylxZihhLGRbZV0pO3JldHVybiBjfWQ9YyBpbnN0YW5jZW9mIEVsZW1lbnQmJlQoYyk7ZT1FZS5jYWxsKHRoaXMsYyk7ZCYmc2YoYSxjKTtUKHRoaXMpJiZxZihhLGMpO3JldHVybiBlfTtOb2RlLnByb3RvdHlwZS5jbG9uZU5vZGU9ZnVuY3Rpb24oYyl7Yz1EZS5jYWxsKHRoaXMsISFjKTt0aGlzLm93bmVyRG9jdW1lbnQuX19DRV9yZWdpc3RyeT90ZihhLGMpOm9mKGEsYyk7cmV0dXJuIGN9O05vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPVxuZnVuY3Rpb24oYyl7dmFyIGQ9YyBpbnN0YW5jZW9mIEVsZW1lbnQmJlQoYyksZT1HZS5jYWxsKHRoaXMsYyk7ZCYmc2YoYSxjKTtyZXR1cm4gZX07Tm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkPWZ1bmN0aW9uKGMsZCl7aWYoYyBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpe3ZhciBlPWZmKGMpO2M9SGUuY2FsbCh0aGlzLGMsZCk7aWYoVCh0aGlzKSlmb3Ioc2YoYSxkKSxkPTA7ZDxlLmxlbmd0aDtkKyspcWYoYSxlW2RdKTtyZXR1cm4gY31lPWMgaW5zdGFuY2VvZiBFbGVtZW50JiZUKGMpO3ZhciBmPUhlLmNhbGwodGhpcyxjLGQpLGc9VCh0aGlzKTtnJiZzZihhLGQpO2UmJnNmKGEsYyk7ZyYmcWYoYSxjKTtyZXR1cm4gZn07SWUmJkllLmdldD9iKE5vZGUucHJvdG90eXBlLEllKTptZihhLGZ1bmN0aW9uKGMpe2IoYyx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBkPVtdLGU9dGhpcy5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKWUubm9kZVR5cGUhPT1cbk5vZGUuQ09NTUVOVF9OT0RFJiZkLnB1c2goZS50ZXh0Q29udGVudCk7cmV0dXJuIGQuam9pbihcIlwiKX0sc2V0OmZ1bmN0aW9uKGQpe2Zvcig7dGhpcy5maXJzdENoaWxkOylHZS5jYWxsKHRoaXMsdGhpcy5maXJzdENoaWxkKTtudWxsIT1kJiZcIlwiIT09ZCYmRWUuY2FsbCh0aGlzLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGQpKX19KX0pfTt2YXIga2Y9d2luZG93LmN1c3RvbUVsZW1lbnRzO2Z1bmN0aW9uIEtmKCl7dmFyIGE9bmV3IGpmO0lmKGEpO0VmKGEpO0RmKGEsRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUse3ByZXBlbmQ6QmUsYXBwZW5kOkNlfSk7SmYoYSk7R2YoYSk7YT1uZXcgVShhKTtkb2N1bWVudC5fX0NFX3JlZ2lzdHJ5PWE7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdyxcImN1c3RvbUVsZW1lbnRzXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmF9KX1rZiYmIWtmLmZvcmNlUG9seWZpbGwmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGtmLmRlZmluZSYmXCJmdW5jdGlvblwiPT10eXBlb2Yga2YuZ2V0fHxLZigpO3dpbmRvdy5fX0NFX2luc3RhbGxQb2x5ZmlsbD1LZjtmdW5jdGlvbiBMZigpe3RoaXMuZW5kPXRoaXMuc3RhcnQ9MDt0aGlzLnJ1bGVzPXRoaXMucGFyZW50PXRoaXMucHJldmlvdXM9bnVsbDt0aGlzLmNzc1RleHQ9dGhpcy5wYXJzZWRDc3NUZXh0PVwiXCI7dGhpcy5hdFJ1bGU9ITE7dGhpcy50eXBlPTA7dGhpcy5wYXJzZWRTZWxlY3Rvcj10aGlzLnNlbGVjdG9yPXRoaXMua2V5ZnJhbWVzTmFtZT1cIlwifVxuZnVuY3Rpb24gTWYoYSl7dmFyIGI9YT1hLnJlcGxhY2UoTmYsXCJcIikucmVwbGFjZShPZixcIlwiKSxjPW5ldyBMZjtjLnN0YXJ0PTA7Yy5lbmQ9Yi5sZW5ndGg7Zm9yKHZhciBkPWMsZT0wLGY9Yi5sZW5ndGg7ZTxmO2UrKylpZihcIntcIj09PWJbZV0pe2QucnVsZXN8fChkLnJ1bGVzPVtdKTt2YXIgZz1kLGg9Zy5ydWxlc1tnLnJ1bGVzLmxlbmd0aC0xXXx8bnVsbDtkPW5ldyBMZjtkLnN0YXJ0PWUrMTtkLnBhcmVudD1nO2QucHJldmlvdXM9aDtnLnJ1bGVzLnB1c2goZCl9ZWxzZVwifVwiPT09YltlXSYmKGQuZW5kPWUrMSxkPWQucGFyZW50fHxjKTtyZXR1cm4gUGYoYyxhKX1cbmZ1bmN0aW9uIFBmKGEsYil7dmFyIGM9Yi5zdWJzdHJpbmcoYS5zdGFydCxhLmVuZC0xKTthLnBhcnNlZENzc1RleHQ9YS5jc3NUZXh0PWMudHJpbSgpO2EucGFyZW50JiYoYz1iLnN1YnN0cmluZyhhLnByZXZpb3VzP2EucHJldmlvdXMuZW5kOmEucGFyZW50LnN0YXJ0LGEuc3RhcnQtMSksYz1RZihjKSxjPWMucmVwbGFjZShSZixcIiBcIiksYz1jLnN1YnN0cmluZyhjLmxhc3RJbmRleE9mKFwiO1wiKSsxKSxjPWEucGFyc2VkU2VsZWN0b3I9YS5zZWxlY3Rvcj1jLnRyaW0oKSxhLmF0UnVsZT0wPT09Yy5pbmRleE9mKFwiQFwiKSxhLmF0UnVsZT8wPT09Yy5pbmRleE9mKFwiQG1lZGlhXCIpP2EudHlwZT1TZjpjLm1hdGNoKFRmKSYmKGEudHlwZT1VZixhLmtleWZyYW1lc05hbWU9YS5zZWxlY3Rvci5zcGxpdChSZikucG9wKCkpOmEudHlwZT0wPT09Yy5pbmRleE9mKFwiLS1cIik/VmY6V2YpO2lmKGM9YS5ydWxlcylmb3IodmFyIGQ9MCxlPWMubGVuZ3RoLGY9dm9pZCAwO2Q8ZSYmKGY9Y1tkXSk7ZCsrKVBmKGYsXG5iKTtyZXR1cm4gYX1mdW5jdGlvbiBRZihhKXtyZXR1cm4gYS5yZXBsYWNlKC9cXFxcKFswLTlhLWZdezEsNn0pXFxzL2dpLGZ1bmN0aW9uKGIsYyl7Yj1jO2ZvcihjPTYtYi5sZW5ndGg7Yy0tOyliPVwiMFwiK2I7cmV0dXJuXCJcXFxcXCIrYn0pfVxuZnVuY3Rpb24gWGYoYSxiLGMpe2M9dm9pZCAwPT09Yz9cIlwiOmM7dmFyIGQ9XCJcIjtpZihhLmNzc1RleHR8fGEucnVsZXMpe3ZhciBlPWEucnVsZXMsZjtpZihmPWUpZj1lWzBdLGY9IShmJiZmLnNlbGVjdG9yJiYwPT09Zi5zZWxlY3Rvci5pbmRleE9mKFwiLS1cIikpO2lmKGYpe2Y9MDtmb3IodmFyIGc9ZS5sZW5ndGgsaD12b2lkIDA7ZjxnJiYoaD1lW2ZdKTtmKyspZD1YZihoLGIsZCl9ZWxzZSBiP2I9YS5jc3NUZXh0OihiPWEuY3NzVGV4dCxiPWIucmVwbGFjZShZZixcIlwiKS5yZXBsYWNlKFpmLFwiXCIpLGI9Yi5yZXBsYWNlKCRmLFwiXCIpLnJlcGxhY2UoYWcsXCJcIikpLChkPWIudHJpbSgpKSYmKGQ9XCIgIFwiK2QrXCJcXG5cIil9ZCYmKGEuc2VsZWN0b3ImJihjKz1hLnNlbGVjdG9yK1wiIHtcXG5cIiksYys9ZCxhLnNlbGVjdG9yJiYoYys9XCJ9XFxuXFxuXCIpKTtyZXR1cm4gY31cbnZhciBXZj0xLFVmPTcsU2Y9NCxWZj0xRTMsTmY9L1xcL1xcKlteKl0qXFwqKyhbXi8qXVteKl0qXFwqKykqXFwvL2dpbSxPZj0vQGltcG9ydFteO10qOy9naW0sWWY9Lyg/Ol5bXjtcXC1cXHN9XSspPy0tW147e31dKj86W157fTtdKj8oPzpbO1xcbl18JCkvZ2ltLFpmPS8oPzpeW147XFwtXFxzfV0rKT8tLVteO3t9XSo/Oltee307XSo/e1tefV0qP30oPzpbO1xcbl18JCk/L2dpbSwkZj0vQGFwcGx5XFxzKlxcKD9bXik7XSpcXCk/XFxzKig/Ols7XFxuXXwkKT8vZ2ltLGFnPS9bXjs6XSo/OlteO10qP3ZhclxcKFteO10qXFwpKD86WztcXG5dfCQpPy9naW0sVGY9L15AW15cXHNdKmtleWZyYW1lcy8sUmY9L1xccysvZzt2YXIgVj0hKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKSxiZztmdW5jdGlvbiBjZyhhKXtiZz1hJiZhLnNoaW1jc3Nwcm9wZXJ0aWVzPyExOlZ8fCEobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcXC82MDF8RWRnZVxcLzE1Lyl8fCF3aW5kb3cuQ1NTfHwhQ1NTLnN1cHBvcnRzfHwhQ1NTLnN1cHBvcnRzKFwiYm94LXNoYWRvd1wiLFwiMCAwIDAgdmFyKC0tZm9vKVwiKSl9dmFyIGRnO3dpbmRvdy5TaGFkeUNTUyYmdm9pZCAwIT09d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkJiYoZGc9d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTt2YXIgZWc9ISghd2luZG93LlNoYWR5Q1NTfHwhd2luZG93LlNoYWR5Q1NTLmRpc2FibGVSdW50aW1lKTtcbndpbmRvdy5TaGFkeUNTUyYmdm9pZCAwIT09d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzcz9iZz13aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzOndpbmRvdy5TaGFkeUNTUz8oY2cod2luZG93LlNoYWR5Q1NTKSx3aW5kb3cuU2hhZHlDU1M9dm9pZCAwKTpjZyh3aW5kb3cuV2ViQ29tcG9uZW50cyYmd2luZG93LldlYkNvbXBvbmVudHMuZmxhZ3MpO3ZhciBYPWJnO3ZhciBmZz0vKD86XnxbO1xcc3tdXFxzKikoLS1bXFx3LV0qPylcXHMqOlxccyooPzooKD86Jyg/OlxcXFwnfC4pKj8nfFwiKD86XFxcXFwifC4pKj9cInxcXChbXildKj9cXCl8W159O3tdKSspfFxceyhbXn1dKilcXH0oPzooPz1bO1xcc31dKXwkKSkvZ2ksaGc9Lyg/Ol58XFxXKylAYXBwbHlcXHMqXFwoPyhbXik7XFxuXSopXFwpPy9naSxpZz0vKC0tW1xcdy1dKylcXHMqKFs6LDspXXwkKS9naSxqZz0vKGFuaW1hdGlvblxccyo6KXwoYW5pbWF0aW9uLW5hbWVcXHMqOikvLGtnPS9AbWVkaWFcXHMoLiopLyxsZz0vXFx7W159XSpcXH0vZzt2YXIgbWc9bmV3IFNldDtmdW5jdGlvbiBuZyhhLGIpe2lmKCFhKXJldHVyblwiXCI7XCJzdHJpbmdcIj09PXR5cGVvZiBhJiYoYT1NZihhKSk7YiYmb2coYSxiKTtyZXR1cm4gWGYoYSxYKX1mdW5jdGlvbiBwZyhhKXshYS5fX2Nzc1J1bGVzJiZhLnRleHRDb250ZW50JiYoYS5fX2Nzc1J1bGVzPU1mKGEudGV4dENvbnRlbnQpKTtyZXR1cm4gYS5fX2Nzc1J1bGVzfHxudWxsfWZ1bmN0aW9uIHFnKGEpe3JldHVybiEhYS5wYXJlbnQmJmEucGFyZW50LnR5cGU9PT1VZn1mdW5jdGlvbiBvZyhhLGIsYyxkKXtpZihhKXt2YXIgZT0hMSxmPWEudHlwZTtpZihkJiZmPT09U2Ype3ZhciBnPWEuc2VsZWN0b3IubWF0Y2goa2cpO2cmJih3aW5kb3cubWF0Y2hNZWRpYShnWzFdKS5tYXRjaGVzfHwoZT0hMCkpfWY9PT1XZj9iKGEpOmMmJmY9PT1VZj9jKGEpOmY9PT1WZiYmKGU9ITApO2lmKChhPWEucnVsZXMpJiYhZSlmb3IoZT0wLGY9YS5sZW5ndGgsZz12b2lkIDA7ZTxmJiYoZz1hW2VdKTtlKyspb2coZyxiLGMsZCl9fVxuZnVuY3Rpb24gcmcoYSxiLGMsZCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO2ImJmUuc2V0QXR0cmlidXRlKFwic2NvcGVcIixiKTtlLnRleHRDb250ZW50PWE7c2coZSxjLGQpO3JldHVybiBlfXZhciB0Zz1udWxsO2Z1bmN0aW9uIHVnKGEpe2E9ZG9jdW1lbnQuY3JlYXRlQ29tbWVudChcIiBTaGFkeSBET00gc3R5bGVzIGZvciBcIithK1wiIFwiKTt2YXIgYj1kb2N1bWVudC5oZWFkO2IuaW5zZXJ0QmVmb3JlKGEsKHRnP3RnLm5leHRTaWJsaW5nOm51bGwpfHxiLmZpcnN0Q2hpbGQpO3JldHVybiB0Zz1hfWZ1bmN0aW9uIHNnKGEsYixjKXtiPWJ8fGRvY3VtZW50LmhlYWQ7Yi5pbnNlcnRCZWZvcmUoYSxjJiZjLm5leHRTaWJsaW5nfHxiLmZpcnN0Q2hpbGQpO3RnP2EuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGcpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkcmJih0Zz1hKTp0Zz1hfVxuZnVuY3Rpb24gdmcoYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoO2I8ZDtiKyspaWYoXCIoXCI9PT1hW2JdKWMrKztlbHNlIGlmKFwiKVwiPT09YVtiXSYmMD09PS0tYylyZXR1cm4gYjtyZXR1cm4tMX1mdW5jdGlvbiB3ZyhhLGIpe3ZhciBjPWEuaW5kZXhPZihcInZhcihcIik7aWYoLTE9PT1jKXJldHVybiBiKGEsXCJcIixcIlwiLFwiXCIpO3ZhciBkPXZnKGEsYyszKSxlPWEuc3Vic3RyaW5nKGMrNCxkKTtjPWEuc3Vic3RyaW5nKDAsYyk7YT13ZyhhLnN1YnN0cmluZyhkKzEpLGIpO2Q9ZS5pbmRleE9mKFwiLFwiKTtyZXR1cm4tMT09PWQ/YihjLGUudHJpbSgpLFwiXCIsYSk6YihjLGUuc3Vic3RyaW5nKDAsZCkudHJpbSgpLGUuc3Vic3RyaW5nKGQrMSkudHJpbSgpLGEpfWZ1bmN0aW9uIHhnKGEsYil7Vj9hLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsYik6d2luZG93LlNoYWR5RE9NLm5hdGl2ZU1ldGhvZHMuc2V0QXR0cmlidXRlLmNhbGwoYSxcImNsYXNzXCIsYil9XG52YXIgeWc9d2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00ud3JhcHx8ZnVuY3Rpb24oYSl7cmV0dXJuIGF9O2Z1bmN0aW9uIHpnKGEpe3ZhciBiPWEubG9jYWxOYW1lLGM9XCJcIjtiPy0xPGIuaW5kZXhPZihcIi1cIil8fChjPWIsYj1hLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1dGUoXCJpc1wiKXx8XCJcIik6KGI9YS5pcyxjPWEuZXh0ZW5kcyk7cmV0dXJue2lzOmIsYmE6Y319ZnVuY3Rpb24gQWcoYSl7Zm9yKHZhciBiPVtdLGM9XCJcIixkPTA7MDw9ZCYmZDxhLmxlbmd0aDtkKyspaWYoXCIoXCI9PT1hW2RdKXt2YXIgZT12ZyhhLGQpO2MrPWEuc2xpY2UoZCxlKzEpO2Q9ZX1lbHNlXCIsXCI9PT1hW2RdPyhiLnB1c2goYyksYz1cIlwiKTpjKz1hW2RdO2MmJmIucHVzaChjKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIEJnKGEpe2lmKHZvaWQgMCE9PWRnKXJldHVybiBkZztpZih2b2lkIDA9PT1hLl9fY3NzQnVpbGQpe3ZhciBiPWEuZ2V0QXR0cmlidXRlKFwiY3NzLWJ1aWxkXCIpO2lmKGIpYS5fX2Nzc0J1aWxkPWI7ZWxzZXthOntiPVwidGVtcGxhdGVcIj09PWEubG9jYWxOYW1lP2EuY29udGVudC5maXJzdENoaWxkOmEuZmlyc3RDaGlsZDtpZihiIGluc3RhbmNlb2YgQ29tbWVudCYmKGI9Yi50ZXh0Q29udGVudC50cmltKCkuc3BsaXQoXCI6XCIpLFwiY3NzLWJ1aWxkXCI9PT1iWzBdKSl7Yj1iWzFdO2JyZWFrIGF9Yj1cIlwifWlmKFwiXCIhPT1iKXt2YXIgYz1cInRlbXBsYXRlXCI9PT1hLmxvY2FsTmFtZT9hLmNvbnRlbnQuZmlyc3RDaGlsZDphLmZpcnN0Q2hpbGQ7Yy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpfWEuX19jc3NCdWlsZD1ifX1yZXR1cm4gYS5fX2Nzc0J1aWxkfHxcIlwifVxuZnVuY3Rpb24gQ2coYSl7YT12b2lkIDA9PT1hP1wiXCI6YTtyZXR1cm5cIlwiIT09YSYmWD9WP1wic2hhZG93XCI9PT1hOlwic2hhZHlcIj09PWE6ITF9O2Z1bmN0aW9uIERnKCl7fWZ1bmN0aW9uIEVnKGEsYil7RmcoR2csYSxmdW5jdGlvbihjKXtIZyhjLGJ8fFwiXCIpfSl9ZnVuY3Rpb24gRmcoYSxiLGMpe2Iubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmYyhiKTt2YXIgZDtcInRlbXBsYXRlXCI9PT1iLmxvY2FsTmFtZT9kPShiLmNvbnRlbnR8fGIuX2NvbnRlbnR8fGIpLmNoaWxkTm9kZXM6ZD1iLmNoaWxkcmVufHxiLmNoaWxkTm9kZXM7aWYoZClmb3IoYj0wO2I8ZC5sZW5ndGg7YisrKUZnKGEsZFtiXSxjKX1cbmZ1bmN0aW9uIEhnKGEsYixjKXtpZihiKWlmKGEuY2xhc3NMaXN0KWM/KGEuY2xhc3NMaXN0LnJlbW92ZShcInN0eWxlLXNjb3BlXCIpLGEuY2xhc3NMaXN0LnJlbW92ZShiKSk6KGEuY2xhc3NMaXN0LmFkZChcInN0eWxlLXNjb3BlXCIpLGEuY2xhc3NMaXN0LmFkZChiKSk7ZWxzZSBpZihhLmdldEF0dHJpYnV0ZSl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKTtjP2QmJihiPWQucmVwbGFjZShcInN0eWxlLXNjb3BlXCIsXCJcIikucmVwbGFjZShiLFwiXCIpLHhnKGEsYikpOnhnKGEsKGQ/ZCtcIiBcIjpcIlwiKStcInN0eWxlLXNjb3BlIFwiK2IpfX1mdW5jdGlvbiBJZyhhLGIsYyl7RmcoR2csYSxmdW5jdGlvbihkKXtIZyhkLGIsITApO0hnKGQsYyl9KX1mdW5jdGlvbiBKZyhhLGIpe0ZnKEdnLGEsZnVuY3Rpb24oYyl7SGcoYyxifHxcIlwiLCEwKX0pfVxuZnVuY3Rpb24gS2coYSxiLGMsZCxlKXt2YXIgZj1HZztlPXZvaWQgMD09PWU/XCJcIjplO1wiXCI9PT1lJiYoVnx8XCJzaGFkeVwiPT09KHZvaWQgMD09PWQ/XCJcIjpkKT9lPW5nKGIsYyk6KGE9emcoYSksZT1MZyhmLGIsYS5pcyxhLmJhLGMpK1wiXFxuXFxuXCIpKTtyZXR1cm4gZS50cmltKCl9ZnVuY3Rpb24gTGcoYSxiLGMsZCxlKXt2YXIgZj1NZyhjLGQpO2M9Yz9cIi5cIitjOlwiXCI7cmV0dXJuIG5nKGIsZnVuY3Rpb24oZyl7Zy5jfHwoZy5zZWxlY3Rvcj1nLnc9TmcoYSxnLGEuYixjLGYpLGcuYz0hMCk7ZSYmZShnLGMsZil9KX1mdW5jdGlvbiBNZyhhLGIpe3JldHVybiBiP1wiW2lzPVwiK2ErXCJdXCI6YX1cbmZ1bmN0aW9uIE5nKGEsYixjLGQsZSl7dmFyIGY9QWcoYi5zZWxlY3Rvcik7aWYoIXFnKGIpKXtiPTA7Zm9yKHZhciBnPWYubGVuZ3RoLGg9dm9pZCAwO2I8ZyYmKGg9ZltiXSk7YisrKWZbYl09Yy5jYWxsKGEsaCxkLGUpfXJldHVybiBmLmZpbHRlcihmdW5jdGlvbihrKXtyZXR1cm4hIWt9KS5qb2luKFwiLFwiKX1mdW5jdGlvbiBPZyhhKXtyZXR1cm4gYS5yZXBsYWNlKFBnLGZ1bmN0aW9uKGIsYyxkKXstMTxkLmluZGV4T2YoXCIrXCIpP2Q9ZC5yZXBsYWNlKC9cXCsvZyxcIl9fX1wiKTotMTxkLmluZGV4T2YoXCJfX19cIikmJihkPWQucmVwbGFjZSgvX19fL2csXCIrXCIpKTtyZXR1cm5cIjpcIitjK1wiKFwiK2QrXCIpXCJ9KX1cbmZ1bmN0aW9uIFFnKGEpe2Zvcih2YXIgYj1bXSxjO2M9YS5tYXRjaChSZyk7KXt2YXIgZD1jLmluZGV4LGU9dmcoYSxkKTtpZigtMT09PWUpdGhyb3cgRXJyb3IoYy5pbnB1dCtcIiBzZWxlY3RvciBtaXNzaW5nICcpJ1wiKTtjPWEuc2xpY2UoZCxlKzEpO2E9YS5yZXBsYWNlKGMsXCJcXHVlMDAwXCIpO2IucHVzaChjKX1yZXR1cm57d2E6YSxtYXRjaGVzOmJ9fWZ1bmN0aW9uIFNnKGEsYil7dmFyIGM9YS5zcGxpdChcIlxcdWUwMDBcIik7cmV0dXJuIGIucmVkdWNlKGZ1bmN0aW9uKGQsZSxmKXtyZXR1cm4gZCtlK2NbZisxXX0sY1swXSl9XG5EZy5wcm90b3R5cGUuYj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9ITE7YT1hLnRyaW0oKTt2YXIgZT1QZy50ZXN0KGEpO2UmJihhPWEucmVwbGFjZShQZyxmdW5jdGlvbihoLGssbCl7cmV0dXJuXCI6XCIraytcIihcIitsLnJlcGxhY2UoL1xccy9nLFwiXCIpK1wiKVwifSksYT1PZyhhKSk7dmFyIGY9UmcudGVzdChhKTtpZihmKXt2YXIgZz1RZyhhKTthPWcud2E7Zz1nLm1hdGNoZXN9YT1hLnJlcGxhY2UoVGcsXCI6aG9zdCAkMVwiKTthPWEucmVwbGFjZShVZyxmdW5jdGlvbihoLGssbCl7ZHx8KGg9VmcobCxrLGIsYyksZD1kfHxoLnN0b3Asaz1oLlFhLGw9aC52YWx1ZSk7cmV0dXJuIGsrbH0pO2YmJihhPVNnKGEsZykpO2UmJihhPU9nKGEpKTtyZXR1cm4gYT1hLnJlcGxhY2UoV2csZnVuY3Rpb24oaCxrLGwsbSl7cmV0dXJuJ1tkaXI9XCInK2wrJ1wiXSAnK2srbStcIiwgXCIraysnW2Rpcj1cIicrbCsnXCJdJyttfSl9O1xuZnVuY3Rpb24gVmcoYSxiLGMsZCl7dmFyIGU9YS5pbmRleE9mKFwiOjpzbG90dGVkXCIpOzA8PWEuaW5kZXhPZihcIjpob3N0XCIpP2E9WGcoYSxkKTowIT09ZSYmKGE9Yz9ZZyhhLGMpOmEpO2M9ITE7MDw9ZSYmKGI9XCJcIixjPSEwKTtpZihjKXt2YXIgZj0hMDtjJiYoYT1hLnJlcGxhY2UoWmcsZnVuY3Rpb24oZyxoKXtyZXR1cm5cIiA+IFwiK2h9KSl9cmV0dXJue3ZhbHVlOmEsUWE6YixzdG9wOmZ9fWZ1bmN0aW9uIFlnKGEsYil7YT1hLnNwbGl0KC8oXFxbLis/XFxdKS8pO2Zvcih2YXIgYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKyspaWYoMT09PWQlMiljLnB1c2goYVtkXSk7ZWxzZXt2YXIgZT1hW2RdO2lmKFwiXCIhPT1lfHxkIT09YS5sZW5ndGgtMSllPWUuc3BsaXQoXCI6XCIpLGVbMF0rPWIsYy5wdXNoKGUuam9pbihcIjpcIikpfXJldHVybiBjLmpvaW4oXCJcIil9XG5mdW5jdGlvbiBYZyhhLGIpe3ZhciBjPWEubWF0Y2goJGcpO3JldHVybihjPWMmJmNbMl0udHJpbSgpfHxcIlwiKT9jWzBdLm1hdGNoKGFoKT9hLnJlcGxhY2UoJGcsZnVuY3Rpb24oZCxlLGYpe3JldHVybiBiK2Z9KTpjLnNwbGl0KGFoKVswXT09PWI/YzpcInNob3VsZF9ub3RfbWF0Y2hcIjphLnJlcGxhY2UoXCI6aG9zdFwiLGIpfWZ1bmN0aW9uIGJoKGEpe1wiOnJvb3RcIj09PWEuc2VsZWN0b3ImJihhLnNlbGVjdG9yPVwiaHRtbFwiKX1EZy5wcm90b3R5cGUuYz1mdW5jdGlvbihhKXtyZXR1cm4gYS5tYXRjaChcIjpob3N0XCIpP1wiXCI6YS5tYXRjaChcIjo6c2xvdHRlZFwiKT90aGlzLmIoYSxcIjpub3QoLnN0eWxlLXNjb3BlKVwiKTpZZyhhLnRyaW0oKSxcIjpub3QoLnN0eWxlLXNjb3BlKVwiKX07ZmEuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRGcucHJvdG90eXBlLHthOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5cInN0eWxlLXNjb3BlXCJ9fX0pO1xudmFyIFBnPS86KG50aFstXFx3XSspXFwoKFteKV0rKVxcKS8sVWc9LyhefFtcXHM+K35dKykoKD86XFxbLis/XFxdfFteXFxzPit+PVtdKSspL2csYWg9L1tbLjojKl0vLFRnPS9eKDo6c2xvdHRlZCkvLCRnPS8oOmhvc3QpKD86XFwoKCg/OlxcKFteKShdKlxcKXxbXikoXSopKz8pXFwpKS8sWmc9Lyg/Ojo6c2xvdHRlZCkoPzpcXCgoKD86XFwoW14pKF0qXFwpfFteKShdKikrPylcXCkpLyxXZz0vKC4qKTpkaXJcXCgoPzoobHRyfHJ0bCkpXFwpKC4qKS8sUmc9LzooPzptYXRjaGVzfGFueXwtKD86d2Via2l0fG1veiktYW55KS8sR2c9bmV3IERnO2Z1bmN0aW9uIGNoKGEsYixjLGQsZSl7dGhpcy5IPWF8fG51bGw7dGhpcy5iPWJ8fG51bGw7dGhpcy50YT1jfHxbXTt0aGlzLkY9bnVsbDt0aGlzLmNzc0J1aWxkPWV8fFwiXCI7dGhpcy5iYT1kfHxcIlwiO3RoaXMuYT10aGlzLkc9dGhpcy5MPW51bGx9ZnVuY3Rpb24gZGgoYSl7cmV0dXJuIGE/YS5fX3N0eWxlSW5mbzpudWxsfWZ1bmN0aW9uIGVoKGEsYil7cmV0dXJuIGEuX19zdHlsZUluZm89Yn1jaC5wcm90b3R5cGUuYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkh9O2NoLnByb3RvdHlwZS5fZ2V0U3R5bGVSdWxlcz1jaC5wcm90b3R5cGUuYztmdW5jdGlvbiBmaChhKXt2YXIgYj10aGlzLm1hdGNoZXN8fHRoaXMubWF0Y2hlc1NlbGVjdG9yfHx0aGlzLm1vek1hdGNoZXNTZWxlY3Rvcnx8dGhpcy5tc01hdGNoZXNTZWxlY3Rvcnx8dGhpcy5vTWF0Y2hlc1NlbGVjdG9yfHx0aGlzLndlYmtpdE1hdGNoZXNTZWxlY3RvcjtyZXR1cm4gYiYmYi5jYWxsKHRoaXMsYSl9dmFyIGdoPS86aG9zdFxccyo+XFxzKi8saGg9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChcIlRyaWRlbnRcIik7ZnVuY3Rpb24gaWgoKXt9ZnVuY3Rpb24gamgoYSl7dmFyIGI9e30sYz1bXSxkPTA7b2coYSxmdW5jdGlvbihmKXtraChmKTtmLmluZGV4PWQrKztmPWYudi5jc3NUZXh0O2Zvcih2YXIgZztnPWlnLmV4ZWMoZik7KXt2YXIgaD1nWzFdO1wiOlwiIT09Z1syXSYmKGJbaF09ITApfX0sZnVuY3Rpb24oZil7Yy5wdXNoKGYpfSk7YS5iPWM7YT1bXTtmb3IodmFyIGUgaW4gYilhLnB1c2goZSk7cmV0dXJuIGF9XG5mdW5jdGlvbiBraChhKXtpZighYS52KXt2YXIgYj17fSxjPXt9O2xoKGEsYykmJihiLks9YyxhLnJ1bGVzPW51bGwpO2IuY3NzVGV4dD1hLnBhcnNlZENzc1RleHQucmVwbGFjZShsZyxcIlwiKS5yZXBsYWNlKGZnLFwiXCIpO2Eudj1ifX1mdW5jdGlvbiBsaChhLGIpe3ZhciBjPWEudjtpZihjKXtpZihjLkspcmV0dXJuIE9iamVjdC5hc3NpZ24oYixjLkspLCEwfWVsc2V7Yz1hLnBhcnNlZENzc1RleHQ7Zm9yKHZhciBkO2E9ZmcuZXhlYyhjKTspe2Q9KGFbMl18fGFbM10pLnRyaW0oKTtpZihcImluaGVyaXRcIiE9PWR8fFwidW5zZXRcIiE9PWQpYlthWzFdLnRyaW0oKV09ZDtkPSEwfXJldHVybiBkfX1cbmZ1bmN0aW9uIG1oKGEsYixjKXtiJiYoYj0wPD1iLmluZGV4T2YoXCI7XCIpP25oKGEsYixjKTp3ZyhiLGZ1bmN0aW9uKGQsZSxmLGcpe2lmKCFlKXJldHVybiBkK2c7KGU9bWgoYSxjW2VdLGMpKSYmXCJpbml0aWFsXCIhPT1lP1wiYXBwbHktc2hpbS1pbmhlcml0XCI9PT1lJiYoZT1cImluaGVyaXRcIik6ZT1taChhLGNbZl18fGYsYyl8fGY7cmV0dXJuIGQrKGV8fFwiXCIpK2d9KSk7cmV0dXJuIGImJmIudHJpbSgpfHxcIlwifVxuZnVuY3Rpb24gbmgoYSxiLGMpe2I9Yi5zcGxpdChcIjtcIik7Zm9yKHZhciBkPTAsZSxmO2Q8Yi5sZW5ndGg7ZCsrKWlmKGU9YltkXSl7aGcubGFzdEluZGV4PTA7aWYoZj1oZy5leGVjKGUpKWU9bWgoYSxjW2ZbMV1dLGMpO2Vsc2UgaWYoZj1lLmluZGV4T2YoXCI6XCIpLC0xIT09Zil7dmFyIGc9ZS5zdWJzdHJpbmcoZik7Zz1nLnRyaW0oKTtnPW1oKGEsZyxjKXx8ZztlPWUuc3Vic3RyaW5nKDAsZikrZ31iW2RdPWUmJmUubGFzdEluZGV4T2YoXCI7XCIpPT09ZS5sZW5ndGgtMT9lLnNsaWNlKDAsLTEpOmV8fFwiXCJ9cmV0dXJuIGIuam9pbihcIjtcIil9XG5mdW5jdGlvbiBvaChhLGIpe3ZhciBjPXt9LGQ9W107b2coYSxmdW5jdGlvbihlKXtlLnZ8fGtoKGUpO3ZhciBmPWUud3x8ZS5wYXJzZWRTZWxlY3RvcjtiJiZlLnYuSyYmZiYmZmguY2FsbChiLGYpJiYobGgoZSxjKSxlPWUuaW5kZXgsZj1wYXJzZUludChlLzMyLDEwKSxkW2ZdPShkW2ZdfHwwKXwxPDxlJTMyKX0sbnVsbCwhMCk7cmV0dXJue0s6YyxrZXk6ZH19XG5mdW5jdGlvbiBwaChhLGIsYyxkKXtiLnZ8fGtoKGIpO2lmKGIudi5LKXt2YXIgZT16ZyhhKTthPWUuaXM7ZT1lLmJhO2U9YT9NZyhhLGUpOlwiaHRtbFwiO3ZhciBmPWIucGFyc2VkU2VsZWN0b3I7dmFyIGc9ISFmLm1hdGNoKGdoKXx8XCJodG1sXCI9PT1lJiYtMTxmLmluZGV4T2YoXCJodG1sXCIpO3ZhciBoPTA9PT1mLmluZGV4T2YoXCI6aG9zdFwiKSYmIWc7XCJzaGFkeVwiPT09YyYmKGc9Zj09PWUrXCIgPiAqLlwiK2V8fC0xIT09Zi5pbmRleE9mKFwiaHRtbFwiKSxoPSFnJiYwPT09Zi5pbmRleE9mKGUpKTtpZihnfHxoKWM9ZSxoJiYoYi53fHwoYi53PU5nKEdnLGIsR2cuYixhP1wiLlwiK2E6XCJcIixlKSksYz1iLnd8fGUpLGcmJlwiaHRtbFwiPT09ZSYmKGM9Yi53fHxiLkopLGQoe3dhOmMsWGE6aCxtYjpnfSl9fVxuZnVuY3Rpb24gcWgoYSxiLGMpe3ZhciBkPXt9LGU9e307b2coYixmdW5jdGlvbihmKXtwaChhLGYsYyxmdW5jdGlvbihnKXtmaC5jYWxsKGEuX2VsZW1lbnR8fGEsZy53YSkmJihnLlhhP2xoKGYsZCk6bGgoZixlKSl9KX0sbnVsbCwhMCk7cmV0dXJue2NiOmUsVmE6ZH19XG5mdW5jdGlvbiByaChhLGIsYyxkKXt2YXIgZT16ZyhiKSxmPU1nKGUuaXMsZS5iYSksZz1uZXcgUmVnRXhwKFwiKD86XnxbXi4jWzpdKVwiKyhiLmV4dGVuZHM/XCJcXFxcXCIrZi5zbGljZSgwLC0xKStcIlxcXFxdXCI6ZikrXCIoJHxbLjpbXFxcXHM+K35dKVwiKSxoPWRoKGIpO2U9aC5IO2g9aC5jc3NCdWlsZDt2YXIgaz1zaChlLGQpO3JldHVybiBLZyhiLGUsZnVuY3Rpb24obCl7dmFyIG09XCJcIjtsLnZ8fGtoKGwpO2wudi5jc3NUZXh0JiYobT1uaChhLGwudi5jc3NUZXh0LGMpKTtsLmNzc1RleHQ9bTtpZighViYmIXFnKGwpJiZsLmNzc1RleHQpe3ZhciBxPW09bC5jc3NUZXh0O251bGw9PWwuRGEmJihsLkRhPWpnLnRlc3QobSkpO2lmKGwuRGEpaWYobnVsbD09bC5qYSl7bC5qYT1bXTtmb3IodmFyIEggaW4gaylxPWtbSF0scT1xKG0pLG0hPT1xJiYobT1xLGwuamEucHVzaChIKSl9ZWxzZXtmb3IoSD0wO0g8bC5qYS5sZW5ndGg7KytIKXE9a1tsLmphW0hdXSxtPXEobSk7cT1tfWwuY3NzVGV4dD1xO2wudz1cbmwud3x8bC5zZWxlY3RvcjttPVwiLlwiK2Q7SD1BZyhsLncpO3E9MDtmb3IodmFyIEU9SC5sZW5ndGgscj12b2lkIDA7cTxFJiYocj1IW3FdKTtxKyspSFtxXT1yLm1hdGNoKGcpP3IucmVwbGFjZShmLG0pOm0rXCIgXCIrcjtsLnNlbGVjdG9yPUguam9pbihcIixcIil9fSxoKX1mdW5jdGlvbiBzaChhLGIpe2E9YS5iO3ZhciBjPXt9O2lmKCFWJiZhKWZvcih2YXIgZD0wLGU9YVtkXTtkPGEubGVuZ3RoO2U9YVsrK2RdKXt2YXIgZj1lLGc9YjtmLmw9bmV3IFJlZ0V4cChcIlxcXFxiXCIrZi5rZXlmcmFtZXNOYW1lK1wiKD8hXFxcXEJ8LSlcIixcImdcIik7Zi5hPWYua2V5ZnJhbWVzTmFtZStcIi1cIitnO2Yudz1mLnd8fGYuc2VsZWN0b3I7Zi5zZWxlY3Rvcj1mLncucmVwbGFjZShmLmtleWZyYW1lc05hbWUsZi5hKTtjW2Uua2V5ZnJhbWVzTmFtZV09dGgoZSl9cmV0dXJuIGN9ZnVuY3Rpb24gdGgoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBiLnJlcGxhY2UoYS5sLGEuYSl9fVxuZnVuY3Rpb24gdWgoYSxiKXt2YXIgYz12aCxkPXBnKGEpO2EudGV4dENvbnRlbnQ9bmcoZCxmdW5jdGlvbihlKXt2YXIgZj1lLmNzc1RleHQ9ZS5wYXJzZWRDc3NUZXh0O2UudiYmZS52LmNzc1RleHQmJihmPWYucmVwbGFjZShZZixcIlwiKS5yZXBsYWNlKFpmLFwiXCIpLGUuY3NzVGV4dD1uaChjLGYsYikpfSl9ZmEuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaWgucHJvdG90eXBlLHthOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5cIngtc2NvcGVcIn19fSk7dmFyIHZoPW5ldyBpaDt2YXIgd2g9e30seGg9d2luZG93LmN1c3RvbUVsZW1lbnRzO2lmKHhoJiYhViYmIWVnKXt2YXIgeWg9eGguZGVmaW5lO3hoLmRlZmluZT1mdW5jdGlvbihhLGIsYyl7d2hbYV18fCh3aFthXT11ZyhhKSk7eWguY2FsbCh4aCxhLGIsYyl9fTtmdW5jdGlvbiB6aCgpe3RoaXMuY2FjaGU9e319emgucHJvdG90eXBlLnN0b3JlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuY2FjaGVbYV18fFtdO2UucHVzaCh7SzpiLHN0eWxlRWxlbWVudDpjLEc6ZH0pOzEwMDxlLmxlbmd0aCYmZS5zaGlmdCgpO3RoaXMuY2FjaGVbYV09ZX07ZnVuY3Rpb24gQWgoKXt9dmFyIEJoPW5ldyBSZWdFeHAoR2cuYStcIlxcXFxzKihbXlxcXFxzXSopXCIpO2Z1bmN0aW9uIENoKGEpe3JldHVybihhPShhLmNsYXNzTGlzdCYmYS5jbGFzc0xpc3QudmFsdWU/YS5jbGFzc0xpc3QudmFsdWU6YS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikubWF0Y2goQmgpKT9hWzFdOlwiXCJ9ZnVuY3Rpb24gRGgoYSl7dmFyIGI9eWcoYSkuZ2V0Um9vdE5vZGUoKTtyZXR1cm4gYj09PWF8fGI9PT1hLm93bmVyRG9jdW1lbnQ/XCJcIjooYT1iLmhvc3QpP3pnKGEpLmlzOlwiXCJ9XG5mdW5jdGlvbiBFaChhKXtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGM9YVtiXTtpZihjLnRhcmdldCE9PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmYy50YXJnZXQhPT1kb2N1bWVudC5oZWFkKWZvcih2YXIgZD0wO2Q8Yy5hZGRlZE5vZGVzLmxlbmd0aDtkKyspe3ZhciBlPWMuYWRkZWROb2Rlc1tkXTtpZihlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe3ZhciBmPWUuZ2V0Um9vdE5vZGUoKSxnPUNoKGUpO2lmKGcmJmY9PT1lLm93bmVyRG9jdW1lbnQmJihcInN0eWxlXCIhPT1lLmxvY2FsTmFtZSYmXCJ0ZW1wbGF0ZVwiIT09ZS5sb2NhbE5hbWV8fFwiXCI9PT1CZyhlKSkpSmcoZSxnKTtlbHNlIGlmKGYgaW5zdGFuY2VvZiBTaGFkb3dSb290KWZvcihmPURoKGUpLGYhPT1nJiZJZyhlLGcsZiksZT13aW5kb3cuU2hhZHlET00ubmF0aXZlTWV0aG9kcy5xdWVyeVNlbGVjdG9yQWxsLmNhbGwoZSxcIjpub3QoLlwiK0dnLmErXCIpXCIpLGc9MDtnPGUubGVuZ3RoO2crKyl7Zj1lW2ddO1xudmFyIGg9RGgoZik7aCYmSGcoZixoKX19fX19XG5pZighKFZ8fHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmhhbmRsZXNEeW5hbWljU2NvcGluZykpe3ZhciBGaD1uZXcgTXV0YXRpb25PYnNlcnZlcihFaCksR2g9ZnVuY3Rpb24oYSl7Rmgub2JzZXJ2ZShhLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pfTtpZih3aW5kb3cuY3VzdG9tRWxlbWVudHMmJiF3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjaylHaChkb2N1bWVudCk7ZWxzZXt2YXIgSGg9ZnVuY3Rpb24oKXtHaChkb2N1bWVudC5ib2R5KX07d2luZG93LkhUTUxJbXBvcnRzP3dpbmRvdy5IVE1MSW1wb3J0cy53aGVuUmVhZHkoSGgpOnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2lmKFwibG9hZGluZ1wiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZSl7dmFyIGE9ZnVuY3Rpb24oKXtIaCgpO2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZWFkeXN0YXRlY2hhbmdlXCIsYSl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJyZWFkeXN0YXRlY2hhbmdlXCIsXG5hKX1lbHNlIEhoKCl9KX1BaD1mdW5jdGlvbigpe0VoKEZoLnRha2VSZWNvcmRzKCkpfX07dmFyIEloPXt9O3ZhciBKaD1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiBLaChhKXtpZihhPUloW2FdKWEuX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9uPWEuX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9ufHwwLGEuX2FwcGx5U2hpbVZhbGlkYXRpbmdWZXJzaW9uPWEuX2FwcGx5U2hpbVZhbGlkYXRpbmdWZXJzaW9ufHwwLGEuX2FwcGx5U2hpbU5leHRWZXJzaW9uPShhLl9hcHBseVNoaW1OZXh0VmVyc2lvbnx8MCkrMX1mdW5jdGlvbiBMaChhKXtyZXR1cm4gYS5fYXBwbHlTaGltQ3VycmVudFZlcnNpb249PT1hLl9hcHBseVNoaW1OZXh0VmVyc2lvbn1mdW5jdGlvbiBNaChhKXthLl9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbj1hLl9hcHBseVNoaW1OZXh0VmVyc2lvbjthLl92YWxpZGF0aW5nfHwoYS5fdmFsaWRhdGluZz0hMCxKaC50aGVuKGZ1bmN0aW9uKCl7YS5fYXBwbHlTaGltQ3VycmVudFZlcnNpb249YS5fYXBwbHlTaGltTmV4dFZlcnNpb247YS5fdmFsaWRhdGluZz0hMX0pKX07dmFyIE5oPXt9LE9oPW5ldyB6aDtmdW5jdGlvbiBZKCl7dGhpcy5ZPXt9O3RoaXMuYz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dmFyIGE9bmV3IExmO2EucnVsZXM9W107dGhpcy5sPWVoKHRoaXMuYyxuZXcgY2goYSkpO3RoaXMuSj0hMTt0aGlzLmE9dGhpcy5iPW51bGx9dz1ZLnByb3RvdHlwZTt3LmZsdXNoPWZ1bmN0aW9uKCl7QWgoKX07dy5UYT1mdW5jdGlvbihhKXtyZXR1cm4gcGcoYSl9O3cuaGI9ZnVuY3Rpb24oYSl7cmV0dXJuIG5nKGEpfTt3LnByZXBhcmVUZW1wbGF0ZT1mdW5jdGlvbihhLGIsYyl7dGhpcy5wcmVwYXJlVGVtcGxhdGVEb20oYSxiKTt0aGlzLnByZXBhcmVUZW1wbGF0ZVN0eWxlcyhhLGIsYyl9O1xudy5wcmVwYXJlVGVtcGxhdGVTdHlsZXM9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhLl9wcmVwYXJlZCYmIWVnKXtWfHx3aFtiXXx8KHdoW2JdPXVnKGIpKTthLl9wcmVwYXJlZD0hMDthLm5hbWU9YjthLmV4dGVuZHM9YztJaFtiXT1hO3ZhciBkPUJnKGEpLGU9Q2coZCk7Yz17aXM6YixleHRlbmRzOmN9O2Zvcih2YXIgZj1bXSxnPWEuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVcIiksaD0wO2g8Zy5sZW5ndGg7aCsrKXt2YXIgaz1nW2hdO2lmKGsuaGFzQXR0cmlidXRlKFwic2hhZHktdW5zY29wZWRcIikpe2lmKCFWKXt2YXIgbD1rLnRleHRDb250ZW50O2lmKCFtZy5oYXMobCkpe21nLmFkZChsKTt2YXIgbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7bS5zZXRBdHRyaWJ1dGUoXCJzaGFkeS11bnNjb3BlZFwiLFwiXCIpO20udGV4dENvbnRlbnQ9bDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG0pfWsucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChrKX19ZWxzZSBmLnB1c2goay50ZXh0Q29udGVudCksXG5rLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoayl9Zj1mLmpvaW4oXCJcIikudHJpbSgpKyhOaFtiXXx8XCJcIik7UGgodGhpcyk7aWYoIWUpe2lmKGc9IWQpZz1oZy50ZXN0KGYpfHxmZy50ZXN0KGYpLGhnLmxhc3RJbmRleD0wLGZnLmxhc3RJbmRleD0wO2g9TWYoZik7ZyYmWCYmdGhpcy5iJiZ0aGlzLmIudHJhbnNmb3JtUnVsZXMoaCxiKTthLl9zdHlsZUFzdD1ofWc9W107WHx8KGc9amgoYS5fc3R5bGVBc3QpKTtpZighZy5sZW5ndGh8fFgpaD1WP2EuY29udGVudDpudWxsLGI9d2hbYl18fG51bGwsZD1LZyhjLGEuX3N0eWxlQXN0LG51bGwsZCxlP2Y6XCJcIiksZD1kLmxlbmd0aD9yZyhkLGMuaXMsaCxiKTpudWxsLGEuX3N0eWxlPWQ7YS5hPWd9fTt3LmFiPWZ1bmN0aW9uKGEsYil7TmhbYl09YS5qb2luKFwiIFwiKX07XG53LnByZXBhcmVUZW1wbGF0ZURvbT1mdW5jdGlvbihhLGIpe2lmKCFlZyl7dmFyIGM9QmcoYSk7Vnx8XCJzaGFkeVwiPT09Y3x8YS5fZG9tUHJlcGFyZWR8fChhLl9kb21QcmVwYXJlZD0hMCxFZyhhLmNvbnRlbnQsYikpfX07ZnVuY3Rpb24gUWgoYSl7dmFyIGI9emcoYSksYz1iLmlzO2I9Yi5iYTt2YXIgZD13aFtjXXx8bnVsbCxlPUloW2NdO2lmKGUpe2M9ZS5fc3R5bGVBc3Q7dmFyIGY9ZS5hO2U9QmcoZSk7Yj1uZXcgY2goYyxkLGYsYixlKTtlaChhLGIpO3JldHVybiBifX1cbmZ1bmN0aW9uIFJoKGEpeyFhLmEmJndpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlJiYoYS5hPXdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSxhLmEudHJhbnNmb3JtQ2FsbGJhY2s9ZnVuY3Rpb24oYil7YS5IYShiKX0sYS5hLnZhbGlkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXsoYS5hLmVucXVldWVkfHxhLkopJiZhLmZsdXNoQ3VzdG9tU3R5bGVzKCl9KX0pfWZ1bmN0aW9uIFBoKGEpe2lmKCFhLmImJndpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLkFwcGx5U2hpbSl7YS5iPXdpbmRvdy5TaGFkeUNTUy5BcHBseVNoaW07YS5iLmludmFsaWRDYWxsYmFjaz1LaDt2YXIgYj0hMH1lbHNlIGI9ITE7UmgoYSk7cmV0dXJuIGJ9XG53LmZsdXNoQ3VzdG9tU3R5bGVzPWZ1bmN0aW9uKCl7aWYoIWVnKXt2YXIgYT1QaCh0aGlzKTtpZih0aGlzLmEpe3ZhciBiPXRoaXMuYS5wcm9jZXNzU3R5bGVzKCk7aWYoKGF8fHRoaXMuYS5lbnF1ZXVlZCkmJiFDZyh0aGlzLmwuY3NzQnVpbGQpKXtpZihYKXtpZighdGhpcy5sLmNzc0J1aWxkKWZvcihhPTA7YTxiLmxlbmd0aDthKyspe3ZhciBjPXRoaXMuYS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKGJbYV0pO2lmKGMmJlgmJnRoaXMuYil7dmFyIGQ9cGcoYyk7UGgodGhpcyk7dGhpcy5iLnRyYW5zZm9ybVJ1bGVzKGQpO2MudGV4dENvbnRlbnQ9bmcoZCl9fX1lbHNle1NoKHRoaXMsYik7VGgodGhpcyx0aGlzLmMsdGhpcy5sKTtmb3IoYT0wO2E8Yi5sZW5ndGg7YSsrKShjPXRoaXMuYS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKGJbYV0pKSYmdWgoYyx0aGlzLmwuTCk7dGhpcy5KJiZ0aGlzLnN0eWxlRG9jdW1lbnQoKX10aGlzLmEuZW5xdWV1ZWQ9ITF9fX19O1xuZnVuY3Rpb24gU2goYSxiKXtiPWIubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBhLmEuZ2V0U3R5bGVGb3JDdXN0b21TdHlsZShjKX0pLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4hIWN9KTtiLnNvcnQoZnVuY3Rpb24oYyxkKXtjPWQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYyk7cmV0dXJuIGMmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc/MTpjJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HPy0xOjB9KTthLmwuSC5ydWxlcz1iLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gcGcoYyl9KX1cbncuc3R5bGVFbGVtZW50PWZ1bmN0aW9uKGEsYil7aWYoZWcpe2lmKGIpe2RoKGEpfHxlaChhLG5ldyBjaChudWxsKSk7dmFyIGM9ZGgoYSk7Yy5GPWMuRnx8e307T2JqZWN0LmFzc2lnbihjLkYsYik7VWgodGhpcyxhLGMpfX1lbHNlIGlmKGM9ZGgoYSl8fFFoKGEpKWlmKGEhPT10aGlzLmMmJih0aGlzLko9ITApLGImJihjLkY9Yy5GfHx7fSxPYmplY3QuYXNzaWduKGMuRixiKSksWClVaCh0aGlzLGEsYyk7ZWxzZSBpZih0aGlzLmZsdXNoKCksVGgodGhpcyxhLGMpLGMudGEmJmMudGEubGVuZ3RoKXtiPXpnKGEpLmlzO3ZhciBkO2E6e2lmKGQ9T2guY2FjaGVbYl0pZm9yKHZhciBlPWQubGVuZ3RoLTE7MDw9ZTtlLS0pe3ZhciBmPWRbZV07Yjp7dmFyIGc9Yy50YTtmb3IodmFyIGg9MDtoPGcubGVuZ3RoO2grKyl7dmFyIGs9Z1toXTtpZihmLktba10hPT1jLkxba10pe2c9ITE7YnJlYWsgYn19Zz0hMH1pZihnKXtkPWY7YnJlYWsgYX19ZD12b2lkIDB9Zz1kP2Quc3R5bGVFbGVtZW50OlxubnVsbDtlPWMuRzsoZj1kJiZkLkcpfHwoZj10aGlzLllbYl09KHRoaXMuWVtiXXx8MCkrMSxmPWIrXCItXCIrZik7Yy5HPWY7Zj1jLkc7aD12aDtoPWc/Zy50ZXh0Q29udGVudHx8XCJcIjpyaChoLGEsYy5MLGYpO2s9ZGgoYSk7dmFyIGw9ay5hO2wmJiFWJiZsIT09ZyYmKGwuX3VzZUNvdW50LS0sMD49bC5fdXNlQ291bnQmJmwucGFyZW50Tm9kZSYmbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGwpKTtWP2suYT8oay5hLnRleHRDb250ZW50PWgsZz1rLmEpOmgmJihnPXJnKGgsZixhLnNoYWRvd1Jvb3Qsay5iKSk6Zz9nLnBhcmVudE5vZGV8fChoaCYmLTE8aC5pbmRleE9mKFwiQG1lZGlhXCIpJiYoZy50ZXh0Q29udGVudD1oKSxzZyhnLG51bGwsay5iKSk6aCYmKGc9cmcoaCxmLG51bGwsay5iKSk7ZyYmKGcuX3VzZUNvdW50PWcuX3VzZUNvdW50fHwwLGsuYSE9ZyYmZy5fdXNlQ291bnQrKyxrLmE9Zyk7Zj1nO1Z8fChnPWMuRyxrPWg9YS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIixlJiYoaz1cbmgucmVwbGFjZShuZXcgUmVnRXhwKFwiXFxcXHMqeC1zY29wZVxcXFxzKlwiK2UrXCJcXFxccypcIixcImdcIiksXCIgXCIpKSxrKz0oaz9cIiBcIjpcIlwiKStcIngtc2NvcGUgXCIrZyxoIT09ayYmeGcoYSxrKSk7ZHx8T2guc3RvcmUoYixjLkwsZixjLkcpfX07XG5mdW5jdGlvbiBVaChhLGIsYyl7dmFyIGQ9emcoYikuaXM7aWYoYy5GKXt2YXIgZT1jLkYsZjtmb3IoZiBpbiBlKW51bGw9PT1mP2Iuc3R5bGUucmVtb3ZlUHJvcGVydHkoZik6Yi5zdHlsZS5zZXRQcm9wZXJ0eShmLGVbZl0pfWU9SWhbZF07aWYoISghZSYmYiE9PWEuY3x8ZSYmXCJcIiE9PUJnKGUpKSYmZSYmZS5fc3R5bGUmJiFMaChlKSl7aWYoTGgoZSl8fGUuX2FwcGx5U2hpbVZhbGlkYXRpbmdWZXJzaW9uIT09ZS5fYXBwbHlTaGltTmV4dFZlcnNpb24pUGgoYSksYS5iJiZhLmIudHJhbnNmb3JtUnVsZXMoZS5fc3R5bGVBc3QsZCksZS5fc3R5bGUudGV4dENvbnRlbnQ9S2coYixjLkgpLE1oKGUpO1YmJihhPWIuc2hhZG93Um9vdCkmJihhPWEucXVlcnlTZWxlY3RvcihcInN0eWxlXCIpKSYmKGEudGV4dENvbnRlbnQ9S2coYixjLkgpKTtjLkg9ZS5fc3R5bGVBc3R9fVxuZnVuY3Rpb24gVmgoYSxiKXtyZXR1cm4oYj15ZyhiKS5nZXRSb290Tm9kZSgpLmhvc3QpP2RoKGIpfHxRaChiKT9iOlZoKGEsYik6YS5jfWZ1bmN0aW9uIFRoKGEsYixjKXt2YXIgZD1WaChhLGIpLGU9ZGgoZCksZj1lLkw7ZD09PWEuY3x8Znx8KFRoKGEsZCxlKSxmPWUuTCk7YT1PYmplY3QuY3JlYXRlKGZ8fG51bGwpO2Q9cWgoYixjLkgsYy5jc3NCdWlsZCk7Yj1vaChlLkgsYikuSztPYmplY3QuYXNzaWduKGEsZC5WYSxiLGQuY2IpO2I9Yy5GO2Zvcih2YXIgZyBpbiBiKWlmKChlPWJbZ10pfHwwPT09ZSlhW2ddPWU7Zz12aDtiPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpO2ZvcihlPTA7ZTxiLmxlbmd0aDtlKyspZD1iW2VdLGFbZF09bWgoZyxhW2RdLGEpO2MuTD1hfXcuc3R5bGVEb2N1bWVudD1mdW5jdGlvbihhKXt0aGlzLnN0eWxlU3VidHJlZSh0aGlzLmMsYSl9O1xudy5zdHlsZVN1YnRyZWU9ZnVuY3Rpb24oYSxiKXt2YXIgYz15ZyhhKSxkPWMuc2hhZG93Um9vdCxlPWE9PT10aGlzLmM7KGR8fGUpJiZ0aGlzLnN0eWxlRWxlbWVudChhLGIpO2lmKGE9ZT9jOmQpZm9yKGE9QXJyYXkuZnJvbShhLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpKS5maWx0ZXIoZnVuY3Rpb24oZil7cmV0dXJuIHlnKGYpLnNoYWRvd1Jvb3R9KSxiPTA7YjxhLmxlbmd0aDtiKyspdGhpcy5zdHlsZVN1YnRyZWUoYVtiXSl9O1xudy5IYT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9QmcoYSk7YyE9PXRoaXMubC5jc3NCdWlsZCYmKHRoaXMubC5jc3NCdWlsZD1jKTtpZighQ2coYykpe3ZhciBkPXBnKGEpO29nKGQsZnVuY3Rpb24oZSl7aWYoViliaChlKTtlbHNle3ZhciBmPUdnO2Uuc2VsZWN0b3I9ZS5wYXJzZWRTZWxlY3RvcjtiaChlKTtlLnNlbGVjdG9yPWUudz1OZyhmLGUsZi5jLHZvaWQgMCx2b2lkIDApfVgmJlwiXCI9PT1jJiYoUGgoYiksYi5iJiZiLmIudHJhbnNmb3JtUnVsZShlKSl9KTtYP2EudGV4dENvbnRlbnQ9bmcoZCk6dGhpcy5sLkgucnVsZXMucHVzaChkKX19O3cuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlPWZ1bmN0aW9uKGEsYil7dmFyIGM7WHx8KGM9KGRoKGEpfHxkaChWaCh0aGlzLGEpKSkuTFtiXSk7cmV0dXJuKGM9Y3x8d2luZG93LmdldENvbXB1dGVkU3R5bGUoYSkuZ2V0UHJvcGVydHlWYWx1ZShiKSk/Yy50cmltKCk6XCJcIn07XG53LmdiPWZ1bmN0aW9uKGEsYil7dmFyIGM9eWcoYSkuZ2V0Um9vdE5vZGUoKSxkO2I/ZD0oXCJzdHJpbmdcIj09PXR5cGVvZiBiP2I6U3RyaW5nKGIpKS5zcGxpdCgvXFxzLyk6ZD1bXTtiPWMuaG9zdCYmYy5ob3N0LmxvY2FsTmFtZTtpZighYiYmKGM9YS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSkpe2M9Yy5zcGxpdCgvXFxzLyk7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspaWYoY1tlXT09PUdnLmEpe2I9Y1tlKzFdO2JyZWFrfX1iJiZkLnB1c2goR2cuYSxiKTtYfHwoYj1kaChhKSkmJmIuRyYmZC5wdXNoKHZoLmEsYi5HKTt4ZyhhLGQuam9pbihcIiBcIikpfTt3Lk9hPWZ1bmN0aW9uKGEpe3JldHVybiBkaChhKX07dy5mYj1mdW5jdGlvbihhLGIpe0hnKGEsYil9O3cuaWI9ZnVuY3Rpb24oYSxiKXtIZyhhLGIsITApfTt3LmViPWZ1bmN0aW9uKGEpe3JldHVybiBEaChhKX07dy5SYT1mdW5jdGlvbihhKXtyZXR1cm4gQ2goYSl9O1kucHJvdG90eXBlLmZsdXNoPVkucHJvdG90eXBlLmZsdXNoO1xuWS5wcm90b3R5cGUucHJlcGFyZVRlbXBsYXRlPVkucHJvdG90eXBlLnByZXBhcmVUZW1wbGF0ZTtZLnByb3RvdHlwZS5zdHlsZUVsZW1lbnQ9WS5wcm90b3R5cGUuc3R5bGVFbGVtZW50O1kucHJvdG90eXBlLnN0eWxlRG9jdW1lbnQ9WS5wcm90b3R5cGUuc3R5bGVEb2N1bWVudDtZLnByb3RvdHlwZS5zdHlsZVN1YnRyZWU9WS5wcm90b3R5cGUuc3R5bGVTdWJ0cmVlO1kucHJvdG90eXBlLmdldENvbXB1dGVkU3R5bGVWYWx1ZT1ZLnByb3RvdHlwZS5nZXRDb21wdXRlZFN0eWxlVmFsdWU7WS5wcm90b3R5cGUuc2V0RWxlbWVudENsYXNzPVkucHJvdG90eXBlLmdiO1kucHJvdG90eXBlLl9zdHlsZUluZm9Gb3JOb2RlPVkucHJvdG90eXBlLk9hO1kucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlRm9yRG9jdW1lbnQ9WS5wcm90b3R5cGUuSGE7WS5wcm90b3R5cGUuZ2V0U3R5bGVBc3Q9WS5wcm90b3R5cGUuVGE7WS5wcm90b3R5cGUuc3R5bGVBc3RUb1N0cmluZz1ZLnByb3RvdHlwZS5oYjtcblkucHJvdG90eXBlLmZsdXNoQ3VzdG9tU3R5bGVzPVkucHJvdG90eXBlLmZsdXNoQ3VzdG9tU3R5bGVzO1kucHJvdG90eXBlLnNjb3BlTm9kZT1ZLnByb3RvdHlwZS5mYjtZLnByb3RvdHlwZS51bnNjb3BlTm9kZT1ZLnByb3RvdHlwZS5pYjtZLnByb3RvdHlwZS5zY29wZUZvck5vZGU9WS5wcm90b3R5cGUuZWI7WS5wcm90b3R5cGUuY3VycmVudFNjb3BlRm9yTm9kZT1ZLnByb3RvdHlwZS5SYTtZLnByb3RvdHlwZS5wcmVwYXJlQWRvcHRlZENzc1RleHQ9WS5wcm90b3R5cGUuYWI7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWS5wcm90b3R5cGUse25hdGl2ZVNoYWRvdzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFZ9fSxuYXRpdmVDc3M6e2dldDpmdW5jdGlvbigpe3JldHVybiBYfX19KTt2YXIgWj1uZXcgWSxXaCxYaDt3aW5kb3cuU2hhZHlDU1MmJihXaD13aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltLFhoPXdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSk7XG53aW5kb3cuU2hhZHlDU1M9e1Njb3BpbmdTaGltOloscHJlcGFyZVRlbXBsYXRlOmZ1bmN0aW9uKGEsYixjKXtaLmZsdXNoQ3VzdG9tU3R5bGVzKCk7Wi5wcmVwYXJlVGVtcGxhdGUoYSxiLGMpfSxwcmVwYXJlVGVtcGxhdGVEb206ZnVuY3Rpb24oYSxiKXtaLnByZXBhcmVUZW1wbGF0ZURvbShhLGIpfSxwcmVwYXJlVGVtcGxhdGVTdHlsZXM6ZnVuY3Rpb24oYSxiLGMpe1ouZmx1c2hDdXN0b21TdHlsZXMoKTtaLnByZXBhcmVUZW1wbGF0ZVN0eWxlcyhhLGIsYyl9LHN0eWxlU3VidHJlZTpmdW5jdGlvbihhLGIpe1ouZmx1c2hDdXN0b21TdHlsZXMoKTtaLnN0eWxlU3VidHJlZShhLGIpfSxzdHlsZUVsZW1lbnQ6ZnVuY3Rpb24oYSl7Wi5mbHVzaEN1c3RvbVN0eWxlcygpO1ouc3R5bGVFbGVtZW50KGEpfSxzdHlsZURvY3VtZW50OmZ1bmN0aW9uKGEpe1ouZmx1c2hDdXN0b21TdHlsZXMoKTtaLnN0eWxlRG9jdW1lbnQoYSl9LGZsdXNoQ3VzdG9tU3R5bGVzOmZ1bmN0aW9uKCl7Wi5mbHVzaEN1c3RvbVN0eWxlcygpfSxcbmdldENvbXB1dGVkU3R5bGVWYWx1ZTpmdW5jdGlvbihhLGIpe3JldHVybiBaLmdldENvbXB1dGVkU3R5bGVWYWx1ZShhLGIpfSxuYXRpdmVDc3M6WCxuYXRpdmVTaGFkb3c6Vixjc3NCdWlsZDpkZyxkaXNhYmxlUnVudGltZTplZ307V2gmJih3aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltPVdoKTtYaCYmKHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZT1YaCk7KGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIocil7XCJcIj09ciYmKGYuY2FsbCh0aGlzKSx0aGlzLmg9ITApO3JldHVybiByLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gYyhyKXt2YXIgRj1yLmNoYXJDb2RlQXQoMCk7cmV0dXJuIDMyPEYmJjEyNz5GJiYtMT09WzM0LDM1LDYwLDYyLDYzLDk2XS5pbmRleE9mKEYpP3I6ZW5jb2RlVVJJQ29tcG9uZW50KHIpfWZ1bmN0aW9uIGQocil7dmFyIEY9ci5jaGFyQ29kZUF0KDApO3JldHVybiAzMjxGJiYxMjc+RiYmLTE9PVszNCwzNSw2MCw2Miw5Nl0uaW5kZXhPZihGKT9yOmVuY29kZVVSSUNvbXBvbmVudChyKX1mdW5jdGlvbiBlKHIsRixDKXtmdW5jdGlvbiBNKGthKXt0YS5wdXNoKGthKX12YXIgeT1GfHxcInNjaGVtZSBzdGFydFwiLFc9MCx2PVwiXCIsc2E9ITEsZWE9ITEsdGE9W107YTpmb3IoOyh2b2lkIDAhPXJbVy0xXXx8MD09VykmJiF0aGlzLmg7KXt2YXIgbj1yW1ddO3N3aXRjaCh5KXtjYXNlIFwic2NoZW1lIHN0YXJ0XCI6aWYobiYmcS50ZXN0KG4pKXYrPVxubi50b0xvd2VyQ2FzZSgpLHk9XCJzY2hlbWVcIjtlbHNlIGlmKEYpe00oXCJJbnZhbGlkIHNjaGVtZS5cIik7YnJlYWsgYX1lbHNle3Y9XCJcIjt5PVwibm8gc2NoZW1lXCI7Y29udGludWV9YnJlYWs7Y2FzZSBcInNjaGVtZVwiOmlmKG4mJkgudGVzdChuKSl2Kz1uLnRvTG93ZXJDYXNlKCk7ZWxzZSBpZihcIjpcIj09bil7dGhpcy5nPXY7dj1cIlwiO2lmKEYpYnJlYWsgYTt2b2lkIDAhPT1sW3RoaXMuZ10mJih0aGlzLkE9ITApO3k9XCJmaWxlXCI9PXRoaXMuZz9cInJlbGF0aXZlXCI6dGhpcy5BJiZDJiZDLmc9PXRoaXMuZz9cInJlbGF0aXZlIG9yIGF1dGhvcml0eVwiOnRoaXMuQT9cImF1dGhvcml0eSBmaXJzdCBzbGFzaFwiOlwic2NoZW1lIGRhdGFcIn1lbHNlIGlmKEYpe3ZvaWQgMCE9biYmTShcIkNvZGUgcG9pbnQgbm90IGFsbG93ZWQgaW4gc2NoZW1lOiBcIituKTticmVhayBhfWVsc2V7dj1cIlwiO1c9MDt5PVwibm8gc2NoZW1lXCI7Y29udGludWV9YnJlYWs7Y2FzZSBcInNjaGVtZSBkYXRhXCI6XCI/XCI9PW4/KHRoaXMubz1cIj9cIixcbnk9XCJxdWVyeVwiKTpcIiNcIj09bj8odGhpcy51PVwiI1wiLHk9XCJmcmFnbWVudFwiKTp2b2lkIDAhPW4mJlwiXFx0XCIhPW4mJlwiXFxuXCIhPW4mJlwiXFxyXCIhPW4mJih0aGlzLnBhKz1jKG4pKTticmVhaztjYXNlIFwibm8gc2NoZW1lXCI6aWYoQyYmdm9pZCAwIT09bFtDLmddKXt5PVwicmVsYXRpdmVcIjtjb250aW51ZX1lbHNlIE0oXCJNaXNzaW5nIHNjaGVtZS5cIiksZi5jYWxsKHRoaXMpLHRoaXMuaD0hMDticmVhaztjYXNlIFwicmVsYXRpdmUgb3IgYXV0aG9yaXR5XCI6aWYoXCIvXCI9PW4mJlwiL1wiPT1yW1crMV0peT1cImF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO2Vsc2V7TShcIkV4cGVjdGVkIC8sIGdvdDogXCIrbik7eT1cInJlbGF0aXZlXCI7Y29udGludWV9YnJlYWs7Y2FzZSBcInJlbGF0aXZlXCI6dGhpcy5BPSEwO1wiZmlsZVwiIT10aGlzLmcmJih0aGlzLmc9Qy5nKTtpZih2b2lkIDA9PW4pe3RoaXMuaT1DLmk7dGhpcy5tPUMubTt0aGlzLmo9Qy5qLnNsaWNlKCk7dGhpcy5vPUMubzt0aGlzLnM9Qy5zO3RoaXMuZj1DLmY7XG5icmVhayBhfWVsc2UgaWYoXCIvXCI9PW58fFwiXFxcXFwiPT1uKVwiXFxcXFwiPT1uJiZNKFwiXFxcXCBpcyBhbiBpbnZhbGlkIGNvZGUgcG9pbnQuXCIpLHk9XCJyZWxhdGl2ZSBzbGFzaFwiO2Vsc2UgaWYoXCI/XCI9PW4pdGhpcy5pPUMuaSx0aGlzLm09Qy5tLHRoaXMuaj1DLmouc2xpY2UoKSx0aGlzLm89XCI/XCIsdGhpcy5zPUMucyx0aGlzLmY9Qy5mLHk9XCJxdWVyeVwiO2Vsc2UgaWYoXCIjXCI9PW4pdGhpcy5pPUMuaSx0aGlzLm09Qy5tLHRoaXMuaj1DLmouc2xpY2UoKSx0aGlzLm89Qy5vLHRoaXMudT1cIiNcIix0aGlzLnM9Qy5zLHRoaXMuZj1DLmYseT1cImZyYWdtZW50XCI7ZWxzZXt5PXJbVysxXTt2YXIgST1yW1crMl07aWYoXCJmaWxlXCIhPXRoaXMuZ3x8IXEudGVzdChuKXx8XCI6XCIhPXkmJlwifFwiIT15fHx2b2lkIDAhPUkmJlwiL1wiIT1JJiZcIlxcXFxcIiE9SSYmXCI/XCIhPUkmJlwiI1wiIT1JKXRoaXMuaT1DLmksdGhpcy5tPUMubSx0aGlzLnM9Qy5zLHRoaXMuZj1DLmYsdGhpcy5qPUMuai5zbGljZSgpLHRoaXMuai5wb3AoKTt5PVxuXCJyZWxhdGl2ZSBwYXRoXCI7Y29udGludWV9YnJlYWs7Y2FzZSBcInJlbGF0aXZlIHNsYXNoXCI6aWYoXCIvXCI9PW58fFwiXFxcXFwiPT1uKVwiXFxcXFwiPT1uJiZNKFwiXFxcXCBpcyBhbiBpbnZhbGlkIGNvZGUgcG9pbnQuXCIpLHk9XCJmaWxlXCI9PXRoaXMuZz9cImZpbGUgaG9zdFwiOlwiYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7ZWxzZXtcImZpbGVcIiE9dGhpcy5nJiYodGhpcy5pPUMuaSx0aGlzLm09Qy5tLHRoaXMucz1DLnMsdGhpcy5mPUMuZik7eT1cInJlbGF0aXZlIHBhdGhcIjtjb250aW51ZX1icmVhaztjYXNlIFwiYXV0aG9yaXR5IGZpcnN0IHNsYXNoXCI6aWYoXCIvXCI9PW4peT1cImF1dGhvcml0eSBzZWNvbmQgc2xhc2hcIjtlbHNle00oXCJFeHBlY3RlZCAnLycsIGdvdDogXCIrbik7eT1cImF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO2NvbnRpbnVlfWJyZWFrO2Nhc2UgXCJhdXRob3JpdHkgc2Vjb25kIHNsYXNoXCI6eT1cImF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO2lmKFwiL1wiIT1uKXtNKFwiRXhwZWN0ZWQgJy8nLCBnb3Q6IFwiK1xubik7Y29udGludWV9YnJlYWs7Y2FzZSBcImF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiOmlmKFwiL1wiIT1uJiZcIlxcXFxcIiE9bil7eT1cImF1dGhvcml0eVwiO2NvbnRpbnVlfWVsc2UgTShcIkV4cGVjdGVkIGF1dGhvcml0eSwgZ290OiBcIituKTticmVhaztjYXNlIFwiYXV0aG9yaXR5XCI6aWYoXCJAXCI9PW4pe3NhJiYoTShcIkAgYWxyZWFkeSBzZWVuLlwiKSx2Kz1cIiU0MFwiKTtzYT0hMDtmb3Iobj0wO248di5sZW5ndGg7bisrKUk9dltuXSxcIlxcdFwiPT1JfHxcIlxcblwiPT1JfHxcIlxcclwiPT1JP00oXCJJbnZhbGlkIHdoaXRlc3BhY2UgaW4gYXV0aG9yaXR5LlwiKTpcIjpcIj09SSYmbnVsbD09PXRoaXMuZj90aGlzLmY9XCJcIjooST1jKEkpLG51bGwhPT10aGlzLmY/dGhpcy5mKz1JOnRoaXMucys9SSk7dj1cIlwifWVsc2UgaWYodm9pZCAwPT1ufHxcIi9cIj09bnx8XCJcXFxcXCI9PW58fFwiP1wiPT1ufHxcIiNcIj09bil7Vy09di5sZW5ndGg7dj1cIlwiO3k9XCJob3N0XCI7Y29udGludWV9ZWxzZSB2Kz1uO2JyZWFrO2Nhc2UgXCJmaWxlIGhvc3RcIjppZih2b2lkIDA9PVxubnx8XCIvXCI9PW58fFwiXFxcXFwiPT1ufHxcIj9cIj09bnx8XCIjXCI9PW4pezIhPXYubGVuZ3RofHwhcS50ZXN0KHZbMF0pfHxcIjpcIiE9dlsxXSYmXCJ8XCIhPXZbMV0/KDAhPXYubGVuZ3RoJiYodGhpcy5pPWIuY2FsbCh0aGlzLHYpLHY9XCJcIikseT1cInJlbGF0aXZlIHBhdGggc3RhcnRcIik6eT1cInJlbGF0aXZlIHBhdGhcIjtjb250aW51ZX1lbHNlXCJcXHRcIj09bnx8XCJcXG5cIj09bnx8XCJcXHJcIj09bj9NKFwiSW52YWxpZCB3aGl0ZXNwYWNlIGluIGZpbGUgaG9zdC5cIik6dis9bjticmVhaztjYXNlIFwiaG9zdFwiOmNhc2UgXCJob3N0bmFtZVwiOmlmKFwiOlwiIT1ufHxlYSlpZih2b2lkIDA9PW58fFwiL1wiPT1ufHxcIlxcXFxcIj09bnx8XCI/XCI9PW58fFwiI1wiPT1uKXt0aGlzLmk9Yi5jYWxsKHRoaXMsdik7dj1cIlwiO3k9XCJyZWxhdGl2ZSBwYXRoIHN0YXJ0XCI7aWYoRilicmVhayBhO2NvbnRpbnVlfWVsc2VcIlxcdFwiIT1uJiZcIlxcblwiIT1uJiZcIlxcclwiIT1uPyhcIltcIj09bj9lYT0hMDpcIl1cIj09biYmKGVhPSExKSx2Kz1uKTpNKFwiSW52YWxpZCBjb2RlIHBvaW50IGluIGhvc3QvaG9zdG5hbWU6IFwiK1xubik7ZWxzZSBpZih0aGlzLmk9Yi5jYWxsKHRoaXMsdiksdj1cIlwiLHk9XCJwb3J0XCIsXCJob3N0bmFtZVwiPT1GKWJyZWFrIGE7YnJlYWs7Y2FzZSBcInBvcnRcIjppZigvWzAtOV0vLnRlc3Qobikpdis9bjtlbHNlIGlmKHZvaWQgMD09bnx8XCIvXCI9PW58fFwiXFxcXFwiPT1ufHxcIj9cIj09bnx8XCIjXCI9PW58fEYpe1wiXCIhPXYmJih2PXBhcnNlSW50KHYsMTApLHYhPWxbdGhpcy5nXSYmKHRoaXMubT12K1wiXCIpLHY9XCJcIik7aWYoRilicmVhayBhO3k9XCJyZWxhdGl2ZSBwYXRoIHN0YXJ0XCI7Y29udGludWV9ZWxzZVwiXFx0XCI9PW58fFwiXFxuXCI9PW58fFwiXFxyXCI9PW4/TShcIkludmFsaWQgY29kZSBwb2ludCBpbiBwb3J0OiBcIituKTooZi5jYWxsKHRoaXMpLHRoaXMuaD0hMCk7YnJlYWs7Y2FzZSBcInJlbGF0aXZlIHBhdGggc3RhcnRcIjpcIlxcXFxcIj09biYmTShcIidcXFxcJyBub3QgYWxsb3dlZCBpbiBwYXRoLlwiKTt5PVwicmVsYXRpdmUgcGF0aFwiO2lmKFwiL1wiIT1uJiZcIlxcXFxcIiE9biljb250aW51ZTticmVhaztjYXNlIFwicmVsYXRpdmUgcGF0aFwiOmlmKHZvaWQgMCE9XG5uJiZcIi9cIiE9biYmXCJcXFxcXCIhPW4mJihGfHxcIj9cIiE9biYmXCIjXCIhPW4pKVwiXFx0XCIhPW4mJlwiXFxuXCIhPW4mJlwiXFxyXCIhPW4mJih2Kz1jKG4pKTtlbHNle1wiXFxcXFwiPT1uJiZNKFwiXFxcXCBub3QgYWxsb3dlZCBpbiByZWxhdGl2ZSBwYXRoLlwiKTtpZihJPW1bdi50b0xvd2VyQ2FzZSgpXSl2PUk7XCIuLlwiPT12Pyh0aGlzLmoucG9wKCksXCIvXCIhPW4mJlwiXFxcXFwiIT1uJiZ0aGlzLmoucHVzaChcIlwiKSk6XCIuXCI9PXYmJlwiL1wiIT1uJiZcIlxcXFxcIiE9bj90aGlzLmoucHVzaChcIlwiKTpcIi5cIiE9diYmKFwiZmlsZVwiPT10aGlzLmcmJjA9PXRoaXMuai5sZW5ndGgmJjI9PXYubGVuZ3RoJiZxLnRlc3QodlswXSkmJlwifFwiPT12WzFdJiYodj12WzBdK1wiOlwiKSx0aGlzLmoucHVzaCh2KSk7dj1cIlwiO1wiP1wiPT1uPyh0aGlzLm89XCI/XCIseT1cInF1ZXJ5XCIpOlwiI1wiPT1uJiYodGhpcy51PVwiI1wiLHk9XCJmcmFnbWVudFwiKX1icmVhaztjYXNlIFwicXVlcnlcIjpGfHxcIiNcIiE9bj92b2lkIDAhPW4mJlwiXFx0XCIhPW4mJlwiXFxuXCIhPW4mJlwiXFxyXCIhPW4mJih0aGlzLm8rPVxuZChuKSk6KHRoaXMudT1cIiNcIix5PVwiZnJhZ21lbnRcIik7YnJlYWs7Y2FzZSBcImZyYWdtZW50XCI6dm9pZCAwIT1uJiZcIlxcdFwiIT1uJiZcIlxcblwiIT1uJiZcIlxcclwiIT1uJiYodGhpcy51Kz1uKX1XKyt9fWZ1bmN0aW9uIGYoKXt0aGlzLnM9dGhpcy5wYT10aGlzLmc9XCJcIjt0aGlzLmY9bnVsbDt0aGlzLm09dGhpcy5pPVwiXCI7dGhpcy5qPVtdO3RoaXMudT10aGlzLm89XCJcIjt0aGlzLkE9dGhpcy5oPSExfWZ1bmN0aW9uIGcocixGKXt2b2lkIDA9PT1GfHxGIGluc3RhbmNlb2YgZ3x8KEY9bmV3IGcoU3RyaW5nKEYpKSk7dGhpcy5hPXI7Zi5jYWxsKHRoaXMpO2UuY2FsbCh0aGlzLHRoaXMuYS5yZXBsYWNlKC9eWyBcXHRcXHJcXG5cXGZdK3xbIFxcdFxcclxcblxcZl0rJC9nLFwiXCIpLG51bGwsRil9dmFyIGg9ITE7dHJ5e3ZhciBrPW5ldyBVUkwoXCJiXCIsXCJodHRwOi8vYVwiKTtrLnBhdGhuYW1lPVwiYyUyMGRcIjtoPVwiaHR0cDovL2EvYyUyMGRcIj09PWsuaHJlZn1jYXRjaChyKXt9aWYoIWgpe3ZhciBsPU9iamVjdC5jcmVhdGUobnVsbCk7XG5sLmZ0cD0yMTtsLmZpbGU9MDtsLmdvcGhlcj03MDtsLmh0dHA9ODA7bC5odHRwcz00NDM7bC53cz04MDtsLndzcz00NDM7dmFyIG09T2JqZWN0LmNyZWF0ZShudWxsKTttW1wiJTJlXCJdPVwiLlwiO21bXCIuJTJlXCJdPVwiLi5cIjttW1wiJTJlLlwiXT1cIi4uXCI7bVtcIiUyZSUyZVwiXT1cIi4uXCI7dmFyIHE9L1thLXpBLVpdLyxIPS9bYS16QS1aMC05XFwrXFwtXFwuXS87Zy5wcm90b3R5cGU9e3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHJlZn0sZ2V0IGhyZWYoKXtpZih0aGlzLmgpcmV0dXJuIHRoaXMuYTt2YXIgcj1cIlwiO2lmKFwiXCIhPXRoaXMuc3x8bnVsbCE9dGhpcy5mKXI9dGhpcy5zKyhudWxsIT10aGlzLmY/XCI6XCIrdGhpcy5mOlwiXCIpK1wiQFwiO3JldHVybiB0aGlzLnByb3RvY29sKyh0aGlzLkE/XCIvL1wiK3IrdGhpcy5ob3N0OlwiXCIpK3RoaXMucGF0aG5hbWUrdGhpcy5vK3RoaXMudX0sc2V0IGhyZWYocil7Zi5jYWxsKHRoaXMpO2UuY2FsbCh0aGlzLHIpfSxnZXQgcHJvdG9jb2woKXtyZXR1cm4gdGhpcy5nK1xuXCI6XCJ9LHNldCBwcm90b2NvbChyKXt0aGlzLmh8fGUuY2FsbCh0aGlzLHIrXCI6XCIsXCJzY2hlbWUgc3RhcnRcIil9LGdldCBob3N0KCl7cmV0dXJuIHRoaXMuaD9cIlwiOnRoaXMubT90aGlzLmkrXCI6XCIrdGhpcy5tOnRoaXMuaX0sc2V0IGhvc3Qocil7IXRoaXMuaCYmdGhpcy5BJiZlLmNhbGwodGhpcyxyLFwiaG9zdFwiKX0sZ2V0IGhvc3RuYW1lKCl7cmV0dXJuIHRoaXMuaX0sc2V0IGhvc3RuYW1lKHIpeyF0aGlzLmgmJnRoaXMuQSYmZS5jYWxsKHRoaXMscixcImhvc3RuYW1lXCIpfSxnZXQgcG9ydCgpe3JldHVybiB0aGlzLm19LHNldCBwb3J0KHIpeyF0aGlzLmgmJnRoaXMuQSYmZS5jYWxsKHRoaXMscixcInBvcnRcIil9LGdldCBwYXRobmFtZSgpe3JldHVybiB0aGlzLmg/XCJcIjp0aGlzLkE/XCIvXCIrdGhpcy5qLmpvaW4oXCIvXCIpOnRoaXMucGF9LHNldCBwYXRobmFtZShyKXshdGhpcy5oJiZ0aGlzLkEmJih0aGlzLmo9W10sZS5jYWxsKHRoaXMscixcInJlbGF0aXZlIHBhdGggc3RhcnRcIikpfSxnZXQgc2VhcmNoKCl7cmV0dXJuIHRoaXMuaHx8XG4hdGhpcy5vfHxcIj9cIj09dGhpcy5vP1wiXCI6dGhpcy5vfSxzZXQgc2VhcmNoKHIpeyF0aGlzLmgmJnRoaXMuQSYmKHRoaXMubz1cIj9cIixcIj9cIj09clswXSYmKHI9ci5zbGljZSgxKSksZS5jYWxsKHRoaXMscixcInF1ZXJ5XCIpKX0sZ2V0IGhhc2goKXtyZXR1cm4gdGhpcy5ofHwhdGhpcy51fHxcIiNcIj09dGhpcy51P1wiXCI6dGhpcy51fSxzZXQgaGFzaChyKXt0aGlzLmh8fChyPyh0aGlzLnU9XCIjXCIsXCIjXCI9PXJbMF0mJihyPXIuc2xpY2UoMSkpLGUuY2FsbCh0aGlzLHIsXCJmcmFnbWVudFwiKSk6dGhpcy51PVwiXCIpfSxnZXQgb3JpZ2luKCl7dmFyIHI7aWYodGhpcy5ofHwhdGhpcy5nKXJldHVyblwiXCI7c3dpdGNoKHRoaXMuZyl7Y2FzZSBcImRhdGFcIjpjYXNlIFwiZmlsZVwiOmNhc2UgXCJqYXZhc2NyaXB0XCI6Y2FzZSBcIm1haWx0b1wiOnJldHVyblwibnVsbFwifXJldHVybihyPXRoaXMuaG9zdCk/dGhpcy5nK1wiOi8vXCIrcjpcIlwifX07dmFyIEU9YS5VUkw7RSYmKGcuY3JlYXRlT2JqZWN0VVJMPWZ1bmN0aW9uKHIpe3JldHVybiBFLmNyZWF0ZU9iamVjdFVSTC5hcHBseShFLFxuYXJndW1lbnRzKX0sZy5yZXZva2VPYmplY3RVUkw9ZnVuY3Rpb24ocil7RS5yZXZva2VPYmplY3RVUkwocil9KTthLlVSTD1nfX0pKHdpbmRvdyk7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihOb2RlLnByb3RvdHlwZSxcImJhc2VVUklcIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSxcImJhc2VVUklcIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIGE9KHRoaXMub3duZXJEb2N1bWVudHx8dGhpcykucXVlcnlTZWxlY3RvcihcImJhc2VbaHJlZl1cIik7cmV0dXJuIGEmJmEuaHJlZnx8d2luZG93LmxvY2F0aW9uLmhyZWZ9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSk7dmFyIFloPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtZaC50ZXh0Q29udGVudD1cImJvZHkge3RyYW5zaXRpb246IG9wYWNpdHkgZWFzZS1pbiAwLjJzOyB9IFxcbmJvZHlbdW5yZXNvbHZlZF0ge29wYWNpdHk6IDA7IGRpc3BsYXk6IGJsb2NrOyBvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IH0gXFxuXCI7dmFyIFpoPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJoZWFkXCIpO1poLmluc2VydEJlZm9yZShZaCxaaC5maXJzdENoaWxkKTt2YXIgJGg9d2luZG93LmN1c3RvbUVsZW1lbnRzLGFpPSExLGJpPW51bGw7JGgucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayYmJGgucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayhmdW5jdGlvbihhKXtiaT1hO2FpJiZhKCl9KTtmdW5jdGlvbiBjaSgpe3dpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50LmJvb3RzdHJhcCYmd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQuYm9vdHN0cmFwKHdpbmRvdy5kb2N1bWVudCk7YmkmJmJpKCk7YWk9ITA7d2luZG93LldlYkNvbXBvbmVudHMucmVhZHk9ITA7ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJXZWJDb21wb25lbnRzUmVhZHlcIix7YnViYmxlczohMH0pKX1cblwiY29tcGxldGVcIiE9PWRvY3VtZW50LnJlYWR5U3RhdGU/KHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLGNpKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIixmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLGNpKTtjaSgpfSkpOmNpKCk7fSkuY2FsbCh0aGlzKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2ViY29tcG9uZW50cy1idW5kbGUuanMubWFwXG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cblxuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLyoqXG4gICAqIEJhc2ljIGZsb3cgb2YgdGhlIGxvYWRlciBwcm9jZXNzXG4gICAqXG4gICAqIFRoZXJlIGFyZSA0IGZsb3dzIHRoZSBsb2FkZXIgY2FuIHRha2Ugd2hlbiBib290aW5nIHVwXG4gICAqXG4gICAqIC0gU3luY2hyb25vdXMgc2NyaXB0LCBubyBwb2x5ZmlsbHMgbmVlZGVkXG4gICAqICAgLSB3YWl0IGZvciBgRE9NQ29udGVudExvYWRlZGBcbiAgICogICAtIGZpcmUgV0NSIGV2ZW50LCBhcyB0aGVyZSBjb3VsZCBub3QgYmUgYW55IGNhbGxiYWNrcyBwYXNzZWQgdG8gYHdhaXRGb3JgXG4gICAqXG4gICAqIC0gU3luY2hyb25vdXMgc2NyaXB0LCBwb2x5ZmlsbHMgbmVlZGVkXG4gICAqICAgLSBkb2N1bWVudC53cml0ZSB0aGUgcG9seWZpbGwgYnVuZGxlXG4gICAqICAgLSB3YWl0IG9uIHRoZSBgbG9hZGAgZXZlbnQgb2YgdGhlIGJ1bmRsZSB0byBiYXRjaCBDdXN0b20gRWxlbWVudCB1cGdyYWRlc1xuICAgKiAgIC0gd2FpdCBmb3IgYERPTUNvbnRlbnRMb2FkZWRgXG4gICAqICAgLSBydW4gY2FsbGJhY2tzIHBhc3NlZCB0byBgd2FpdEZvcmBcbiAgICogICAtIGZpcmUgV0NSIGV2ZW50XG4gICAqXG4gICAqIC0gQXN5bmNocm9ub3VzIHNjcmlwdCwgbm8gcG9seWZpbGxzIG5lZWRlZFxuICAgKiAgIC0gd2FpdCBmb3IgYERPTUNvbnRlbnRMb2FkZWRgXG4gICAqICAgLSBydW4gY2FsbGJhY2tzIHBhc3NlZCB0byBgd2FpdEZvcmBcbiAgICogICAtIGZpcmUgV0NSIGV2ZW50XG4gICAqXG4gICAqIC0gQXN5bmNocm9ub3VzIHNjcmlwdCwgcG9seWZpbGxzIG5lZWRlZFxuICAgKiAgIC0gQXBwZW5kIHRoZSBwb2x5ZmlsbCBidW5kbGUgc2NyaXB0XG4gICAqICAgLSB3YWl0IGZvciBgbG9hZGAgZXZlbnQgb2YgdGhlIGJ1bmRsZVxuICAgKiAgIC0gYmF0Y2ggQ3VzdG9tIEVsZW1lbnQgVXBncmFkZXNcbiAgICogICAtIHJ1biBjYWxsYmFja3MgcGFzcyB0byBgd2FpdEZvcmBcbiAgICogICAtIGZpcmUgV0NSIGV2ZW50XG4gICAqL1xuXG4gIHZhciBwb2x5ZmlsbHNMb2FkZWQgPSBmYWxzZTtcbiAgdmFyIHdoZW5Mb2FkZWRGbnMgPSBbXTtcbiAgdmFyIGFsbG93VXBncmFkZXMgPSBmYWxzZTtcbiAgdmFyIGZsdXNoRm47XG5cbiAgZnVuY3Rpb24gZmlyZUV2ZW50KCkge1xuICAgIHdpbmRvdy5XZWJDb21wb25lbnRzLnJlYWR5ID0gdHJ1ZTtcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnV2ViQ29tcG9uZW50c1JlYWR5JywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJhdGNoQ3VzdG9tRWxlbWVudHMoKSB7XG4gICAgaWYgKHdpbmRvdy5jdXN0b21FbGVtZW50cyAmJiBjdXN0b21FbGVtZW50cy5wb2x5ZmlsbFdyYXBGbHVzaENhbGxiYWNrKSB7XG4gICAgICBjdXN0b21FbGVtZW50cy5wb2x5ZmlsbFdyYXBGbHVzaENhbGxiYWNrKGZ1bmN0aW9uIChmbHVzaENhbGxiYWNrKSB7XG4gICAgICAgIGZsdXNoRm4gPSBmbHVzaENhbGxiYWNrO1xuICAgICAgICBpZiAoYWxsb3dVcGdyYWRlcykge1xuICAgICAgICAgIGZsdXNoRm4oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYXN5bmNSZWFkeSgpIHtcbiAgICBiYXRjaEN1c3RvbUVsZW1lbnRzKCk7XG4gICAgcmVhZHkoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWR5KCkge1xuICAgIC8vIGJvb3RzdHJhcCA8dGVtcGxhdGU+IGVsZW1lbnRzIGJlZm9yZSBjdXN0b20gZWxlbWVudHNcbiAgICBpZiAod2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQgJiYgSFRNTFRlbXBsYXRlRWxlbWVudC5ib290c3RyYXApIHtcbiAgICAgIEhUTUxUZW1wbGF0ZUVsZW1lbnQuYm9vdHN0cmFwKHdpbmRvdy5kb2N1bWVudCk7XG4gICAgfVxuICAgIHBvbHlmaWxsc0xvYWRlZCA9IHRydWU7XG4gICAgcnVuV2hlbkxvYWRlZEZucygpLnRoZW4oZmlyZUV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJ1bldoZW5Mb2FkZWRGbnMoKSB7XG4gICAgYWxsb3dVcGdyYWRlcyA9IGZhbHNlO1xuICAgIHZhciBmbnNNYXAgPSB3aGVuTG9hZGVkRm5zLm1hcChmdW5jdGlvbihmbikge1xuICAgICAgcmV0dXJuIGZuIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBmbigpIDogZm47XG4gICAgfSk7XG4gICAgd2hlbkxvYWRlZEZucyA9IFtdO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChmbnNNYXApLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICBhbGxvd1VwZ3JhZGVzID0gdHJ1ZTtcbiAgICAgIGZsdXNoRm4gJiYgZmx1c2hGbigpO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH0pO1xuICB9XG5cbiAgd2luZG93LldlYkNvbXBvbmVudHMgPSB3aW5kb3cuV2ViQ29tcG9uZW50cyB8fCB7fTtcbiAgd2luZG93LldlYkNvbXBvbmVudHMucmVhZHkgPSB3aW5kb3cuV2ViQ29tcG9uZW50cy5yZWFkeSB8fCBmYWxzZTtcbiAgd2luZG93LldlYkNvbXBvbmVudHMud2FpdEZvciA9IHdpbmRvdy5XZWJDb21wb25lbnRzLndhaXRGb3IgfHwgZnVuY3Rpb24od2FpdEZuKSB7XG4gICAgaWYgKCF3YWl0Rm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2hlbkxvYWRlZEZucy5wdXNoKHdhaXRGbik7XG4gICAgaWYgKHBvbHlmaWxsc0xvYWRlZCkge1xuICAgICAgcnVuV2hlbkxvYWRlZEZucygpO1xuICAgIH1cbiAgfTtcbiAgd2luZG93LldlYkNvbXBvbmVudHMuX2JhdGNoQ3VzdG9tRWxlbWVudHMgPSBiYXRjaEN1c3RvbUVsZW1lbnRzO1xuXG4gIHZhciBuYW1lID0gJ3dlYmNvbXBvbmVudHMtbG9hZGVyLmpzJztcbiAgLy8gRmVhdHVyZSBkZXRlY3Qgd2hpY2ggcG9seWZpbGwgbmVlZHMgdG8gYmUgaW1wb3J0ZWQuXG4gIHZhciBwb2x5ZmlsbHMgPSBbXTtcbiAgaWYgKCEoJ2F0dGFjaFNoYWRvdycgaW4gRWxlbWVudC5wcm90b3R5cGUgJiYgJ2dldFJvb3ROb2RlJyBpbiBFbGVtZW50LnByb3RvdHlwZSkgfHxcbiAgICAod2luZG93LlNoYWR5RE9NICYmIHdpbmRvdy5TaGFkeURPTS5mb3JjZSkpIHtcbiAgICBwb2x5ZmlsbHMucHVzaCgnc2QnKTtcbiAgfVxuICBpZiAoIXdpbmRvdy5jdXN0b21FbGVtZW50cyB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZm9yY2VQb2x5ZmlsbCkge1xuICAgIHBvbHlmaWxscy5wdXNoKCdjZScpO1xuICB9XG5cbiAgdmFyIG5lZWRzVGVtcGxhdGUgPSAoZnVuY3Rpb24oKSB7XG4gICAgLy8gbm8gcmVhbCA8dGVtcGxhdGU+IGJlY2F1c2Ugbm8gYGNvbnRlbnRgIHByb3BlcnR5IChJRSBhbmQgb2xkZXIgYnJvd3NlcnMpXG4gICAgdmFyIHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICAgIGlmICghKCdjb250ZW50JyBpbiB0KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIGJyb2tlbiBkb2MgZnJhZ21lbnQgKG9sZGVyIEVkZ2UpXG4gICAgaWYgKCEodC5jb250ZW50LmNsb25lTm9kZSgpIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBicm9rZW4gPHRlbXBsYXRlPiBjbG9uaW5nIChFZGdlIHVwIHRvIGF0IGxlYXN0IHZlcnNpb24gMTcpXG4gICAgdmFyIHQyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcbiAgICB0Mi5jb250ZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICB0LmNvbnRlbnQuYXBwZW5kQ2hpbGQodDIpO1xuICAgIHZhciBjbG9uZSA9IHQuY2xvbmVOb2RlKHRydWUpO1xuICAgIHJldHVybiAoY2xvbmUuY29udGVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICBjbG9uZS5jb250ZW50LmZpcnN0Q2hpbGQuY29udGVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCk7XG4gIH0pKCk7XG5cbiAgLy8gTk9URTogYW55IGJyb3dzZXIgdGhhdCBkb2VzIG5vdCBoYXZlIHRlbXBsYXRlIG9yIEVTNiBmZWF0dXJlc1xuICAvLyBtdXN0IGxvYWQgdGhlIGZ1bGwgc3VpdGUgb2YgcG9seWZpbGxzLlxuICBpZiAoIXdpbmRvdy5Qcm9taXNlIHx8ICFBcnJheS5mcm9tIHx8ICF3aW5kb3cuVVJMIHx8ICF3aW5kb3cuU3ltYm9sIHx8IG5lZWRzVGVtcGxhdGUpIHtcbiAgICBwb2x5ZmlsbHMgPSBbJ3NkLWNlLXBmJ107XG4gIH1cblxuICBpZiAocG9seWZpbGxzLmxlbmd0aCkge1xuICAgIHZhciB1cmw7XG4gICAgdmFyIHBvbHlmaWxsRmlsZSA9ICdidW5kbGVzL3dlYmNvbXBvbmVudHMtJyArIHBvbHlmaWxscy5qb2luKCctJykgKyAnLmpzJztcblxuICAgIC8vIExvYWQgaXQgZnJvbSB0aGUgcmlnaHQgcGxhY2UuXG4gICAgaWYgKHdpbmRvdy5XZWJDb21wb25lbnRzLnJvb3QpIHtcbiAgICAgIHVybCA9IHdpbmRvdy5XZWJDb21wb25lbnRzLnJvb3QgKyBwb2x5ZmlsbEZpbGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzY3JpcHRbc3JjKj1cIicgKyBuYW1lICsnXCJdJyk7XG4gICAgICAvLyBMb2FkIGl0IGZyb20gdGhlIHJpZ2h0IHBsYWNlLlxuICAgICAgdXJsID0gc2NyaXB0LnNyYy5yZXBsYWNlKG5hbWUsIHBvbHlmaWxsRmlsZSk7XG4gICAgfVxuXG4gICAgdmFyIG5ld1NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIG5ld1NjcmlwdC5zcmMgPSB1cmw7XG4gICAgLy8gaWYgcmVhZHlTdGF0ZSBpcyAnbG9hZGluZycsIHRoaXMgc2NyaXB0IGlzIHN5bmNocm9ub3VzXG4gICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykge1xuICAgICAgLy8gbWFrZSBzdXJlIGN1c3RvbSBlbGVtZW50cyBhcmUgYmF0Y2hlZCB3aGVuZXZlciBwYXJzZXIgZ2V0cyB0byB0aGUgaW5qZWN0ZWQgc2NyaXB0XG4gICAgICBuZXdTY3JpcHQuc2V0QXR0cmlidXRlKCdvbmxvYWQnLCAnd2luZG93LldlYkNvbXBvbmVudHMuX2JhdGNoQ3VzdG9tRWxlbWVudHMoKScpO1xuICAgICAgZG9jdW1lbnQud3JpdGUobmV3U2NyaXB0Lm91dGVySFRNTCk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgcmVhZHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXN5bmNSZWFkeSgpO1xuICAgICAgfSk7XG4gICAgICBuZXdTY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGxvYWQgcG9seWZpbGwgYnVuZGxlJyArIHVybCk7XG4gICAgICB9KTtcbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobmV3U2NyaXB0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgcmVhZHlTdGF0ZSBpcyAnY29tcGxldGUnLCBzY3JpcHQgaXMgbG9hZGVkIGltcGVyYXRpdmVseSBvbiBhIHNwZWMtY29tcGxpYW50IGJyb3dzZXIsIHNvIGp1c3QgZmlyZSBXQ1JcbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgcG9seWZpbGxzTG9hZGVkID0gdHJ1ZTtcbiAgICAgIGZpcmVFdmVudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzIHNjcmlwdCBtYXkgY29tZSBiZXR3ZWVuIERDTCBhbmQgbG9hZCwgc28gbGlzdGVuIGZvciBib3RoLCBhbmQgY2FuY2VsIGxvYWQgbGlzdGVuZXIgaWYgRENMIGZpcmVzXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHJlYWR5KTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgcmVhZHkpO1xuICAgICAgICByZWFkeSgpO1xuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pKCk7XG4iLCIvKlxuICogSW50ZXJuYXRpb25hbCBUZWxlcGhvbmUgSW5wdXQgdjE2LjEuMFxuICogaHR0cHM6Ly9naXRodWIuY29tL2phY2tvY25yL2ludGwtdGVsLWlucHV0LmdpdFxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cblxuLy8gd3JhcCBpbiBVTURcbihmdW5jdGlvbihmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgbW9kdWxlLmV4cG9ydHMpIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpOyBlbHNlIHdpbmRvdy5pbnRsVGVsSW5wdXQgPSBmYWN0b3J5KCk7XG59KShmdW5jdGlvbih1bmRlZmluZWQpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIEFycmF5IG9mIGNvdW50cnkgb2JqZWN0cyBmb3IgdGhlIGZsYWcgZHJvcGRvd24uXG4gICAgICAgIC8vIEhlcmUgaXMgdGhlIGNyaXRlcmlhIGZvciB0aGUgcGx1Z2luIHRvIHN1cHBvcnQgYSBnaXZlbiBjb3VudHJ5L3RlcnJpdG9yeVxuICAgICAgICAvLyAtIEl0IGhhcyBhbiBpc28yIGNvZGU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT18zMTY2LTFfYWxwaGEtMlxuICAgICAgICAvLyAtIEl0IGhhcyBpdCdzIG93biBjb3VudHJ5IGNhbGxpbmcgY29kZSAoaXQgaXMgbm90IGEgc3ViLXJlZ2lvbiBvZiBhbm90aGVyIGNvdW50cnkpOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX2NvdW50cnlfY2FsbGluZ19jb2Rlc1xuICAgICAgICAvLyAtIEl0IGhhcyBhIGZsYWcgaW4gdGhlIHJlZ2lvbi1mbGFncyBwcm9qZWN0OiBodHRwczovL2dpdGh1Yi5jb20vYmVoZGFkL3JlZ2lvbi1mbGFncy90cmVlL2doLXBhZ2VzL3BuZ1xuICAgICAgICAvLyAtIEl0IGlzIHN1cHBvcnRlZCBieSBsaWJwaG9uZW51bWJlciAoaXQgbXVzdCBiZSBsaXN0ZWQgb24gdGhpcyBwYWdlKTogaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZWkxOG4vbGlicGhvbmVudW1iZXIvYmxvYi9tYXN0ZXIvcmVzb3VyY2VzL1Nob3J0TnVtYmVyTWV0YWRhdGEueG1sXG4gICAgICAgIC8vIEVhY2ggY291bnRyeSBhcnJheSBoYXMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjpcbiAgICAgICAgLy8gW1xuICAgICAgICAvLyAgICBDb3VudHJ5IG5hbWUsXG4gICAgICAgIC8vICAgIGlzbzIgY29kZSxcbiAgICAgICAgLy8gICAgSW50ZXJuYXRpb25hbCBkaWFsIGNvZGUsXG4gICAgICAgIC8vICAgIE9yZGVyIChpZiA+MSBjb3VudHJ5IHdpdGggc2FtZSBkaWFsIGNvZGUpLFxuICAgICAgICAvLyAgICBBcmVhIGNvZGVzXG4gICAgICAgIC8vIF1cbiAgICAgICAgdmFyIGFsbENvdW50cmllcyA9IFsgWyBcIkFmZ2hhbmlzdGFuICjigKvYp9mB2LrYp9mG2LPYqtin2YbigKzigI4pXCIsIFwiYWZcIiwgXCI5M1wiIF0sIFsgXCJBbGJhbmlhIChTaHFpcMOrcmkpXCIsIFwiYWxcIiwgXCIzNTVcIiBdLCBbIFwiQWxnZXJpYSAo4oCr2KfZhNis2LLYp9im2LHigKzigI4pXCIsIFwiZHpcIiwgXCIyMTNcIiBdLCBbIFwiQW1lcmljYW4gU2Ftb2FcIiwgXCJhc1wiLCBcIjFcIiwgNSwgWyBcIjY4NFwiIF0gXSwgWyBcIkFuZG9ycmFcIiwgXCJhZFwiLCBcIjM3NlwiIF0sIFsgXCJBbmdvbGFcIiwgXCJhb1wiLCBcIjI0NFwiIF0sIFsgXCJBbmd1aWxsYVwiLCBcImFpXCIsIFwiMVwiLCA2LCBbIFwiMjY0XCIgXSBdLCBbIFwiQW50aWd1YSBhbmQgQmFyYnVkYVwiLCBcImFnXCIsIFwiMVwiLCA3LCBbIFwiMjY4XCIgXSBdLCBbIFwiQXJnZW50aW5hXCIsIFwiYXJcIiwgXCI1NFwiIF0sIFsgXCJBcm1lbmlhICjVgNWh1bXVodW91b/VodW2KVwiLCBcImFtXCIsIFwiMzc0XCIgXSwgWyBcIkFydWJhXCIsIFwiYXdcIiwgXCIyOTdcIiBdLCBbIFwiQXVzdHJhbGlhXCIsIFwiYXVcIiwgXCI2MVwiLCAwIF0sIFsgXCJBdXN0cmlhICjDlnN0ZXJyZWljaClcIiwgXCJhdFwiLCBcIjQzXCIgXSwgWyBcIkF6ZXJiYWlqYW4gKEF6yZlyYmF5Y2FuKVwiLCBcImF6XCIsIFwiOTk0XCIgXSwgWyBcIkJhaGFtYXNcIiwgXCJic1wiLCBcIjFcIiwgOCwgWyBcIjI0MlwiIF0gXSwgWyBcIkJhaHJhaW4gKOKAq9in2YTYqNit2LHZitmG4oCs4oCOKVwiLCBcImJoXCIsIFwiOTczXCIgXSwgWyBcIkJhbmdsYWRlc2ggKOCmrOCmvuCmguCmsuCmvuCmpuCnh+CmtilcIiwgXCJiZFwiLCBcIjg4MFwiIF0sIFsgXCJCYXJiYWRvc1wiLCBcImJiXCIsIFwiMVwiLCA5LCBbIFwiMjQ2XCIgXSBdLCBbIFwiQmVsYXJ1cyAo0JHQtdC70LDRgNGD0YHRjClcIiwgXCJieVwiLCBcIjM3NVwiIF0sIFsgXCJCZWxnaXVtIChCZWxnacOrKVwiLCBcImJlXCIsIFwiMzJcIiBdLCBbIFwiQmVsaXplXCIsIFwiYnpcIiwgXCI1MDFcIiBdLCBbIFwiQmVuaW4gKELDqW5pbilcIiwgXCJialwiLCBcIjIyOVwiIF0sIFsgXCJCZXJtdWRhXCIsIFwiYm1cIiwgXCIxXCIsIDEwLCBbIFwiNDQxXCIgXSBdLCBbIFwiQmh1dGFuICjgvaDgvZbgvrLgvbTgvYIpXCIsIFwiYnRcIiwgXCI5NzVcIiBdLCBbIFwiQm9saXZpYVwiLCBcImJvXCIsIFwiNTkxXCIgXSwgWyBcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmEgKNCR0L7RgdC90LAg0Lgg0KXQtdGA0YbQtdCz0L7QstC40L3QsClcIiwgXCJiYVwiLCBcIjM4N1wiIF0sIFsgXCJCb3Rzd2FuYVwiLCBcImJ3XCIsIFwiMjY3XCIgXSwgWyBcIkJyYXppbCAoQnJhc2lsKVwiLCBcImJyXCIsIFwiNTVcIiBdLCBbIFwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5XCIsIFwiaW9cIiwgXCIyNDZcIiBdLCBbIFwiQnJpdGlzaCBWaXJnaW4gSXNsYW5kc1wiLCBcInZnXCIsIFwiMVwiLCAxMSwgWyBcIjI4NFwiIF0gXSwgWyBcIkJydW5laVwiLCBcImJuXCIsIFwiNjczXCIgXSwgWyBcIkJ1bGdhcmlhICjQkdGK0LvQs9Cw0YDQuNGPKVwiLCBcImJnXCIsIFwiMzU5XCIgXSwgWyBcIkJ1cmtpbmEgRmFzb1wiLCBcImJmXCIsIFwiMjI2XCIgXSwgWyBcIkJ1cnVuZGkgKFVidXJ1bmRpKVwiLCBcImJpXCIsIFwiMjU3XCIgXSwgWyBcIkNhbWJvZGlhICjhnoDhnpjhn5LhnpbhnrvhnofhnrYpXCIsIFwia2hcIiwgXCI4NTVcIiBdLCBbIFwiQ2FtZXJvb24gKENhbWVyb3VuKVwiLCBcImNtXCIsIFwiMjM3XCIgXSwgWyBcIkNhbmFkYVwiLCBcImNhXCIsIFwiMVwiLCAxLCBbIFwiMjA0XCIsIFwiMjI2XCIsIFwiMjM2XCIsIFwiMjQ5XCIsIFwiMjUwXCIsIFwiMjg5XCIsIFwiMzA2XCIsIFwiMzQzXCIsIFwiMzY1XCIsIFwiMzg3XCIsIFwiNDAzXCIsIFwiNDE2XCIsIFwiNDE4XCIsIFwiNDMxXCIsIFwiNDM3XCIsIFwiNDM4XCIsIFwiNDUwXCIsIFwiNTA2XCIsIFwiNTE0XCIsIFwiNTE5XCIsIFwiNTQ4XCIsIFwiNTc5XCIsIFwiNTgxXCIsIFwiNTg3XCIsIFwiNjA0XCIsIFwiNjEzXCIsIFwiNjM5XCIsIFwiNjQ3XCIsIFwiNjcyXCIsIFwiNzA1XCIsIFwiNzA5XCIsIFwiNzQyXCIsIFwiNzc4XCIsIFwiNzgwXCIsIFwiNzgyXCIsIFwiODA3XCIsIFwiODE5XCIsIFwiODI1XCIsIFwiODY3XCIsIFwiODczXCIsIFwiOTAyXCIsIFwiOTA1XCIgXSBdLCBbIFwiQ2FwZSBWZXJkZSAoS2FidSBWZXJkaSlcIiwgXCJjdlwiLCBcIjIzOFwiIF0sIFsgXCJDYXJpYmJlYW4gTmV0aGVybGFuZHNcIiwgXCJicVwiLCBcIjU5OVwiLCAxLCBbIFwiM1wiLCBcIjRcIiwgXCI3XCIgXSBdLCBbIFwiQ2F5bWFuIElzbGFuZHNcIiwgXCJreVwiLCBcIjFcIiwgMTIsIFsgXCIzNDVcIiBdIF0sIFsgXCJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMgKFLDqXB1YmxpcXVlIGNlbnRyYWZyaWNhaW5lKVwiLCBcImNmXCIsIFwiMjM2XCIgXSwgWyBcIkNoYWQgKFRjaGFkKVwiLCBcInRkXCIsIFwiMjM1XCIgXSwgWyBcIkNoaWxlXCIsIFwiY2xcIiwgXCI1NlwiIF0sIFsgXCJDaGluYSAo5Lit5Zu9KVwiLCBcImNuXCIsIFwiODZcIiBdLCBbIFwiQ2hyaXN0bWFzIElzbGFuZFwiLCBcImN4XCIsIFwiNjFcIiwgMiBdLCBbIFwiQ29jb3MgKEtlZWxpbmcpIElzbGFuZHNcIiwgXCJjY1wiLCBcIjYxXCIsIDEgXSwgWyBcIkNvbG9tYmlhXCIsIFwiY29cIiwgXCI1N1wiIF0sIFsgXCJDb21vcm9zICjigKvYrNiy2LEg2KfZhNmC2YXYseKArOKAjilcIiwgXCJrbVwiLCBcIjI2OVwiIF0sIFsgXCJDb25nbyAoRFJDKSAoSmFtaHVyaSB5YSBLaWRlbW9rcmFzaWEgeWEgS29uZ28pXCIsIFwiY2RcIiwgXCIyNDNcIiBdLCBbIFwiQ29uZ28gKFJlcHVibGljKSAoQ29uZ28tQnJhenphdmlsbGUpXCIsIFwiY2dcIiwgXCIyNDJcIiBdLCBbIFwiQ29vayBJc2xhbmRzXCIsIFwiY2tcIiwgXCI2ODJcIiBdLCBbIFwiQ29zdGEgUmljYVwiLCBcImNyXCIsIFwiNTA2XCIgXSwgWyBcIkPDtHRlIGTigJlJdm9pcmVcIiwgXCJjaVwiLCBcIjIyNVwiIF0sIFsgXCJDcm9hdGlhIChIcnZhdHNrYSlcIiwgXCJoclwiLCBcIjM4NVwiIF0sIFsgXCJDdWJhXCIsIFwiY3VcIiwgXCI1M1wiIF0sIFsgXCJDdXJhw6dhb1wiLCBcImN3XCIsIFwiNTk5XCIsIDAgXSwgWyBcIkN5cHJ1cyAozprPjc+Az4HOv8+CKVwiLCBcImN5XCIsIFwiMzU3XCIgXSwgWyBcIkN6ZWNoIFJlcHVibGljICjEjGVza8OhIHJlcHVibGlrYSlcIiwgXCJjelwiLCBcIjQyMFwiIF0sIFsgXCJEZW5tYXJrIChEYW5tYXJrKVwiLCBcImRrXCIsIFwiNDVcIiBdLCBbIFwiRGppYm91dGlcIiwgXCJkalwiLCBcIjI1M1wiIF0sIFsgXCJEb21pbmljYVwiLCBcImRtXCIsIFwiMVwiLCAxMywgWyBcIjc2N1wiIF0gXSwgWyBcIkRvbWluaWNhbiBSZXB1YmxpYyAoUmVww7pibGljYSBEb21pbmljYW5hKVwiLCBcImRvXCIsIFwiMVwiLCAyLCBbIFwiODA5XCIsIFwiODI5XCIsIFwiODQ5XCIgXSBdLCBbIFwiRWN1YWRvclwiLCBcImVjXCIsIFwiNTkzXCIgXSwgWyBcIkVneXB0ICjigKvZhdi12LHigKzigI4pXCIsIFwiZWdcIiwgXCIyMFwiIF0sIFsgXCJFbCBTYWx2YWRvclwiLCBcInN2XCIsIFwiNTAzXCIgXSwgWyBcIkVxdWF0b3JpYWwgR3VpbmVhIChHdWluZWEgRWN1YXRvcmlhbClcIiwgXCJncVwiLCBcIjI0MFwiIF0sIFsgXCJFcml0cmVhXCIsIFwiZXJcIiwgXCIyOTFcIiBdLCBbIFwiRXN0b25pYSAoRWVzdGkpXCIsIFwiZWVcIiwgXCIzNzJcIiBdLCBbIFwiRXRoaW9waWFcIiwgXCJldFwiLCBcIjI1MVwiIF0sIFsgXCJGYWxrbGFuZCBJc2xhbmRzIChJc2xhcyBNYWx2aW5hcylcIiwgXCJma1wiLCBcIjUwMFwiIF0sIFsgXCJGYXJvZSBJc2xhbmRzIChGw7hyb3lhcilcIiwgXCJmb1wiLCBcIjI5OFwiIF0sIFsgXCJGaWppXCIsIFwiZmpcIiwgXCI2NzlcIiBdLCBbIFwiRmlubGFuZCAoU3VvbWkpXCIsIFwiZmlcIiwgXCIzNThcIiwgMCBdLCBbIFwiRnJhbmNlXCIsIFwiZnJcIiwgXCIzM1wiIF0sIFsgXCJGcmVuY2ggR3VpYW5hIChHdXlhbmUgZnJhbsOnYWlzZSlcIiwgXCJnZlwiLCBcIjU5NFwiIF0sIFsgXCJGcmVuY2ggUG9seW5lc2lhIChQb2x5bsOpc2llIGZyYW7Dp2Fpc2UpXCIsIFwicGZcIiwgXCI2ODlcIiBdLCBbIFwiR2Fib25cIiwgXCJnYVwiLCBcIjI0MVwiIF0sIFsgXCJHYW1iaWFcIiwgXCJnbVwiLCBcIjIyMFwiIF0sIFsgXCJHZW9yZ2lhICjhg6Hhg5Dhg6Xhg5Dhg6Dhg5fhg5Xhg5Thg5rhg50pXCIsIFwiZ2VcIiwgXCI5OTVcIiBdLCBbIFwiR2VybWFueSAoRGV1dHNjaGxhbmQpXCIsIFwiZGVcIiwgXCI0OVwiIF0sIFsgXCJHaGFuYSAoR2FhbmEpXCIsIFwiZ2hcIiwgXCIyMzNcIiBdLCBbIFwiR2licmFsdGFyXCIsIFwiZ2lcIiwgXCIzNTBcIiBdLCBbIFwiR3JlZWNlICjOlc67zrvOrM60zrEpXCIsIFwiZ3JcIiwgXCIzMFwiIF0sIFsgXCJHcmVlbmxhbmQgKEthbGFhbGxpdCBOdW5hYXQpXCIsIFwiZ2xcIiwgXCIyOTlcIiBdLCBbIFwiR3JlbmFkYVwiLCBcImdkXCIsIFwiMVwiLCAxNCwgWyBcIjQ3M1wiIF0gXSwgWyBcIkd1YWRlbG91cGVcIiwgXCJncFwiLCBcIjU5MFwiLCAwIF0sIFsgXCJHdWFtXCIsIFwiZ3VcIiwgXCIxXCIsIDE1LCBbIFwiNjcxXCIgXSBdLCBbIFwiR3VhdGVtYWxhXCIsIFwiZ3RcIiwgXCI1MDJcIiBdLCBbIFwiR3Vlcm5zZXlcIiwgXCJnZ1wiLCBcIjQ0XCIsIDEsIFsgXCIxNDgxXCIsIFwiNzc4MVwiLCBcIjc4MzlcIiwgXCI3OTExXCIgXSBdLCBbIFwiR3VpbmVhIChHdWluw6llKVwiLCBcImduXCIsIFwiMjI0XCIgXSwgWyBcIkd1aW5lYS1CaXNzYXUgKEd1aW7DqSBCaXNzYXUpXCIsIFwiZ3dcIiwgXCIyNDVcIiBdLCBbIFwiR3V5YW5hXCIsIFwiZ3lcIiwgXCI1OTJcIiBdLCBbIFwiSGFpdGlcIiwgXCJodFwiLCBcIjUwOVwiIF0sIFsgXCJIb25kdXJhc1wiLCBcImhuXCIsIFwiNTA0XCIgXSwgWyBcIkhvbmcgS29uZyAo6aaZ5rivKVwiLCBcImhrXCIsIFwiODUyXCIgXSwgWyBcIkh1bmdhcnkgKE1hZ3lhcm9yc3rDoWcpXCIsIFwiaHVcIiwgXCIzNlwiIF0sIFsgXCJJY2VsYW5kICjDjXNsYW5kKVwiLCBcImlzXCIsIFwiMzU0XCIgXSwgWyBcIkluZGlhICjgpK3gpL7gpLDgpKQpXCIsIFwiaW5cIiwgXCI5MVwiIF0sIFsgXCJJbmRvbmVzaWFcIiwgXCJpZFwiLCBcIjYyXCIgXSwgWyBcIklyYW4gKOKAq9in24zYsdin2YbigKzigI4pXCIsIFwiaXJcIiwgXCI5OFwiIF0sIFsgXCJJcmFxICjigKvYp9mE2LnYsdin2YLigKzigI4pXCIsIFwiaXFcIiwgXCI5NjRcIiBdLCBbIFwiSXJlbGFuZFwiLCBcImllXCIsIFwiMzUzXCIgXSwgWyBcIklzbGUgb2YgTWFuXCIsIFwiaW1cIiwgXCI0NFwiLCAyLCBbIFwiMTYyNFwiLCBcIjc0NTc2XCIsIFwiNzUyNFwiLCBcIjc5MjRcIiwgXCI3NjI0XCIgXSBdLCBbIFwiSXNyYWVsICjigKvXmdep16jXkNec4oCs4oCOKVwiLCBcImlsXCIsIFwiOTcyXCIgXSwgWyBcIkl0YWx5IChJdGFsaWEpXCIsIFwiaXRcIiwgXCIzOVwiLCAwIF0sIFsgXCJKYW1haWNhXCIsIFwiam1cIiwgXCIxXCIsIDQsIFsgXCI4NzZcIiwgXCI2NThcIiBdIF0sIFsgXCJKYXBhbiAo5pel5pysKVwiLCBcImpwXCIsIFwiODFcIiBdLCBbIFwiSmVyc2V5XCIsIFwiamVcIiwgXCI0NFwiLCAzLCBbIFwiMTUzNFwiLCBcIjc1MDlcIiwgXCI3NzAwXCIsIFwiNzc5N1wiLCBcIjc4MjlcIiwgXCI3OTM3XCIgXSBdLCBbIFwiSm9yZGFuICjigKvYp9mE2KPYsdiv2YbigKzigI4pXCIsIFwiam9cIiwgXCI5NjJcIiBdLCBbIFwiS2F6YWtoc3RhbiAo0JrQsNC30LDRhdGB0YLQsNC9KVwiLCBcImt6XCIsIFwiN1wiLCAxLCBbIFwiMzNcIiwgXCI3XCIgXSBdLCBbIFwiS2VueWFcIiwgXCJrZVwiLCBcIjI1NFwiIF0sIFsgXCJLaXJpYmF0aVwiLCBcImtpXCIsIFwiNjg2XCIgXSwgWyBcIktvc292b1wiLCBcInhrXCIsIFwiMzgzXCIgXSwgWyBcIkt1d2FpdCAo4oCr2KfZhNmD2YjZitiq4oCs4oCOKVwiLCBcImt3XCIsIFwiOTY1XCIgXSwgWyBcIkt5cmd5enN0YW4gKNCa0YvRgNCz0YvQt9GB0YLQsNC9KVwiLCBcImtnXCIsIFwiOTk2XCIgXSwgWyBcIkxhb3MgKOC6peC6suC6pylcIiwgXCJsYVwiLCBcIjg1NlwiIF0sIFsgXCJMYXR2aWEgKExhdHZpamEpXCIsIFwibHZcIiwgXCIzNzFcIiBdLCBbIFwiTGViYW5vbiAo4oCr2YTYqNmG2KfZhuKArOKAjilcIiwgXCJsYlwiLCBcIjk2MVwiIF0sIFsgXCJMZXNvdGhvXCIsIFwibHNcIiwgXCIyNjZcIiBdLCBbIFwiTGliZXJpYVwiLCBcImxyXCIsIFwiMjMxXCIgXSwgWyBcIkxpYnlhICjigKvZhNmK2KjZitin4oCs4oCOKVwiLCBcImx5XCIsIFwiMjE4XCIgXSwgWyBcIkxpZWNodGVuc3RlaW5cIiwgXCJsaVwiLCBcIjQyM1wiIF0sIFsgXCJMaXRodWFuaWEgKExpZXR1dmEpXCIsIFwibHRcIiwgXCIzNzBcIiBdLCBbIFwiTHV4ZW1ib3VyZ1wiLCBcImx1XCIsIFwiMzUyXCIgXSwgWyBcIk1hY2F1ICjmvrPploApXCIsIFwibW9cIiwgXCI4NTNcIiBdLCBbIFwiTWFjZWRvbmlhIChGWVJPTSkgKNCc0LDQutC10LTQvtC90LjRmNCwKVwiLCBcIm1rXCIsIFwiMzg5XCIgXSwgWyBcIk1hZGFnYXNjYXIgKE1hZGFnYXNpa2FyYSlcIiwgXCJtZ1wiLCBcIjI2MVwiIF0sIFsgXCJNYWxhd2lcIiwgXCJtd1wiLCBcIjI2NVwiIF0sIFsgXCJNYWxheXNpYVwiLCBcIm15XCIsIFwiNjBcIiBdLCBbIFwiTWFsZGl2ZXNcIiwgXCJtdlwiLCBcIjk2MFwiIF0sIFsgXCJNYWxpXCIsIFwibWxcIiwgXCIyMjNcIiBdLCBbIFwiTWFsdGFcIiwgXCJtdFwiLCBcIjM1NlwiIF0sIFsgXCJNYXJzaGFsbCBJc2xhbmRzXCIsIFwibWhcIiwgXCI2OTJcIiBdLCBbIFwiTWFydGluaXF1ZVwiLCBcIm1xXCIsIFwiNTk2XCIgXSwgWyBcIk1hdXJpdGFuaWEgKOKAq9mF2YjYsdmK2KrYp9mG2YrYp+KArOKAjilcIiwgXCJtclwiLCBcIjIyMlwiIF0sIFsgXCJNYXVyaXRpdXMgKE1vcmlzKVwiLCBcIm11XCIsIFwiMjMwXCIgXSwgWyBcIk1heW90dGVcIiwgXCJ5dFwiLCBcIjI2MlwiLCAxLCBbIFwiMjY5XCIsIFwiNjM5XCIgXSBdLCBbIFwiTWV4aWNvIChNw6l4aWNvKVwiLCBcIm14XCIsIFwiNTJcIiBdLCBbIFwiTWljcm9uZXNpYVwiLCBcImZtXCIsIFwiNjkxXCIgXSwgWyBcIk1vbGRvdmEgKFJlcHVibGljYSBNb2xkb3ZhKVwiLCBcIm1kXCIsIFwiMzczXCIgXSwgWyBcIk1vbmFjb1wiLCBcIm1jXCIsIFwiMzc3XCIgXSwgWyBcIk1vbmdvbGlhICjQnNC+0L3Qs9C+0LspXCIsIFwibW5cIiwgXCI5NzZcIiBdLCBbIFwiTW9udGVuZWdybyAoQ3JuYSBHb3JhKVwiLCBcIm1lXCIsIFwiMzgyXCIgXSwgWyBcIk1vbnRzZXJyYXRcIiwgXCJtc1wiLCBcIjFcIiwgMTYsIFsgXCI2NjRcIiBdIF0sIFsgXCJNb3JvY2NvICjigKvYp9mE2YXYutix2KjigKzigI4pXCIsIFwibWFcIiwgXCIyMTJcIiwgMCBdLCBbIFwiTW96YW1iaXF1ZSAoTW/Dp2FtYmlxdWUpXCIsIFwibXpcIiwgXCIyNThcIiBdLCBbIFwiTXlhbm1hciAoQnVybWEpICjhgJnhgLzhgJThgLrhgJnhgKwpXCIsIFwibW1cIiwgXCI5NVwiIF0sIFsgXCJOYW1pYmlhIChOYW1pYmnDqylcIiwgXCJuYVwiLCBcIjI2NFwiIF0sIFsgXCJOYXVydVwiLCBcIm5yXCIsIFwiNjc0XCIgXSwgWyBcIk5lcGFsICjgpKjgpYfgpKrgpL7gpLIpXCIsIFwibnBcIiwgXCI5NzdcIiBdLCBbIFwiTmV0aGVybGFuZHMgKE5lZGVybGFuZClcIiwgXCJubFwiLCBcIjMxXCIgXSwgWyBcIk5ldyBDYWxlZG9uaWEgKE5vdXZlbGxlLUNhbMOpZG9uaWUpXCIsIFwibmNcIiwgXCI2ODdcIiBdLCBbIFwiTmV3IFplYWxhbmRcIiwgXCJuelwiLCBcIjY0XCIgXSwgWyBcIk5pY2FyYWd1YVwiLCBcIm5pXCIsIFwiNTA1XCIgXSwgWyBcIk5pZ2VyIChOaWphcilcIiwgXCJuZVwiLCBcIjIyN1wiIF0sIFsgXCJOaWdlcmlhXCIsIFwibmdcIiwgXCIyMzRcIiBdLCBbIFwiTml1ZVwiLCBcIm51XCIsIFwiNjgzXCIgXSwgWyBcIk5vcmZvbGsgSXNsYW5kXCIsIFwibmZcIiwgXCI2NzJcIiBdLCBbIFwiTm9ydGggS29yZWEgKOyhsOyEoCDrr7zso7zso7zsnZgg7J2466+8IOqzte2ZlOq1rSlcIiwgXCJrcFwiLCBcIjg1MFwiIF0sIFsgXCJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHNcIiwgXCJtcFwiLCBcIjFcIiwgMTcsIFsgXCI2NzBcIiBdIF0sIFsgXCJOb3J3YXkgKE5vcmdlKVwiLCBcIm5vXCIsIFwiNDdcIiwgMCBdLCBbIFwiT21hbiAo4oCr2LnZj9mF2KfZhuKArOKAjilcIiwgXCJvbVwiLCBcIjk2OFwiIF0sIFsgXCJQYWtpc3RhbiAo4oCr2b7Yp9qp2LPYqtin2YbigKzigI4pXCIsIFwicGtcIiwgXCI5MlwiIF0sIFsgXCJQYWxhdVwiLCBcInB3XCIsIFwiNjgwXCIgXSwgWyBcIlBhbGVzdGluZSAo4oCr2YHZhNiz2LfZitmG4oCs4oCOKVwiLCBcInBzXCIsIFwiOTcwXCIgXSwgWyBcIlBhbmFtYSAoUGFuYW3DoSlcIiwgXCJwYVwiLCBcIjUwN1wiIF0sIFsgXCJQYXB1YSBOZXcgR3VpbmVhXCIsIFwicGdcIiwgXCI2NzVcIiBdLCBbIFwiUGFyYWd1YXlcIiwgXCJweVwiLCBcIjU5NVwiIF0sIFsgXCJQZXJ1IChQZXLDuilcIiwgXCJwZVwiLCBcIjUxXCIgXSwgWyBcIlBoaWxpcHBpbmVzXCIsIFwicGhcIiwgXCI2M1wiIF0sIFsgXCJQb2xhbmQgKFBvbHNrYSlcIiwgXCJwbFwiLCBcIjQ4XCIgXSwgWyBcIlBvcnR1Z2FsXCIsIFwicHRcIiwgXCIzNTFcIiBdLCBbIFwiUHVlcnRvIFJpY29cIiwgXCJwclwiLCBcIjFcIiwgMywgWyBcIjc4N1wiLCBcIjkzOVwiIF0gXSwgWyBcIlFhdGFyICjigKvZgti32LHigKzigI4pXCIsIFwicWFcIiwgXCI5NzRcIiBdLCBbIFwiUsOpdW5pb24gKExhIFLDqXVuaW9uKVwiLCBcInJlXCIsIFwiMjYyXCIsIDAgXSwgWyBcIlJvbWFuaWEgKFJvbcOibmlhKVwiLCBcInJvXCIsIFwiNDBcIiBdLCBbIFwiUnVzc2lhICjQoNC+0YHRgdC40Y8pXCIsIFwicnVcIiwgXCI3XCIsIDAgXSwgWyBcIlJ3YW5kYVwiLCBcInJ3XCIsIFwiMjUwXCIgXSwgWyBcIlNhaW50IEJhcnRow6lsZW15XCIsIFwiYmxcIiwgXCI1OTBcIiwgMSBdLCBbIFwiU2FpbnQgSGVsZW5hXCIsIFwic2hcIiwgXCIyOTBcIiBdLCBbIFwiU2FpbnQgS2l0dHMgYW5kIE5ldmlzXCIsIFwia25cIiwgXCIxXCIsIDE4LCBbIFwiODY5XCIgXSBdLCBbIFwiU2FpbnQgTHVjaWFcIiwgXCJsY1wiLCBcIjFcIiwgMTksIFsgXCI3NThcIiBdIF0sIFsgXCJTYWludCBNYXJ0aW4gKFNhaW50LU1hcnRpbiAocGFydGllIGZyYW7Dp2Fpc2UpKVwiLCBcIm1mXCIsIFwiNTkwXCIsIDIgXSwgWyBcIlNhaW50IFBpZXJyZSBhbmQgTWlxdWVsb24gKFNhaW50LVBpZXJyZS1ldC1NaXF1ZWxvbilcIiwgXCJwbVwiLCBcIjUwOFwiIF0sIFsgXCJTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lc1wiLCBcInZjXCIsIFwiMVwiLCAyMCwgWyBcIjc4NFwiIF0gXSwgWyBcIlNhbW9hXCIsIFwid3NcIiwgXCI2ODVcIiBdLCBbIFwiU2FuIE1hcmlub1wiLCBcInNtXCIsIFwiMzc4XCIgXSwgWyBcIlPDo28gVG9tw6kgYW5kIFByw61uY2lwZSAoU8OjbyBUb23DqSBlIFByw61uY2lwZSlcIiwgXCJzdFwiLCBcIjIzOVwiIF0sIFsgXCJTYXVkaSBBcmFiaWEgKOKAq9in2YTZhdmF2YTZg9ipINin2YTYudix2KjZitipINin2YTYs9i52YjYr9mK2KnigKzigI4pXCIsIFwic2FcIiwgXCI5NjZcIiBdLCBbIFwiU2VuZWdhbCAoU8OpbsOpZ2FsKVwiLCBcInNuXCIsIFwiMjIxXCIgXSwgWyBcIlNlcmJpYSAo0KHRgNCx0LjRmNCwKVwiLCBcInJzXCIsIFwiMzgxXCIgXSwgWyBcIlNleWNoZWxsZXNcIiwgXCJzY1wiLCBcIjI0OFwiIF0sIFsgXCJTaWVycmEgTGVvbmVcIiwgXCJzbFwiLCBcIjIzMlwiIF0sIFsgXCJTaW5nYXBvcmVcIiwgXCJzZ1wiLCBcIjY1XCIgXSwgWyBcIlNpbnQgTWFhcnRlblwiLCBcInN4XCIsIFwiMVwiLCAyMSwgWyBcIjcyMVwiIF0gXSwgWyBcIlNsb3Zha2lhIChTbG92ZW5za28pXCIsIFwic2tcIiwgXCI0MjFcIiBdLCBbIFwiU2xvdmVuaWEgKFNsb3ZlbmlqYSlcIiwgXCJzaVwiLCBcIjM4NlwiIF0sIFsgXCJTb2xvbW9uIElzbGFuZHNcIiwgXCJzYlwiLCBcIjY3N1wiIF0sIFsgXCJTb21hbGlhIChTb29tYWFsaXlhKVwiLCBcInNvXCIsIFwiMjUyXCIgXSwgWyBcIlNvdXRoIEFmcmljYVwiLCBcInphXCIsIFwiMjdcIiBdLCBbIFwiU291dGggS29yZWEgKOuMgO2VnOuvvOq1rSlcIiwgXCJrclwiLCBcIjgyXCIgXSwgWyBcIlNvdXRoIFN1ZGFuICjigKvYrNmG2YjYqCDYp9mE2LPZiNiv2KfZhuKArOKAjilcIiwgXCJzc1wiLCBcIjIxMVwiIF0sIFsgXCJTcGFpbiAoRXNwYcOxYSlcIiwgXCJlc1wiLCBcIjM0XCIgXSwgWyBcIlNyaSBMYW5rYSAo4LeB4LeK4oCN4La74LeTIOC2veC2guC2muC3j+C3gClcIiwgXCJsa1wiLCBcIjk0XCIgXSwgWyBcIlN1ZGFuICjigKvYp9mE2LPZiNiv2KfZhuKArOKAjilcIiwgXCJzZFwiLCBcIjI0OVwiIF0sIFsgXCJTdXJpbmFtZVwiLCBcInNyXCIsIFwiNTk3XCIgXSwgWyBcIlN2YWxiYXJkIGFuZCBKYW4gTWF5ZW5cIiwgXCJzalwiLCBcIjQ3XCIsIDEsIFsgXCI3OVwiIF0gXSwgWyBcIlN3YXppbGFuZFwiLCBcInN6XCIsIFwiMjY4XCIgXSwgWyBcIlN3ZWRlbiAoU3ZlcmlnZSlcIiwgXCJzZVwiLCBcIjQ2XCIgXSwgWyBcIlN3aXR6ZXJsYW5kIChTY2h3ZWl6KVwiLCBcImNoXCIsIFwiNDFcIiBdLCBbIFwiU3lyaWEgKOKAq9iz2YjYsdmK2KfigKzigI4pXCIsIFwic3lcIiwgXCI5NjNcIiBdLCBbIFwiVGFpd2FuICjlj7DngaMpXCIsIFwidHdcIiwgXCI4ODZcIiBdLCBbIFwiVGFqaWtpc3RhblwiLCBcInRqXCIsIFwiOTkyXCIgXSwgWyBcIlRhbnphbmlhXCIsIFwidHpcIiwgXCIyNTVcIiBdLCBbIFwiVGhhaWxhbmQgKOC5hOC4l+C4oilcIiwgXCJ0aFwiLCBcIjY2XCIgXSwgWyBcIlRpbW9yLUxlc3RlXCIsIFwidGxcIiwgXCI2NzBcIiBdLCBbIFwiVG9nb1wiLCBcInRnXCIsIFwiMjI4XCIgXSwgWyBcIlRva2VsYXVcIiwgXCJ0a1wiLCBcIjY5MFwiIF0sIFsgXCJUb25nYVwiLCBcInRvXCIsIFwiNjc2XCIgXSwgWyBcIlRyaW5pZGFkIGFuZCBUb2JhZ29cIiwgXCJ0dFwiLCBcIjFcIiwgMjIsIFsgXCI4NjhcIiBdIF0sIFsgXCJUdW5pc2lhICjigKvYqtmI2YbYs+KArOKAjilcIiwgXCJ0blwiLCBcIjIxNlwiIF0sIFsgXCJUdXJrZXkgKFTDvHJraXllKVwiLCBcInRyXCIsIFwiOTBcIiBdLCBbIFwiVHVya21lbmlzdGFuXCIsIFwidG1cIiwgXCI5OTNcIiBdLCBbIFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXCIsIFwidGNcIiwgXCIxXCIsIDIzLCBbIFwiNjQ5XCIgXSBdLCBbIFwiVHV2YWx1XCIsIFwidHZcIiwgXCI2ODhcIiBdLCBbIFwiVS5TLiBWaXJnaW4gSXNsYW5kc1wiLCBcInZpXCIsIFwiMVwiLCAyNCwgWyBcIjM0MFwiIF0gXSwgWyBcIlVnYW5kYVwiLCBcInVnXCIsIFwiMjU2XCIgXSwgWyBcIlVrcmFpbmUgKNCj0LrRgNCw0ZfQvdCwKVwiLCBcInVhXCIsIFwiMzgwXCIgXSwgWyBcIlVuaXRlZCBBcmFiIEVtaXJhdGVzICjigKvYp9mE2KXZhdin2LHYp9iqINin2YTYudix2KjZitipINin2YTZhdiq2K3Yr9ip4oCs4oCOKVwiLCBcImFlXCIsIFwiOTcxXCIgXSwgWyBcIlVuaXRlZCBLaW5nZG9tXCIsIFwiZ2JcIiwgXCI0NFwiLCAwIF0sIFsgXCJVbml0ZWQgU3RhdGVzXCIsIFwidXNcIiwgXCIxXCIsIDAgXSwgWyBcIlVydWd1YXlcIiwgXCJ1eVwiLCBcIjU5OFwiIF0sIFsgXCJVemJla2lzdGFuIChPyrt6YmVraXN0b24pXCIsIFwidXpcIiwgXCI5OThcIiBdLCBbIFwiVmFudWF0dVwiLCBcInZ1XCIsIFwiNjc4XCIgXSwgWyBcIlZhdGljYW4gQ2l0eSAoQ2l0dMOgIGRlbCBWYXRpY2FubylcIiwgXCJ2YVwiLCBcIjM5XCIsIDEsIFsgXCIwNjY5OFwiIF0gXSwgWyBcIlZlbmV6dWVsYVwiLCBcInZlXCIsIFwiNThcIiBdLCBbIFwiVmlldG5hbSAoVmnhu4d0IE5hbSlcIiwgXCJ2blwiLCBcIjg0XCIgXSwgWyBcIldhbGxpcyBhbmQgRnV0dW5hIChXYWxsaXMtZXQtRnV0dW5hKVwiLCBcIndmXCIsIFwiNjgxXCIgXSwgWyBcIldlc3Rlcm4gU2FoYXJhICjigKvYp9mE2LXYrdix2KfYoSDYp9mE2LrYsdio2YrYqeKArOKAjilcIiwgXCJlaFwiLCBcIjIxMlwiLCAxLCBbIFwiNTI4OFwiLCBcIjUyODlcIiBdIF0sIFsgXCJZZW1lbiAo4oCr2KfZhNmK2YXZhuKArOKAjilcIiwgXCJ5ZVwiLCBcIjk2N1wiIF0sIFsgXCJaYW1iaWFcIiwgXCJ6bVwiLCBcIjI2MFwiIF0sIFsgXCJaaW1iYWJ3ZVwiLCBcInp3XCIsIFwiMjYzXCIgXSwgWyBcIsOFbGFuZCBJc2xhbmRzXCIsIFwiYXhcIiwgXCIzNThcIiwgMSwgWyBcIjE4XCIgXSBdIF07XG4gICAgICAgIC8vIGxvb3Agb3ZlciBhbGwgb2YgdGhlIGNvdW50cmllcyBhYm92ZSwgcmVzdHJ1Y3R1cmluZyB0aGUgZGF0YSB0byBiZSBvYmplY3RzIHdpdGggbmFtZWQga2V5c1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbENvdW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGMgPSBhbGxDb3VudHJpZXNbaV07XG4gICAgICAgICAgICBhbGxDb3VudHJpZXNbaV0gPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogY1swXSxcbiAgICAgICAgICAgICAgICBpc28yOiBjWzFdLFxuICAgICAgICAgICAgICAgIGRpYWxDb2RlOiBjWzJdLFxuICAgICAgICAgICAgICAgIHByaW9yaXR5OiBjWzNdIHx8IDAsXG4gICAgICAgICAgICAgICAgYXJlYUNvZGVzOiBjWzRdIHx8IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICAgICAgICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgICAgICAgICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbnRsVGVsSW5wdXRHbG9iYWxzID0ge1xuICAgICAgICAgICAgZ2V0SW5zdGFuY2U6IGZ1bmN0aW9uIGdldEluc3RhbmNlKGlucHV0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGlkID0gaW5wdXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1pbnRsLXRlbC1pbnB1dC1pZFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMuaW5zdGFuY2VzW2lkXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbnN0YW5jZXM6IHt9XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSB3aW5kb3cuaW50bFRlbElucHV0R2xvYmFscyA9IGludGxUZWxJbnB1dEdsb2JhbHM7XG4gICAgICAgIC8vIHRoZXNlIHZhcnMgcGVyc2lzdCB0aHJvdWdoIGFsbCBpbnN0YW5jZXMgb2YgdGhlIHBsdWdpblxuICAgICAgICB2YXIgaWQgPSAwO1xuICAgICAgICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICAvLyB3aGV0aGVyIG9yIG5vdCB0byBhbGxvdyB0aGUgZHJvcGRvd25cbiAgICAgICAgICAgIGFsbG93RHJvcGRvd246IHRydWUsXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBqdXN0IGEgZGlhbCBjb2RlIGluIHRoZSBpbnB1dDogcmVtb3ZlIGl0IG9uIGJsdXJcbiAgICAgICAgICAgIGF1dG9IaWRlRGlhbENvZGU6IHRydWUsXG4gICAgICAgICAgICAvLyBhZGQgYSBwbGFjZWhvbGRlciBpbiB0aGUgaW5wdXQgd2l0aCBhbiBleGFtcGxlIG51bWJlciBmb3IgdGhlIHNlbGVjdGVkIGNvdW50cnlcbiAgICAgICAgICAgIGF1dG9QbGFjZWhvbGRlcjogXCJwb2xpdGVcIixcbiAgICAgICAgICAgIC8vIG1vZGlmeSB0aGUgcGFyZW50Q2xhc3NcbiAgICAgICAgICAgIGN1c3RvbUNvbnRhaW5lcjogXCJcIixcbiAgICAgICAgICAgIC8vIG1vZGlmeSB0aGUgYXV0byBwbGFjZWhvbGRlclxuICAgICAgICAgICAgY3VzdG9tUGxhY2Vob2xkZXI6IG51bGwsXG4gICAgICAgICAgICAvLyBhcHBlbmQgbWVudSB0byBzcGVjaWZpZWQgZWxlbWVudFxuICAgICAgICAgICAgZHJvcGRvd25Db250YWluZXI6IG51bGwsXG4gICAgICAgICAgICAvLyBkb24ndCBkaXNwbGF5IHRoZXNlIGNvdW50cmllc1xuICAgICAgICAgICAgZXhjbHVkZUNvdW50cmllczogW10sXG4gICAgICAgICAgICAvLyBmb3JtYXQgdGhlIGlucHV0IHZhbHVlIGR1cmluZyBpbml0aWFsaXNhdGlvbiBhbmQgb24gc2V0TnVtYmVyXG4gICAgICAgICAgICBmb3JtYXRPbkRpc3BsYXk6IHRydWUsXG4gICAgICAgICAgICAvLyBnZW9JcCBsb29rdXAgZnVuY3Rpb25cbiAgICAgICAgICAgIGdlb0lwTG9va3VwOiBudWxsLFxuICAgICAgICAgICAgLy8gaW5qZWN0IGEgaGlkZGVuIGlucHV0IHdpdGggdGhpcyBuYW1lLCBhbmQgb24gc3VibWl0LCBwb3B1bGF0ZSBpdCB3aXRoIHRoZSByZXN1bHQgb2YgZ2V0TnVtYmVyXG4gICAgICAgICAgICBoaWRkZW5JbnB1dDogXCJcIixcbiAgICAgICAgICAgIC8vIGluaXRpYWwgY291bnRyeVxuICAgICAgICAgICAgaW5pdGlhbENvdW50cnk6IFwiXCIsXG4gICAgICAgICAgICAvLyBsb2NhbGl6ZWQgY291bnRyeSBuYW1lcyBlLmcuIHsgJ2RlJzogJ0RldXRzY2hsYW5kJyB9XG4gICAgICAgICAgICBsb2NhbGl6ZWRDb3VudHJpZXM6IG51bGwsXG4gICAgICAgICAgICAvLyBkb24ndCBpbnNlcnQgaW50ZXJuYXRpb25hbCBkaWFsIGNvZGVzXG4gICAgICAgICAgICBuYXRpb25hbE1vZGU6IHRydWUsXG4gICAgICAgICAgICAvLyBkaXNwbGF5IG9ubHkgdGhlc2UgY291bnRyaWVzXG4gICAgICAgICAgICBvbmx5Q291bnRyaWVzOiBbXSxcbiAgICAgICAgICAgIC8vIG51bWJlciB0eXBlIHRvIHVzZSBmb3IgcGxhY2Vob2xkZXJzXG4gICAgICAgICAgICBwbGFjZWhvbGRlck51bWJlclR5cGU6IFwiTU9CSUxFXCIsXG4gICAgICAgICAgICAvLyB0aGUgY291bnRyaWVzIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3QuIGRlZmF1bHRzIHRvIHVuaXRlZCBzdGF0ZXMgYW5kIHVuaXRlZCBraW5nZG9tXG4gICAgICAgICAgICBwcmVmZXJyZWRDb3VudHJpZXM6IFsgXCJ1c1wiLCBcImdiXCIgXSxcbiAgICAgICAgICAgIC8vIGRpc3BsYXkgdGhlIGNvdW50cnkgZGlhbCBjb2RlIG5leHQgdG8gdGhlIHNlbGVjdGVkIGZsYWcgc28gaXQncyBub3QgcGFydCBvZiB0aGUgdHlwZWQgbnVtYmVyXG4gICAgICAgICAgICBzZXBhcmF0ZURpYWxDb2RlOiBmYWxzZSxcbiAgICAgICAgICAgIC8vIHNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIGxpYnBob25lbnVtYmVyIHNjcmlwdCB0byBlbmFibGUgdmFsaWRhdGlvbi9mb3JtYXR0aW5nXG4gICAgICAgICAgICB1dGlsc1NjcmlwdDogXCJcIlxuICAgICAgICB9O1xuICAgICAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX05vcnRoX0FtZXJpY2FuX051bWJlcmluZ19QbGFuX2FyZWFfY29kZXMjTm9uLWdlb2dyYXBoaWNfYXJlYV9jb2Rlc1xuICAgICAgICB2YXIgcmVnaW9ubGVzc05hbnBOdW1iZXJzID0gWyBcIjgwMFwiLCBcIjgyMlwiLCBcIjgzM1wiLCBcIjg0NFwiLCBcIjg1NVwiLCBcIjg2NlwiLCBcIjg3N1wiLCBcIjg4MFwiLCBcIjg4MVwiLCBcIjg4MlwiLCBcIjg4M1wiLCBcIjg4NFwiLCBcIjg4NVwiLCBcIjg4NlwiLCBcIjg4N1wiLCBcIjg4OFwiLCBcIjg4OVwiIF07XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAvLyBrZWVwIHRyYWNrIG9mIGlmIHRoZSB3aW5kb3cubG9hZCBldmVudCBoYXMgZmlyZWQgYXMgaW1wb3NzaWJsZSB0byBjaGVjayBhZnRlciB0aGUgZmFjdFxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIC8vIFVQREFURTogdXNlIGEgcHVibGljIHN0YXRpYyBmaWVsZCBzbyB3ZSBjYW4gZnVkZ2UgaXQgaW4gdGhlIHRlc3RzXG4gICAgICAgICAgICAgICAgd2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMud2luZG93TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIHV0aWxpdHkgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGFuIG9iamVjdC4gY2FuJ3QgdXNlIE9iamVjdC5lbnRyaWVzIG9yIG5hdGl2ZSBmb3JFYWNoIGJlY2F1c2VcbiAgICAgICAgLy8gb2YgSUUxMVxuICAgICAgICB2YXIgZm9yRWFjaFByb3AgPSBmdW5jdGlvbiBmb3JFYWNoUHJvcChvYmosIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhrZXlzW2ldLCBvYmpba2V5c1tpXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBydW4gYSBtZXRob2Qgb24gZWFjaCBpbnN0YW5jZSBvZiB0aGUgcGx1Z2luXG4gICAgICAgIHZhciBmb3JFYWNoSW5zdGFuY2UgPSBmdW5jdGlvbiBmb3JFYWNoSW5zdGFuY2UobWV0aG9kKSB7XG4gICAgICAgICAgICBmb3JFYWNoUHJvcCh3aW5kb3cuaW50bFRlbElucHV0R2xvYmFscy5pbnN0YW5jZXMsIGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5pbnRsVGVsSW5wdXRHbG9iYWxzLmluc3RhbmNlc1trZXldW21ldGhvZF0oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvLyB0aGlzIGlzIG91ciBwbHVnaW4gY2xhc3MgdGhhdCB3ZSB3aWxsIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgICAgdmFyIEl0aSA9IC8qI19fUFVSRV9fKi9cbiAgICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBJdGkoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJdGkpO1xuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSBpZCsrO1xuICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQgPSBpbnB1dDtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUl0ZW0gPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gbnVsbDtcbiAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIHNwZWNpZmllZCBvcHRpb25zIC8gZGVmYXVsdHNcbiAgICAgICAgICAgICAgICAvLyBhbHRlcm5hdGl2ZSB0byBPYmplY3QuYXNzaWduLCB3aGljaCBpc24ndCBzdXBwb3J0ZWQgYnkgSUUxMVxuICAgICAgICAgICAgICAgIHZhciBjdXN0b21PcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICBmb3JFYWNoUHJvcChkZWZhdWx0cywgZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5vcHRpb25zW2tleV0gPSBjdXN0b21PcHRpb25zLmhhc093blByb3BlcnR5KGtleSkgPyBjdXN0b21PcHRpb25zW2tleV0gOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhZEluaXRpYWxQbGFjZWhvbGRlciA9IEJvb2xlYW4oaW5wdXQuZ2V0QXR0cmlidXRlKFwicGxhY2Vob2xkZXJcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEl0aSwgWyB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9pbml0XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9pbml0KCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgaW4gbmF0aW9uYWxNb2RlLCBkaXNhYmxlIG9wdGlvbnMgcmVsYXRpbmcgdG8gZGlhbCBjb2Rlc1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLm5hdGlvbmFsTW9kZSkgdGhpcy5vcHRpb25zLmF1dG9IaWRlRGlhbENvZGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgc2VwYXJhdGVEaWFsQ29kZSB0aGVuIGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBBKSBpbnNlcnQgZGlhbCBjb2RlIGludG8gaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgLy8gKGF1dG9IaWRlRGlhbENvZGUpLCBhbmQgQikgZGlzcGxheSBuYXRpb25hbCBudW1iZXJzIChiZWNhdXNlIHdlJ3JlIGRpc3BsYXlpbmcgdGhlIGNvdW50cnlcbiAgICAgICAgICAgICAgICAgICAgLy8gZGlhbCBjb2RlIG5leHQgdG8gdGhlbSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZXBhcmF0ZURpYWxDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuYXV0b0hpZGVEaWFsQ29kZSA9IHRoaXMub3B0aW9ucy5uYXRpb25hbE1vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjYW5ub3QganVzdCB0ZXN0IHNjcmVlbiBzaXplIGFzIHNvbWUgc21hcnRwaG9uZXMvd2Vic2l0ZSBtZXRhIHRhZ3Mgd2lsbCByZXBvcnQgZGVza3RvcFxuICAgICAgICAgICAgICAgICAgICAvLyByZXNvbHV0aW9uc1xuICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiBmb3Igc29tZSByZWFzb24gamFzbWluZSBicmVha3MgaWYgeW91IHB1dCB0aGlzIGluIHRoZSBtYWluIFBsdWdpbiBmdW5jdGlvbiB3aXRoIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyByZXN0IG9mIHRoZXNlIGRlY2xhcmF0aW9uc1xuICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiB0byB0YXJnZXQgQW5kcm9pZCBNb2JpbGVzIChhbmQgbm90IFRhYmxldHMpLCB3ZSBtdXN0IGZpbmQgJ0FuZHJvaWQnIGFuZCAnTW9iaWxlJ1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTW9iaWxlID0gL0FuZHJvaWQuK01vYmlsZXx3ZWJPU3xpUGhvbmV8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc01vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJpZ2dlciB0aGUgbW9iaWxlIGRyb3Bkb3duIGNzc1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiaXRpLW1vYmlsZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9uIG1vYmlsZSwgd2Ugd2FudCBhIGZ1bGwgc2NyZWVuIGRyb3Bkb3duLCBzbyB3ZSBtdXN0IGFwcGVuZCBpdCB0byB0aGUgYm9keVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZHJvcGRvd25Db250YWluZXIpIHRoaXMub3B0aW9ucy5kcm9wZG93bkNvbnRhaW5lciA9IGRvY3VtZW50LmJvZHk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2UgcHJvbWlzZXMgZ2V0IHJlc29sdmVkIHdoZW4gdGhlaXIgaW5kaXZpZHVhbCByZXF1ZXN0cyBjb21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHdheSB0aGUgZGV2IGNhbiBkbyBzb21ldGhpbmcgbGlrZSBpdGkucHJvbWlzZS50aGVuKC4uLikgdG8ga25vdyB3aGVuIGFsbCByZXF1ZXN0cyBhcmVcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBQcm9taXNlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXV0b0NvdW50cnlQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLnJlc29sdmVBdXRvQ291bnRyeVByb21pc2UgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5yZWplY3RBdXRvQ291bnRyeVByb21pc2UgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1dGlsc1NjcmlwdFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIucmVzb2x2ZVV0aWxzU2NyaXB0UHJvbWlzZSA9IHJlc29sdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLnJlamVjdFV0aWxzU2NyaXB0UHJvbWlzZSA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlID0gUHJvbWlzZS5hbGwoWyBhdXRvQ291bnRyeVByb21pc2UsIHV0aWxzU2NyaXB0UHJvbWlzZSBdKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZXJyb3JzIHdoZW4gUHJvbWlzZSBkb2Vzbid0IGV4aXN0XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVBdXRvQ291bnRyeVByb21pc2UgPSB0aGlzLnJlamVjdEF1dG9Db3VudHJ5UHJvbWlzZSA9IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVVdGlsc1NjcmlwdFByb21pc2UgPSB0aGlzLnJlamVjdFV0aWxzU2NyaXB0UHJvbWlzZSA9IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gdmFyaW91cyBzaXR1YXRpb25zIHRoZXJlIGNvdWxkIGJlIG5vIGNvdW50cnkgc2VsZWN0ZWQgaW5pdGlhbGx5LCBidXQgd2UgbmVlZCB0byBiZSBhYmxlXG4gICAgICAgICAgICAgICAgICAgIC8vIHRvIGFzc3VtZSB0aGlzIHZhcmlhYmxlIGV4aXN0c1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJvY2VzcyBhbGwgdGhlIGRhdGE6IG9ubHlDb3VudHJpZXMsIGV4Y2x1ZGVDb3VudHJpZXMsIHByZWZlcnJlZENvdW50cmllcyBldGNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0NvdW50cnlEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlIHRoZSBtYXJrdXBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVNYXJrdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBpbnB1dCB2YWx1ZSBhbmQgdGhlIHNlbGVjdGVkIGZsYWdcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGFsbCBvZiB0aGUgZXZlbnQgbGlzdGVuZXJzOiBhdXRvSGlkZURpYWxDb2RlLCBpbnB1dCBrZXlkb3duLCBzZWxlY3RlZEZsYWcgY2xpY2tcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdExpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgICAgICAvLyB1dGlscyBzY3JpcHQsIGFuZCBhdXRvIGNvdW50cnlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdFJlcXVlc3RzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfcHJvY2Vzc0NvdW50cnlEYXRhXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9wcm9jZXNzQ291bnRyeURhdGEoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHByb2Nlc3Mgb25seUNvdW50cmllcyBvciBleGNsdWRlQ291bnRyaWVzIGFycmF5IGlmIHByZXNlbnRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0FsbENvdW50cmllcygpO1xuICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIHRoZSBjb3VudHJ5Q29kZXMgbWFwXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NDb3VudHJ5Q29kZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJvY2VzcyB0aGUgcHJlZmVycmVkQ291bnRyaWVzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NQcmVmZXJyZWRDb3VudHJpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNsYXRlIGNvdW50cmllcyBhY2NvcmRpbmcgdG8gbG9jYWxpemVkQ291bnRyaWVzIG9wdGlvblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvY2FsaXplZENvdW50cmllcykgdGhpcy5fdHJhbnNsYXRlQ291bnRyaWVzQnlMb2NhbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc29ydCBjb3VudHJpZXMgYnkgbmFtZVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9ubHlDb3VudHJpZXMubGVuZ3RoIHx8IHRoaXMub3B0aW9ucy5sb2NhbGl6ZWRDb3VudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRyaWVzLnNvcnQodGhpcy5fY291bnRyeU5hbWVTb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2FkZENvdW50cnlDb2RlXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9hZGRDb3VudHJ5Q29kZShpc28yLCBkaWFsQ29kZSwgcHJpb3JpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRpYWxDb2RlLmxlbmd0aCA+IHRoaXMuZGlhbENvZGVNYXhMZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbENvZGVNYXhMZW4gPSBkaWFsQ29kZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvdW50cnlDb2Rlcy5oYXNPd25Qcm9wZXJ0eShkaWFsQ29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRyeUNvZGVzW2RpYWxDb2RlXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGJhaWwgaWYgd2UgYWxyZWFkeSBoYXZlIHRoaXMgY291bnRyeSBmb3IgdGhpcyBkaWFsQ29kZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY291bnRyeUNvZGVzW2RpYWxDb2RlXS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY291bnRyeUNvZGVzW2RpYWxDb2RlXVtpXSA9PT0gaXNvMikgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciB1bmRlZmluZWQgYXMgMCBpcyBmYWxzeVxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBwcmlvcml0eSAhPT0gdW5kZWZpbmVkID8gcHJpb3JpdHkgOiB0aGlzLmNvdW50cnlDb2Rlc1tkaWFsQ29kZV0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlDb2Rlc1tkaWFsQ29kZV1baW5kZXhdID0gaXNvMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9wcm9jZXNzQWxsQ291bnRyaWVzXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9wcm9jZXNzQWxsQ291bnRyaWVzKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9ubHlDb3VudHJpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG93ZXJDYXNlT25seUNvdW50cmllcyA9IHRoaXMub3B0aW9ucy5vbmx5Q291bnRyaWVzLm1hcChmdW5jdGlvbihjb3VudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50cnkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudHJpZXMgPSBhbGxDb3VudHJpZXMuZmlsdGVyKGZ1bmN0aW9uKGNvdW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG93ZXJDYXNlT25seUNvdW50cmllcy5pbmRleE9mKGNvdW50cnkuaXNvMikgPiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5leGNsdWRlQ291bnRyaWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvd2VyQ2FzZUV4Y2x1ZGVDb3VudHJpZXMgPSB0aGlzLm9wdGlvbnMuZXhjbHVkZUNvdW50cmllcy5tYXAoZnVuY3Rpb24oY291bnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3VudHJ5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRyaWVzID0gYWxsQ291bnRyaWVzLmZpbHRlcihmdW5jdGlvbihjb3VudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvd2VyQ2FzZUV4Y2x1ZGVDb3VudHJpZXMuaW5kZXhPZihjb3VudHJ5LmlzbzIpID09PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudHJpZXMgPSBhbGxDb3VudHJpZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl90cmFuc2xhdGVDb3VudHJpZXNCeUxvY2FsZVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfdHJhbnNsYXRlQ291bnRyaWVzQnlMb2NhbGUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb3VudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc28gPSB0aGlzLmNvdW50cmllc1tpXS5pc28yLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvY2FsaXplZENvdW50cmllcy5oYXNPd25Qcm9wZXJ0eShpc28pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudHJpZXNbaV0ubmFtZSA9IHRoaXMub3B0aW9ucy5sb2NhbGl6ZWRDb3VudHJpZXNbaXNvXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2NvdW50cnlOYW1lU29ydFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfY291bnRyeU5hbWVTb3J0KGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfcHJvY2Vzc0NvdW50cnlDb2Rlc1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcHJvY2Vzc0NvdW50cnlDb2RlcygpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsQ29kZU1heExlbiA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRyeUNvZGVzID0ge307XG4gICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0OiBhZGQgZGlhbCBjb2Rlc1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY291bnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IHRoaXMuY291bnRyaWVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkQ291bnRyeUNvZGUoYy5pc28yLCBjLmRpYWxDb2RlLCBjLnByaW9yaXR5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBuZXh0OiBhZGQgYXJlYSBjb2Rlc1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGEgc2Vjb25kIGxvb3Agb3ZlciBjb3VudHJpZXMsIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCBvZiB0aGUgXCJyb290XCIgY291bnRyaWVzXG4gICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaW4gdGhlIG1hcCwgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZW0sIGFzIGVhY2ggdGltZSB3ZSBhZGQgYW4gYXJlYSBjb2RlIHN1YnN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgbWFwLCB3ZSBhbHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgXCJyb290XCIgY291bnRyeSdzIGNvZGUsIGFzIHRoYXQgYWxzbyBtYXRjaGVzXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB0aGlzLmNvdW50cmllcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYyA9IHRoaXMuY291bnRyaWVzW19pXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZWEgY29kZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYy5hcmVhQ29kZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdENvdW50cnlDb2RlID0gdGhpcy5jb3VudHJ5Q29kZXNbX2MuZGlhbENvZGVdWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGFyZWEgY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgX2MuYXJlYUNvZGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmVhQ29kZSA9IF9jLmFyZWFDb2Rlc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggZGlnaXQgaW4gdGhlIGFyZWEgY29kZSB0byBhZGQgYWxsIHBhcnRpYWwgbWF0Y2hlcyBhcyB3ZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAxOyBrIDwgYXJlYUNvZGUubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0aWFsRGlhbENvZGUgPSBfYy5kaWFsQ29kZSArIGFyZWFDb2RlLnN1YnN0cigwLCBrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0IHdpdGggdGhlIHJvb3QgY291bnRyeSwgYXMgdGhhdCBhbHNvIG1hdGNoZXMgdGhpcyBkaWFsIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZENvdW50cnlDb2RlKHJvb3RDb3VudHJ5Q29kZSwgcGFydGlhbERpYWxDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZENvdW50cnlDb2RlKF9jLmlzbzIsIHBhcnRpYWxEaWFsQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBmdWxsIGFyZWEgY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRDb3VudHJ5Q29kZShfYy5pc28yLCBfYy5kaWFsQ29kZSArIGFyZWFDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9wcm9jZXNzUHJlZmVycmVkQ291bnRyaWVzXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9wcm9jZXNzUHJlZmVycmVkQ291bnRyaWVzKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWZlcnJlZENvdW50cmllcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5wcmVmZXJyZWRDb3VudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudHJ5Q29kZSA9IHRoaXMub3B0aW9ucy5wcmVmZXJyZWRDb3VudHJpZXNbaV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudHJ5RGF0YSA9IHRoaXMuX2dldENvdW50cnlEYXRhKGNvdW50cnlDb2RlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRyeURhdGEpIHRoaXMucHJlZmVycmVkQ291bnRyaWVzLnB1c2goY291bnRyeURhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfY3JlYXRlRWxcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2NyZWF0ZUVsKG5hbWUsIGF0dHJzLCBjb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzKSBmb3JFYWNoUHJvcChhdHRycywgZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluZXIpIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9nZW5lcmF0ZU1hcmt1cFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2VuZXJhdGVNYXJrdXAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIGF1dG9jb21wbGV0ZSBkb2VzIG5vdCBleGlzdCBvbiB0aGUgZWxlbWVudCBhbmQgaXRzIGZvcm0sIHRoZW5cbiAgICAgICAgICAgICAgICAgICAgLy8gcHJldmVudCBhdXRvY29tcGxldGUgYXMgdGhlcmUncyBubyBzYWZlLCBjcm9zcy1icm93c2VyIGV2ZW50IHdlIGNhbiByZWFjdCB0bywgc28gaXQgY2FuXG4gICAgICAgICAgICAgICAgICAgIC8vIGVhc2lseSBwdXQgdGhlIHBsdWdpbiBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgZS5nLiB0aGUgd3JvbmcgZmxhZyBzZWxlY3RlZCBmb3IgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIGF1dG9jb21wbGV0ZWQgbnVtYmVyLCB3aGljaCBvbiBzdWJtaXQgY291bGQgbWVhbiB3cm9uZyBudW1iZXIgaXMgc2F2ZWQgKGVzcCBpbiBuYXRpb25hbE1vZGUpXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy50ZWxJbnB1dC5oYXNBdHRyaWJ1dGUoXCJhdXRvY29tcGxldGVcIikgJiYgISh0aGlzLnRlbElucHV0LmZvcm0gJiYgdGhpcy50ZWxJbnB1dC5mb3JtLmhhc0F0dHJpYnV0ZShcImF1dG9jb21wbGV0ZVwiKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQuc2V0QXR0cmlidXRlKFwiYXV0b2NvbXBsZXRlXCIsIFwib2ZmXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRhaW5lcnMgKG1vc3RseSBmb3IgcG9zaXRpb25pbmcpXG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRDbGFzcyA9IFwiaXRpXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dEcm9wZG93bikgcGFyZW50Q2xhc3MgKz0gXCIgaXRpLS1hbGxvdy1kcm9wZG93blwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlcGFyYXRlRGlhbENvZGUpIHBhcmVudENsYXNzICs9IFwiIGl0aS0tc2VwYXJhdGUtZGlhbC1jb2RlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDbGFzcyArPSBcIiBcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENsYXNzICs9IHRoaXMub3B0aW9ucy5jdXN0b21Db250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSB0aGlzLl9jcmVhdGVFbChcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCI6IHBhcmVudENsYXNzXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHdyYXBwZXIsIHRoaXMudGVsSW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZsYWdzQ29udGFpbmVyID0gdGhpcy5fY3JlYXRlRWwoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiOiBcIml0aV9fZmxhZy1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLnRlbElucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgZmxhZyAoZGlzcGxheWVkIHRvIGxlZnQgb2YgaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnID0gdGhpcy5fY3JlYXRlRWwoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiOiBcIml0aV9fc2VsZWN0ZWQtZmxhZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTogXCJjb21ib2JveFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLW93bnNcIjogXCJjb3VudHJ5LWxpc3Rib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBcImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5mbGFnc0NvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnSW5uZXIgPSB0aGlzLl9jcmVhdGVFbChcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCI6IFwiaXRpX19mbGFnXCJcbiAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5zZWxlY3RlZEZsYWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlcGFyYXRlRGlhbENvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREaWFsQ29kZSA9IHRoaXMuX2NyZWF0ZUVsKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCI6IFwiaXRpX19zZWxlY3RlZC1kaWFsLWNvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5zZWxlY3RlZEZsYWcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBlbGVtZW50IGZvY3VzYWJsZSBhbmQgdGFiIG5hdmlnYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZsYWcuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiwgXCIwXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bkFycm93ID0gdGhpcy5fY3JlYXRlRWwoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIjogXCJpdGlfX2Fycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuc2VsZWN0ZWRGbGFnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvdW50cnkgZHJvcGRvd246IHByZWZlcnJlZCBjb3VudHJpZXMsIHRoZW4gZGl2aWRlciwgdGhlbiBhbGwgY291bnRyaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlMaXN0ID0gdGhpcy5fY3JlYXRlRWwoXCJ1bFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiOiBcIml0aV9fY291bnRyeS1saXN0IGl0aV9faGlkZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImNvdW50cnktbGlzdGJveFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IFwibGlzdGJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZWZlcnJlZENvdW50cmllcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRMaXN0SXRlbXModGhpcy5wcmVmZXJyZWRDb3VudHJpZXMsIFwiaXRpX19wcmVmZXJyZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlRWwoXCJsaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIjogXCJpdGlfX2RpdmlkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTogXCJzZXBhcmF0b3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IFwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5jb3VudHJ5TGlzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRMaXN0SXRlbXModGhpcy5jb3VudHJpZXMsIFwiaXRpX19zdGFuZGFyZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBkcm9wZG93bkNvbnRhaW5lciBtYXJrdXBcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZHJvcGRvd25Db250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duID0gdGhpcy5fY3JlYXRlRWwoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCI6IFwiaXRpIGl0aS0tY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duLmFwcGVuZENoaWxkKHRoaXMuY291bnRyeUxpc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZsYWdzQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuY291bnRyeUxpc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGlkZGVuSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoaWRkZW5JbnB1dE5hbWUgPSB0aGlzLm9wdGlvbnMuaGlkZGVuSW5wdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMudGVsSW5wdXQuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBuYW1lLmxhc3RJbmRleE9mKFwiW1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBpbnB1dCBuYW1lIGNvbnRhaW5zIHNxdWFyZSBicmFja2V0cywgdGhlbiBnaXZlIHRoZSBoaWRkZW4gaW5wdXQgdGhlIHNhbWUgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXBsYWNpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXN0IHNldCBvZiBicmFja2V0cyB3aXRoIHRoZSBnaXZlbiBoaWRkZW5JbnB1dCBuYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IC0xKSBoaWRkZW5JbnB1dE5hbWUgPSBcIlwiLmNvbmNhdChuYW1lLnN1YnN0cigwLCBpKSwgXCJbXCIpLmNvbmNhdChoaWRkZW5JbnB1dE5hbWUsIFwiXVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZGVuSW5wdXQgPSB0aGlzLl9jcmVhdGVFbChcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImhpZGRlblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGhpZGRlbklucHV0TmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuaGlkZGVuSW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfYXBwZW5kTGlzdEl0ZW1zXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9hcHBlbmRMaXN0SXRlbXMoY291bnRyaWVzLCBjbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgY3JlYXRlIHNvIG1hbnkgRE9NIGVsZW1lbnRzLCBpdCBpcyBmYXN0ZXIgdG8gYnVpbGQgYSB0ZW1wIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgdGhlbiBhZGQgZXZlcnl0aGluZyB0byB0aGUgRE9NIGluIG9uZSBnbyBhdCB0aGUgZW5kXG4gICAgICAgICAgICAgICAgICAgIHZhciB0bXAgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBjb3VudHJ5XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGNvdW50cmllc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wZW4gdGhlIGxpc3QgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wICs9IFwiPGxpIGNsYXNzPSdpdGlfX2NvdW50cnkgXCIuY29uY2F0KGNsYXNzTmFtZSwgXCInIHRhYkluZGV4PSctMScgaWQ9J2l0aS1pdGVtLVwiKS5jb25jYXQoYy5pc28yLCBcIicgcm9sZT0nb3B0aW9uJyBkYXRhLWRpYWwtY29kZT0nXCIpLmNvbmNhdChjLmRpYWxDb2RlLCBcIicgZGF0YS1jb3VudHJ5LWNvZGU9J1wiKS5jb25jYXQoYy5pc28yLCBcIic+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBmbGFnXG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAgKz0gXCI8ZGl2IGNsYXNzPSdpdGlfX2ZsYWctYm94Jz48ZGl2IGNsYXNzPSdpdGlfX2ZsYWcgaXRpX19cIi5jb25jYXQoYy5pc28yLCBcIic+PC9kaXY+PC9kaXY+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBjb3VudHJ5IG5hbWUgYW5kIGRpYWwgY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wICs9IFwiPHNwYW4gY2xhc3M9J2l0aV9fY291bnRyeS1uYW1lJz5cIi5jb25jYXQoYy5uYW1lLCBcIjwvc3Bhbj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAgKz0gXCI8c3BhbiBjbGFzcz0naXRpX19kaWFsLWNvZGUnPitcIi5jb25jYXQoYy5kaWFsQ29kZSwgXCI8L3NwYW4+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGxpc3QgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wICs9IFwiPC9saT5cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlMaXN0Lmluc2VydEFkamFjZW50SFRNTChcImJlZm9yZWVuZFwiLCB0bXApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3NldEluaXRpYWxTdGF0ZVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0SW5pdGlhbFN0YXRlKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gdGhpcy50ZWxJbnB1dC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpYWxDb2RlID0gdGhpcy5fZ2V0RGlhbENvZGUodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVnaW9ubGVzc05hbnAgPSB0aGlzLl9pc1JlZ2lvbmxlc3NOYW5wKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyRvcHRpb25zID0gdGhpcy5vcHRpb25zLCBpbml0aWFsQ291bnRyeSA9IF90aGlzJG9wdGlvbnMuaW5pdGlhbENvdW50cnksIG5hdGlvbmFsTW9kZSA9IF90aGlzJG9wdGlvbnMubmF0aW9uYWxNb2RlLCBhdXRvSGlkZURpYWxDb2RlID0gX3RoaXMkb3B0aW9ucy5hdXRvSGlkZURpYWxDb2RlLCBzZXBhcmF0ZURpYWxDb2RlID0gX3RoaXMkb3B0aW9ucy5zZXBhcmF0ZURpYWxDb2RlO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBkaWFsIGNvZGUsIGFuZCBpdCdzIG5vdCBhIHJlZ2lvbmxlc3NOYW5wLCB3ZSBjYW4gZ28gYWhlYWQgYW5kIHNldCB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZmxhZywgZWxzZSBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgY291bnRyeVxuICAgICAgICAgICAgICAgICAgICBpZiAoZGlhbENvZGUgJiYgIWlzUmVnaW9ubGVzc05hbnApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUZsYWdGcm9tTnVtYmVyKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbENvdW50cnkgIT09IFwiYXV0b1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaWYgd2Ugc2hvdWxkIHNlbGVjdCBhIGZsYWdcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbml0aWFsQ291bnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEZsYWcoaW5pdGlhbENvdW50cnkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWFsQ29kZSAmJiBpc1JlZ2lvbmxlc3NOYW5wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhcyBpbnRsIGRpYWwgY29kZSwgaXMgcmVnaW9ubGVzcyBuYW5wLCBhbmQgbm8gaW5pdGlhbENvdW50cnksIHNvIGRlZmF1bHQgdG8gVVNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0RmxhZyhcInVzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGRpYWwgY29kZSBhbmQgbm8gaW5pdGlhbENvdW50cnksIHNvIGRlZmF1bHQgdG8gZmlyc3QgaW4gbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRDb3VudHJ5ID0gdGhpcy5wcmVmZXJyZWRDb3VudHJpZXMubGVuZ3RoID8gdGhpcy5wcmVmZXJyZWRDb3VudHJpZXNbMF0uaXNvMiA6IHRoaXMuY291bnRyaWVzWzBdLmlzbzI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRGbGFnKHRoaXMuZGVmYXVsdENvdW50cnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgZW1wdHkgYW5kIG5vIG5hdGlvbmFsTW9kZSBhbmQgbm8gYXV0b0hpZGVEaWFsQ29kZSB0aGVuIGluc2VydCB0aGUgZGVmYXVsdCBkaWFsIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsICYmICFuYXRpb25hbE1vZGUgJiYgIWF1dG9IaWRlRGlhbENvZGUgJiYgIXNlcGFyYXRlRGlhbENvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LnZhbHVlID0gXCIrXCIuY29uY2F0KHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5kaWFsQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogaWYgaW5pdGlhbENvdW50cnkgaXMgc2V0IHRvIGF1dG8sIHRoYXQgd2lsbCBiZSBoYW5kbGVkIHNlcGFyYXRlbHlcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9ybWF0IC0gbm90ZSB0aGlzIHdvbnQgYmUgcnVuIGFmdGVyIF91cGRhdGVEaWFsQ29kZSBhcyB0aGF0J3Mgb25seSBjYWxsZWQgaWYgbm8gdmFsXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwpIHRoaXMuX3VwZGF0ZVZhbEZyb21OdW1iZXIodmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9pbml0TGlzdGVuZXJzXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9pbml0TGlzdGVuZXJzKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0S2V5TGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b0hpZGVEaWFsQ29kZSkgdGhpcy5faW5pdEJsdXJMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hbGxvd0Ryb3Bkb3duKSB0aGlzLl9pbml0RHJvcGRvd25MaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGlkZGVuSW5wdXQpIHRoaXMuX2luaXRIaWRkZW5JbnB1dExpc3RlbmVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfaW5pdEhpZGRlbklucHV0TGlzdGVuZXJcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2luaXRIaWRkZW5JbnB1dExpc3RlbmVyKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMzID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlSGlkZGVuSW5wdXRTdWJtaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5oaWRkZW5JbnB1dC52YWx1ZSA9IF90aGlzMy5nZXROdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGVsSW5wdXQuZm9ybSkgdGhpcy50ZWxJbnB1dC5mb3JtLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgdGhpcy5faGFuZGxlSGlkZGVuSW5wdXRTdWJtaXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2dldENsb3Nlc3RMYWJlbFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0Q2xvc2VzdExhYmVsKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZWwgPSB0aGlzLnRlbElucHV0O1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZWwgJiYgZWwudGFnTmFtZSAhPT0gXCJMQUJFTFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbCA9IGVsLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2luaXREcm9wZG93bkxpc3RlbmVyc1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5pdERyb3Bkb3duTGlzdGVuZXJzKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM0ID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgLy8gaGFjayBmb3IgaW5wdXQgbmVzdGVkIGluc2lkZSBsYWJlbCAod2hpY2ggaXMgdmFsaWQgbWFya3VwKTogY2xpY2tpbmcgdGhlIHNlbGVjdGVkLWZsYWcgdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gb3BlbiB0aGUgZHJvcGRvd24gd291bGQgdGhlbiBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgYSAybmQgY2xpY2sgb24gdGhlIGlucHV0IHdoaWNoIHdvdWxkXG4gICAgICAgICAgICAgICAgICAgIC8vIGNsb3NlIGl0IGFnYWluXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUxhYmVsQ2xpY2sgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZHJvcGRvd24gaXMgY2xvc2VkLCB0aGVuIGZvY3VzIHRoZSBpbnB1dCwgZWxzZSBpZ25vcmUgdGhlIGNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM0LmNvdW50cnlMaXN0LmNsYXNzTGlzdC5jb250YWlucyhcIml0aV9faGlkZVwiKSkgX3RoaXM0LnRlbElucHV0LmZvY3VzKCk7IGVsc2UgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGFiZWwgPSB0aGlzLl9nZXRDbG9zZXN0TGFiZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhYmVsKSBsYWJlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlTGFiZWxDbGljayk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRvZ2dsZSBjb3VudHJ5IGRyb3Bkb3duIG9uIGNsaWNrXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNsaWNrU2VsZWN0ZWRGbGFnID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGludGVyY2VwdCB0aGlzIGV2ZW50IGlmIHdlJ3JlIG9wZW5pbmcgdGhlIGRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlbHNlIGxldCBpdCBidWJibGUgdXAgdG8gdGhlIHRvcCAoXCJjbGljay1vZmYtdG8tY2xvc2VcIiBsaXN0ZW5lcilcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGNhbm5vdCBqdXN0IHN0b3BQcm9wYWdhdGlvbiBhcyBpdCBtYXkgYmUgbmVlZGVkIHRvIGNsb3NlIGFub3RoZXIgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczQuY291bnRyeUxpc3QuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaXRpX19oaWRlXCIpICYmICFfdGhpczQudGVsSW5wdXQuZGlzYWJsZWQgJiYgIV90aGlzNC50ZWxJbnB1dC5yZWFkT25seSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5fc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oYW5kbGVDbGlja1NlbGVjdGVkRmxhZyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9wZW4gZHJvcGRvd24gbGlzdCBpZiBjdXJyZW50bHkgZm9jdXNlZFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVGbGFnc0NvbnRhaW5lcktleWRvd24gPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNEcm9wZG93bkhpZGRlbiA9IF90aGlzNC5jb3VudHJ5TGlzdC5jbGFzc0xpc3QuY29udGFpbnMoXCJpdGlfX2hpZGVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNEcm9wZG93bkhpZGRlbiAmJiBbIFwiQXJyb3dVcFwiLCBcIlVwXCIsIFwiQXJyb3dEb3duXCIsIFwiRG93blwiLCBcIiBcIiwgXCJFbnRlclwiIF0uaW5kZXhPZihlLmtleSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJldmVudCBmb3JtIGZyb20gYmVpbmcgc3VibWl0dGVkIGlmIFwiRU5URVJcIiB3YXMgcHJlc3NlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGV2ZW50IGZyb20gYmVpbmcgaGFuZGxlZCBhZ2FpbiBieSBkb2N1bWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9zaG93RHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbG93IG5hdmlnYXRpb24gZnJvbSBkcm9wZG93biB0byBpbnB1dCBvbiBUQUJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gXCJUYWJcIikgX3RoaXM0Ll9jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhZ3NDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5faGFuZGxlRmxhZ3NDb250YWluZXJLZXlkb3duKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9pbml0UmVxdWVzdHNcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2luaXRSZXF1ZXN0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgdGhlIHBhdGggdG8gdGhlIHV0aWxzIHNjcmlwdCwgZmV0Y2ggaXQgb24gd2luZG93LmxvYWQsIGVsc2UgcmVzb2x2ZVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnV0aWxzU2NyaXB0ICYmICF3aW5kb3cuaW50bFRlbElucHV0VXRpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBwbHVnaW4gaXMgYmVpbmcgaW5pdGlhbGlzZWQgYWZ0ZXIgdGhlIHdpbmRvdy5sb2FkIGV2ZW50IGhhcyBhbHJlYWR5IGJlZW4gZmlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50bFRlbElucHV0R2xvYmFscy53aW5kb3dMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuaW50bFRlbElucHV0R2xvYmFscy5sb2FkVXRpbHModGhpcy5vcHRpb25zLnV0aWxzU2NyaXB0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2FpdCB1bnRpbCB0aGUgbG9hZCBldmVudCBzbyB3ZSBkb24ndCBibG9jayBhbnkgb3RoZXIgcmVxdWVzdHMgZS5nLiB0aGUgZmxhZ3MgaW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5pbnRsVGVsSW5wdXRHbG9iYWxzLmxvYWRVdGlscyhfdGhpczUub3B0aW9ucy51dGlsc1NjcmlwdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB0aGlzLnJlc29sdmVVdGlsc1NjcmlwdFByb21pc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbml0aWFsQ291bnRyeSA9PT0gXCJhdXRvXCIpIHRoaXMuX2xvYWRBdXRvQ291bnRyeSgpOyBlbHNlIHRoaXMucmVzb2x2ZUF1dG9Db3VudHJ5UHJvbWlzZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2xvYWRBdXRvQ291bnRyeVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfbG9hZEF1dG9Db3VudHJ5KCkge1xuICAgICAgICAgICAgICAgICAgICAvLyAzIG9wdGlvbnM6XG4gICAgICAgICAgICAgICAgICAgIC8vIDEpIGFscmVhZHkgbG9hZGVkICh3ZSdyZSBkb25lKVxuICAgICAgICAgICAgICAgICAgICAvLyAyKSBub3QgYWxyZWFkeSBzdGFydGVkIGxvYWRpbmcgKHN0YXJ0KVxuICAgICAgICAgICAgICAgICAgICAvLyAzKSBhbHJlYWR5IHN0YXJ0ZWQgbG9hZGluZyAoZG8gbm90aGluZyAtIGp1c3Qgd2FpdCBmb3IgbG9hZGluZyBjYWxsYmFjayB0byBmaXJlKVxuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMuYXV0b0NvdW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQXV0b0NvdW50cnkoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghd2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMuc3RhcnRlZExvYWRpbmdBdXRvQ291bnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgZG8gdGhpcyB0d2ljZSFcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5pbnRsVGVsSW5wdXRHbG9iYWxzLnN0YXJ0ZWRMb2FkaW5nQXV0b0NvdW50cnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuZ2VvSXBMb29rdXAgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5nZW9JcExvb2t1cChmdW5jdGlvbihjb3VudHJ5Q29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuaW50bFRlbElucHV0R2xvYmFscy5hdXRvQ291bnRyeSA9IGNvdW50cnlDb2RlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRlbGwgYWxsIGluc3RhbmNlcyB0aGUgYXV0byBjb3VudHJ5IGlzIHJlYWR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgc2hvdWxkIGp1c3QgYmUgdGhlIGN1cnJlbnQgaW5zdGFuY2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVQREFURTogdXNlIHNldFRpbWVvdXQgaW4gY2FzZSB0aGVpciBnZW9JcExvb2t1cCBmdW5jdGlvbiBjYWxscyB0aGlzIGNhbGxiYWNrIHN0cmFpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF3YXkgKGUuZy4gaWYgdGhleSBoYXZlIGFscmVhZHkgZG9uZSB0aGUgZ2VvIGlwIGxvb2t1cCBzb21ld2hlcmUgZWxzZSkuIFVzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldFRpbWVvdXQgbWVhbnMgdGhhdCB0aGUgY3VycmVudCB0aHJlYWQgb2YgZXhlY3V0aW9uIHdpbGwgZmluaXNoIGJlZm9yZSBleGVjdXRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcywgd2hpY2ggYWxsb3dzIHRoZSBwbHVnaW4gdG8gZmluaXNoIGluaXRpYWxpc2luZy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JFYWNoSW5zdGFuY2UoXCJoYW5kbGVBdXRvQ291bnRyeVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JFYWNoSW5zdGFuY2UoXCJyZWplY3RBdXRvQ291bnRyeVByb21pc2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9pbml0S2V5TGlzdGVuZXJzXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9pbml0S2V5TGlzdGVuZXJzKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM2ID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIGZsYWcgb24ga2V5dXBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlS2V5dXBFdmVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzNi5fdXBkYXRlRmxhZ0Zyb21OdW1iZXIoX3RoaXM2LnRlbElucHV0LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5fdHJpZ2dlckNvdW50cnlDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgdGhpcy5faGFuZGxlS2V5dXBFdmVudCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBmbGFnIG9uIGN1dC9wYXN0ZSBldmVudHMgKG5vdyBzdXBwb3J0ZWQgaW4gYWxsIG1ham9yIGJyb3dzZXJzKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDbGlwYm9hcmRFdmVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFjayBiZWNhdXNlIFwicGFzdGVcIiBldmVudCBpcyBmaXJlZCBiZWZvcmUgaW5wdXQgaXMgdXBkYXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChfdGhpczYuX2hhbmRsZUtleXVwRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJjdXRcIiwgdGhpcy5faGFuZGxlQ2xpcGJvYXJkRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJwYXN0ZVwiLCB0aGlzLl9oYW5kbGVDbGlwYm9hcmRFdmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfY2FwXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9jYXAobnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLnRlbElucHV0LmdldEF0dHJpYnV0ZShcIm1heGxlbmd0aFwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1heCAmJiBudW1iZXIubGVuZ3RoID4gbWF4ID8gbnVtYmVyLnN1YnN0cigwLCBtYXgpIDogbnVtYmVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2luaXRCbHVyTGlzdGVuZXJzXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9pbml0Qmx1ckxpc3RlbmVycygpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9uIGJsdXIgb3IgZm9ybSBzdWJtaXQ6IGlmIGp1c3QgYSBkaWFsIGNvZGUgdGhlbiByZW1vdmUgaXRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlU3VibWl0T3JCbHVyRXZlbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNy5fcmVtb3ZlRW1wdHlEaWFsQ29kZSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50ZWxJbnB1dC5mb3JtKSB0aGlzLnRlbElucHV0LmZvcm0uYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCB0aGlzLl9oYW5kbGVTdWJtaXRPckJsdXJFdmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgdGhpcy5faGFuZGxlU3VibWl0T3JCbHVyRXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3JlbW92ZUVtcHR5RGlhbENvZGVcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3JlbW92ZUVtcHR5RGlhbENvZGUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRlbElucHV0LnZhbHVlLmNoYXJBdCgwKSA9PT0gXCIrXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1lcmljID0gdGhpcy5fZ2V0TnVtZXJpYyh0aGlzLnRlbElucHV0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGp1c3QgYSBwbHVzLCBvciBpZiBqdXN0IGEgZGlhbCBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW51bWVyaWMgfHwgdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmRpYWxDb2RlID09PSBudW1lcmljKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9nZXROdW1lcmljXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXROdW1lcmljKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXFxEL2csIFwiXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3RyaWdnZXJcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3RyaWdnZXIobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHRvIHVzZSBvbGQgc2Nob29sIGRvY3VtZW50LmNyZWF0ZUV2ZW50IGFzIElFMTEgZG9lc24ndCBzdXBwb3J0IGBuZXcgRXZlbnQoKWAgc3ludGF4XG4gICAgICAgICAgICAgICAgICAgIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgICAgICAgICAgICAgICAgICAgZS5pbml0RXZlbnQobmFtZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNhbiBidWJibGUsIGFuZCBpcyBjYW5jZWxsYWJsZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LmRpc3BhdGNoRXZlbnQoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfc2hvd0Ryb3Bkb3duXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9zaG93RHJvcGRvd24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRyeUxpc3QuY2xhc3NMaXN0LnJlbW92ZShcIml0aV9faGlkZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZsYWcuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBcInRydWVcIik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldERyb3Bkb3duUG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIGhpZ2hsaWdodGluZyBhbmQgc2Nyb2xsIHRvIGFjdGl2ZSBsaXN0IGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0TGlzdEl0ZW0odGhpcy5hY3RpdmVJdGVtLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY3JvbGxUbyh0aGlzLmFjdGl2ZUl0ZW0sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGJpbmQgYWxsIHRoZSBkcm9wZG93bi1yZWxhdGVkIGxpc3RlbmVyczogbW91c2VvdmVyLCBjbGljaywgY2xpY2stb2ZmLCBrZXlkb3duXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2JpbmREcm9wZG93bkxpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGFycm93XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25BcnJvdy5jbGFzc0xpc3QuYWRkKFwiaXRpX19hcnJvdy0tdXBcIik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoXCJvcGVuOmNvdW50cnlkcm9wZG93blwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl90b2dnbGVDbGFzc1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfdG9nZ2xlQ2xhc3MoZWwsIGNsYXNzTmFtZSwgc2hvdWxkSGF2ZUNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRIYXZlQ2xhc3MgJiYgIWVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSBlbC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7IGVsc2UgaWYgKCFzaG91bGRIYXZlQ2xhc3MgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIGVsLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9zZXREcm9wZG93blBvc2l0aW9uXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9zZXREcm9wZG93blBvc2l0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM4ID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kcm9wZG93bkNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmRyb3Bkb3duQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZHJvcGRvd24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc01vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IHRoaXMudGVsSW5wdXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aW5kb3dUb3AgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTQzODQwOTEvMjE3ODY2XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2luZG93VG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXRUb3AgPSBwb3MudG9wICsgd2luZG93VG9wO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRyb3Bkb3duSGVpZ2h0ID0gdGhpcy5jb3VudHJ5TGlzdC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkcm9wZG93bkZpdHNCZWxvdyA9IChkcm9wZG93bkJvdHRvbSA8IHdpbmRvd0JvdHRvbSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcm9wZG93bkZpdHNCZWxvdyA9IGlucHV0VG9wICsgdGhpcy50ZWxJbnB1dC5vZmZzZXRIZWlnaHQgKyBkcm9wZG93bkhlaWdodCA8IHdpbmRvd1RvcCArIHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcm9wZG93bkZpdHNBYm92ZSA9IGlucHV0VG9wIC0gZHJvcGRvd25IZWlnaHQgPiB3aW5kb3dUb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBkZWZhdWx0LCB0aGUgZHJvcGRvd24gd2lsbCBiZSBiZWxvdyB0aGUgaW5wdXQuIElmIHdlIHdhbnQgdG8gcG9zaXRpb24gaXQgYWJvdmUgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnB1dCwgd2UgYWRkIHRoZSBkcm9wdXAgY2xhc3MuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2dnbGVDbGFzcyh0aGlzLmNvdW50cnlMaXN0LCBcIml0aV9fY291bnRyeS1saXN0LS1kcm9wdXBcIiwgIWRyb3Bkb3duRml0c0JlbG93ICYmIGRyb3Bkb3duRml0c0Fib3ZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGRyb3Bkb3duQ29udGFpbmVyIGlzIGVuYWJsZWQsIGNhbGN1bGF0ZSBwb3N0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRyb3Bkb3duQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgZGVmYXVsdCB0aGUgZHJvcGRvd24gd2lsbCBiZSBkaXJlY3RseSBvdmVyIHRoZSBpbnB1dCBiZWNhdXNlIGl0J3Mgbm90IGluIHRoZSBmbG93LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHdhbnQgdG8gcG9zaXRpb24gaXQgYmVsb3csIHdlIG5lZWQgdG8gYWRkIHNvbWUgZXh0cmEgdG9wIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHRyYVRvcCA9ICFkcm9wZG93bkZpdHNCZWxvdyAmJiBkcm9wZG93bkZpdHNBYm92ZSA/IDAgOiB0aGlzLnRlbElucHV0Lm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgcGxhY2VtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5zdHlsZS50b3AgPSBcIlwiLmNvbmNhdChpbnB1dFRvcCArIGV4dHJhVG9wLCBcInB4XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uc3R5bGUubGVmdCA9IFwiXCIuY29uY2F0KHBvcy5sZWZ0ICsgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0LCBcInB4XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb3NlIG1lbnUgb24gd2luZG93IHNjcm9sbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZVdpbmRvd1Njcm9sbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM4Ll9jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLl9oYW5kbGVXaW5kb3dTY3JvbGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfZ2V0Q2xvc2VzdExpc3RJdGVtXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRDbG9zZXN0TGlzdEl0ZW0odGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbCA9IHRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVsICYmIGVsICE9PSB0aGlzLmNvdW50cnlMaXN0ICYmICFlbC5jbGFzc0xpc3QuY29udGFpbnMoXCJpdGlfX2NvdW50cnlcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsID0gZWwucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSByZWFjaGVkIHRoZSBjb3VudHJ5TGlzdCBlbGVtZW50LCB0aGVuIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbCA9PT0gdGhpcy5jb3VudHJ5TGlzdCA/IG51bGwgOiBlbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9iaW5kRHJvcGRvd25MaXN0ZW5lcnNcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2JpbmREcm9wZG93bkxpc3RlbmVycygpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzOSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gbW91c2Ugb3ZlciBhIGxpc3QgaXRlbSwganVzdCBoaWdobGlnaHQgdGhhdCBvbmVcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgYWRkIHRoZSBjbGFzcyBcImhpZ2hsaWdodFwiLCBzbyBpZiB0aGV5IGhpdCBcImVudGVyXCIgd2Uga25vdyB3aGljaCBvbmUgdG8gc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZU1vdXNlb3ZlckNvdW50cnlMaXN0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGV2ZW50IGRlbGVnYXRpb24sIGFzIHdlJ3JlIGxpc3RlbmluZyBmb3IgdGhpcyBldmVudCBvbiB0aGUgY291bnRyeUxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaXN0SXRlbSA9IF90aGlzOS5fZ2V0Q2xvc2VzdExpc3RJdGVtKGUudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbSkgX3RoaXM5Ll9oaWdobGlnaHRMaXN0SXRlbShsaXN0SXRlbSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlMaXN0LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgdGhpcy5faGFuZGxlTW91c2VvdmVyQ291bnRyeUxpc3QpO1xuICAgICAgICAgICAgICAgICAgICAvLyBsaXN0ZW4gZm9yIGNvdW50cnkgc2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNsaWNrQ291bnRyeUxpc3QgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdEl0ZW0gPSBfdGhpczkuX2dldENsb3Nlc3RMaXN0SXRlbShlLnRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW0pIF90aGlzOS5fc2VsZWN0TGlzdEl0ZW0obGlzdEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlMaXN0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oYW5kbGVDbGlja0NvdW50cnlMaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2xpY2sgb2ZmIHRvIGNsb3NlXG4gICAgICAgICAgICAgICAgICAgIC8vIChleGNlcHQgd2hlbiB0aGlzIGluaXRpYWwgb3BlbmluZyBjbGljayBpcyBidWJibGluZyB1cClcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgY2Fubm90IGp1c3Qgc3RvcFByb3BhZ2F0aW9uIGFzIGl0IG1heSBiZSBuZWVkZWQgdG8gY2xvc2UgYW5vdGhlciBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICB2YXIgaXNPcGVuaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2xpY2tPZmZUb0Nsb3NlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT3BlbmluZykgX3RoaXM5Ll9jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc09wZW5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oYW5kbGVDbGlja09mZlRvQ2xvc2UpO1xuICAgICAgICAgICAgICAgICAgICAvLyBsaXN0ZW4gZm9yIHVwL2Rvd24gc2Nyb2xsaW5nLCBlbnRlciB0byBzZWxlY3QsIG9yIGxldHRlcnMgdG8ganVtcCB0byBjb3VudHJ5IG5hbWUuXG4gICAgICAgICAgICAgICAgICAgIC8vIHVzZSBrZXlkb3duIGFzIGtleXByZXNzIGRvZXNuJ3QgZmlyZSBmb3Igbm9uLWNoYXIga2V5cyBhbmQgd2Ugd2FudCB0byBjYXRjaCBpZiB0aGV5XG4gICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgaGl0IGRvd24gYW5kIGhvbGQgaXQgdG8gc2Nyb2xsIGRvd24gKG5vIGtleXVwIGV2ZW50KS5cbiAgICAgICAgICAgICAgICAgICAgLy8gbGlzdGVuIG9uIHRoZSBkb2N1bWVudCBiZWNhdXNlIHRoYXQncyB3aGVyZSBrZXkgZXZlbnRzIGFyZSB0cmlnZ2VyZWQgaWYgbm8gaW5wdXQgaGFzIGZvY3VzXG4gICAgICAgICAgICAgICAgICAgIHZhciBxdWVyeSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBxdWVyeVRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlS2V5ZG93bk9uRHJvcGRvd24gPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGRvd24ga2V5IGZyb20gc2Nyb2xsaW5nIHRoZSB3aG9sZSBwYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGVudGVyIGtleSBmcm9tIHN1Ym1pdHRpbmcgYSBmb3JtIGV0Y1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXAgYW5kIGRvd24gdG8gbmF2aWdhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gXCJBcnJvd1VwXCIgfHwgZS5rZXkgPT09IFwiVXBcIiB8fCBlLmtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBlLmtleSA9PT0gXCJEb3duXCIpIF90aGlzOS5faGFuZGxlVXBEb3duS2V5KGUua2V5KTsgZWxzZSBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikgX3RoaXM5Ll9oYW5kbGVFbnRlcktleSgpOyBlbHNlIGlmIChlLmtleSA9PT0gXCJFc2NhcGVcIikgX3RoaXM5Ll9jbG9zZURyb3Bkb3duKCk7IGVsc2UgaWYgKC9eW2EtekEtWsOALcO/0LAt0Y/QkC3QryBdJC8udGVzdChlLmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqdW1wIHRvIGNvdW50cmllcyB0aGF0IHN0YXJ0IHdpdGggdGhlIHF1ZXJ5IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeVRpbWVyKSBjbGVhclRpbWVvdXQocXVlcnlUaW1lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkgKz0gZS5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczkuX3NlYXJjaEZvckNvdW50cnkocXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB0aW1lciBoaXRzIDEgc2Vjb25kLCByZXNldCB0aGUgcXVlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDFlMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2hhbmRsZUtleWRvd25PbkRyb3Bkb3duKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9oYW5kbGVVcERvd25LZXlcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2hhbmRsZVVwRG93bktleShrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBrZXkgPT09IFwiQXJyb3dVcFwiIHx8IGtleSA9PT0gXCJVcFwiID8gdGhpcy5oaWdobGlnaHRlZEl0ZW0ucHJldmlvdXNFbGVtZW50U2libGluZyA6IHRoaXMuaGlnaGxpZ2h0ZWRJdGVtLm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgdGhlIGRpdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0LmNsYXNzTGlzdC5jb250YWlucyhcIml0aV9fZGl2aWRlclwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBrZXkgPT09IFwiQXJyb3dVcFwiIHx8IGtleSA9PT0gXCJVcFwiID8gbmV4dC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIDogbmV4dC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRMaXN0SXRlbShuZXh0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2hhbmRsZUVudGVyS2V5XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9oYW5kbGVFbnRlcktleSgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0ZWRJdGVtKSB0aGlzLl9zZWxlY3RMaXN0SXRlbSh0aGlzLmhpZ2hsaWdodGVkSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfc2VhcmNoRm9yQ291bnRyeVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc2VhcmNoRm9yQ291bnRyeShxdWVyeSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY291bnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RhcnRzV2l0aCh0aGlzLmNvdW50cmllc1tpXS5uYW1lLCBxdWVyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdEl0ZW0gPSB0aGlzLmNvdW50cnlMaXN0LnF1ZXJ5U2VsZWN0b3IoXCIjaXRpLWl0ZW0tXCIuY29uY2F0KHRoaXMuY291bnRyaWVzW2ldLmlzbzIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgaGlnaGxpZ2h0aW5nIGFuZCBzY3JvbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRMaXN0SXRlbShsaXN0SXRlbSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvKGxpc3RJdGVtLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3N0YXJ0c1dpdGhcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3N0YXJ0c1dpdGgoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5zdWJzdHIoMCwgYi5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IGI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfdXBkYXRlVmFsRnJvbU51bWJlclwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfdXBkYXRlVmFsRnJvbU51bWJlcihvcmlnaW5hbE51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtYmVyID0gb3JpZ2luYWxOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZm9ybWF0T25EaXNwbGF5ICYmIHdpbmRvdy5pbnRsVGVsSW5wdXRVdGlscyAmJiB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VOYXRpb25hbCA9ICF0aGlzLm9wdGlvbnMuc2VwYXJhdGVEaWFsQ29kZSAmJiAodGhpcy5vcHRpb25zLm5hdGlvbmFsTW9kZSB8fCBudW1iZXIuY2hhckF0KDApICE9PSBcIitcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2ludGxUZWxJbnB1dFV0aWxzJG51ID0gaW50bFRlbElucHV0VXRpbHMubnVtYmVyRm9ybWF0LCBOQVRJT05BTCA9IF9pbnRsVGVsSW5wdXRVdGlscyRudS5OQVRJT05BTCwgSU5URVJOQVRJT05BTCA9IF9pbnRsVGVsSW5wdXRVdGlscyRudS5JTlRFUk5BVElPTkFMO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1hdCA9IHVzZU5hdGlvbmFsID8gTkFUSU9OQUwgOiBJTlRFUk5BVElPTkFMO1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyID0gaW50bFRlbElucHV0VXRpbHMuZm9ybWF0TnVtYmVyKG51bWJlciwgdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmlzbzIsIGZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyID0gdGhpcy5fYmVmb3JlU2V0TnVtYmVyKG51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQudmFsdWUgPSBudW1iZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfdXBkYXRlRmxhZ0Zyb21OdW1iZXJcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3VwZGF0ZUZsYWdGcm9tTnVtYmVyKG9yaWdpbmFsTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIGluIG5hdGlvbmFsTW9kZSBhbmQgd2UgYWxyZWFkeSBoYXZlIFVTL0NhbmFkYSBzZWxlY3RlZCwgbWFrZSBzdXJlIHRoZSBudW1iZXIgc3RhcnRzXG4gICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYSArMSBzbyBfZ2V0RGlhbENvZGUgd2lsbCBiZSBhYmxlIHRvIGV4dHJhY3QgdGhlIGFyZWEgY29kZVxuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGU6IGlmIHdlIGRvbnQgeWV0IGhhdmUgc2VsZWN0ZWRDb3VudHJ5RGF0YSwgYnV0IHdlJ3JlIGhlcmUgKHRyeWluZyB0byB1cGRhdGUgdGhlIGZsYWdcbiAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgbnVtYmVyKSwgdGhhdCBtZWFucyB3ZSdyZSBpbml0aWFsaXNpbmcgdGhlIHBsdWdpbiB3aXRoIGEgbnVtYmVyIHRoYXQgYWxyZWFkeSBoYXMgYVxuICAgICAgICAgICAgICAgICAgICAvLyBkaWFsIGNvZGUsIHNvIGZpbmUgdG8gaWdub3JlIHRoaXMgYml0XG4gICAgICAgICAgICAgICAgICAgIHZhciBudW1iZXIgPSBvcmlnaW5hbE51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkRGlhbENvZGUgPSB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuZGlhbENvZGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc05hbnAgPSBzZWxlY3RlZERpYWxDb2RlID09PSBcIjFcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciAmJiB0aGlzLm9wdGlvbnMubmF0aW9uYWxNb2RlICYmIGlzTmFucCAmJiBudW1iZXIuY2hhckF0KDApICE9PSBcIitcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlci5jaGFyQXQoMCkgIT09IFwiMVwiKSBudW1iZXIgPSBcIjFcIi5jb25jYXQobnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciA9IFwiK1wiLmNvbmNhdChudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBmbGFnIGlmIHVzZXIgdHlwZXMgYXJlYSBjb2RlIGZvciBhbm90aGVyIGNvdW50cnlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZXBhcmF0ZURpYWxDb2RlICYmIHNlbGVjdGVkRGlhbENvZGUgJiYgbnVtYmVyLmNoYXJBdCgwKSAhPT0gXCIrXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciA9IFwiK1wiLmNvbmNhdChzZWxlY3RlZERpYWxDb2RlKS5jb25jYXQobnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB0cnkgYW5kIGV4dHJhY3QgdmFsaWQgZGlhbCBjb2RlIGZyb20gaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpYWxDb2RlID0gdGhpcy5fZ2V0RGlhbENvZGUobnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bWVyaWMgPSB0aGlzLl9nZXROdW1lcmljKG51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb3VudHJ5Q29kZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkaWFsQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50cnlDb2RlcyA9IHRoaXMuY291bnRyeUNvZGVzW3RoaXMuX2dldE51bWVyaWMoZGlhbENvZGUpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSByaWdodCBjb3VudHJ5IGlzIGFscmVhZHkgc2VsZWN0ZWQuIHRoaXMgc2hvdWxkIGJlIGZhbHNlIGlmIHRoZSBudW1iZXIgaXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvbmdlciB0aGFuIHRoZSBtYXRjaGVkIGRpYWwgY29kZSBiZWNhdXNlIGluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGlmXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVyZSBhcmUgbXVsdGlwbGUgY291bnRyeSBtYXRjaGVzLCB0aGF0IHRoZSBmaXJzdCBvbmUgaXMgc2VsZWN0ZWQgKG5vdGU6IHdlIGNvdWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGNoZWNrIHRoYXQgaGVyZSwgYnV0IGl0IHJlcXVpcmVzIHRoZSBzYW1lIGxvb3AgdGhhdCB3ZSBhbHJlYWR5IGhhdmUgbGF0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxyZWFkeVNlbGVjdGVkID0gY291bnRyeUNvZGVzLmluZGV4T2YodGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmlzbzIpICE9PSAtMSAmJiBudW1lcmljLmxlbmd0aCA8PSBkaWFsQ29kZS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVnaW9ubGVzc05hbnBOdW1iZXIgPSBzZWxlY3RlZERpYWxDb2RlID09PSBcIjFcIiAmJiB0aGlzLl9pc1JlZ2lvbmxlc3NOYW5wKG51bWVyaWMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSB1cGRhdGUgdGhlIGZsYWcgaWY6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBKSBOT1QgKHdlIGN1cnJlbnRseSBoYXZlIGEgTkFOUCBmbGFnIHNlbGVjdGVkLCBhbmQgdGhlIG51bWJlciBpcyBhIHJlZ2lvbmxlc3NOYW5wKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQU5EXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBCKSB0aGUgcmlnaHQgY291bnRyeSBpcyBub3QgYWxyZWFkeSBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1JlZ2lvbmxlc3NOYW5wTnVtYmVyICYmICFhbHJlYWR5U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB1c2luZyBvbmx5Q291bnRyaWVzIG9wdGlvbiwgY291bnRyeUNvZGVzWzBdIG1heSBiZSBlbXB0eSwgc28gd2UgbXVzdCBmaW5kIHRoZSBmaXJzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbi1lbXB0eSBpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY291bnRyeUNvZGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHJ5Q29kZXNbal0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlID0gY291bnRyeUNvZGVzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyLmNoYXJBdCgwKSA9PT0gXCIrXCIgJiYgbnVtZXJpYy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludmFsaWQgZGlhbCBjb2RlLCBzbyBlbXB0eVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogdXNlIGdldE51bWVyaWMgaGVyZSBiZWNhdXNlIHRoZSBudW1iZXIgaGFzIG5vdCBiZWVuIGZvcm1hdHRlZCB5ZXQsIHNvIGNvdWxkIGNvbnRhaW5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJhZCBjaGFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFudW1iZXIgfHwgbnVtYmVyID09PSBcIitcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW1wdHksIG9yIGp1c3QgYSBwbHVzLCBzbyBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5Q29kZSA9IHRoaXMuZGVmYXVsdENvdW50cnk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50cnlDb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0RmxhZyhjb3VudHJ5Q29kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2lzUmVnaW9ubGVzc05hbnBcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2lzUmVnaW9ubGVzc05hbnAobnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBudW1lcmljID0gdGhpcy5fZ2V0TnVtZXJpYyhudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVtZXJpYy5jaGFyQXQoMCkgPT09IFwiMVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJlYUNvZGUgPSBudW1lcmljLnN1YnN0cigxLCAzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWdpb25sZXNzTmFucE51bWJlcnMuaW5kZXhPZihhcmVhQ29kZSkgIT09IC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9oaWdobGlnaHRMaXN0SXRlbVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaGlnaGxpZ2h0TGlzdEl0ZW0obGlzdEl0ZW0sIHNob3VsZEZvY3VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmV2SXRlbSA9IHRoaXMuaGlnaGxpZ2h0ZWRJdGVtO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldkl0ZW0pIHByZXZJdGVtLmNsYXNzTGlzdC5yZW1vdmUoXCJpdGlfX2hpZ2hsaWdodFwiKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRlZEl0ZW0gPSBsaXN0SXRlbTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRlZEl0ZW0uY2xhc3NMaXN0LmFkZChcIml0aV9faGlnaGxpZ2h0XCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRm9jdXMpIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfZ2V0Q291bnRyeURhdGFcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2dldENvdW50cnlEYXRhKGNvdW50cnlDb2RlLCBpZ25vcmVPbmx5Q291bnRyaWVzT3B0aW9uLCBhbGxvd0ZhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50cnlMaXN0ID0gaWdub3JlT25seUNvdW50cmllc09wdGlvbiA/IGFsbENvdW50cmllcyA6IHRoaXMuY291bnRyaWVzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50cnlMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRyeUxpc3RbaV0uaXNvMiA9PT0gY291bnRyeUNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY291bnRyeUxpc3RbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93RmFpbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY291bnRyeSBkYXRhIGZvciAnXCIuY29uY2F0KGNvdW50cnlDb2RlLCBcIidcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3NldEZsYWdcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3NldEZsYWcoY291bnRyeUNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZDb3VudHJ5ID0gdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmlzbzIgPyB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEgOiB7fTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZG8gdGhpcyBmaXJzdCBhcyBpdCB3aWxsIHRocm93IGFuIGVycm9yIGFuZCBzdG9wIGlmIGNvdW50cnlDb2RlIGlzIGludmFsaWRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhID0gY291bnRyeUNvZGUgPyB0aGlzLl9nZXRDb3VudHJ5RGF0YShjb3VudHJ5Q29kZSwgZmFsc2UsIGZhbHNlKSA6IHt9O1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGRlZmF1bHRDb3VudHJ5IC0gd2Ugb25seSBuZWVkIHRoZSBpc28yIGZyb20gbm93IG9uLCBzbyBqdXN0IHN0b3JlIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5pc28yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRDb3VudHJ5ID0gdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmlzbzI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZsYWdJbm5lci5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcIml0aV9fZmxhZyBpdGlfX1wiLmNvbmNhdChjb3VudHJ5Q29kZSkpO1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIHNlbGVjdGVkIGNvdW50cnkncyB0aXRsZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gY291bnRyeUNvZGUgPyBcIlwiLmNvbmNhdCh0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEubmFtZSwgXCI6ICtcIikuY29uY2F0KHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5kaWFsQ29kZSkgOiBcIlVua25vd25cIjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZsYWcuc2V0QXR0cmlidXRlKFwidGl0bGVcIiwgdGl0bGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlcGFyYXRlRGlhbENvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWFsQ29kZSA9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5kaWFsQ29kZSA/IFwiK1wiLmNvbmNhdCh0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuZGlhbENvZGUpIDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREaWFsQ29kZS5pbm5lckhUTUwgPSBkaWFsQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mZnNldFdpZHRoIGlzIHplcm8gaWYgaW5wdXQgaXMgaW4gYSBoaWRkZW4gY29udGFpbmVyIGR1cmluZyBpbml0aWFsaXNhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkRmxhZ1dpZHRoID0gdGhpcy5zZWxlY3RlZEZsYWcub2Zmc2V0V2lkdGggfHwgdGhpcy5fZ2V0SGlkZGVuU2VsZWN0ZWRGbGFnV2lkdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCA2cHggb2YgcGFkZGluZyBhZnRlciB0aGUgZ3JleSBzZWxlY3RlZC1kaWFsLWNvZGUgYm94LCBhcyB0aGlzIGlzIHdoYXQgd2UgdXNlIGluIHRoZSBjc3NcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQuc3R5bGUucGFkZGluZ0xlZnQgPSBcIlwiLmNvbmNhdChzZWxlY3RlZEZsYWdXaWR0aCArIDYsIFwicHhcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBpbnB1dCdzIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVBsYWNlaG9sZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgYWN0aXZlIGxpc3QgaXRlbVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFsbG93RHJvcGRvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2SXRlbSA9IHRoaXMuYWN0aXZlSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZJdGVtLmNsYXNzTGlzdC5yZW1vdmUoXCJpdGlfX2FjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2SXRlbS5zZXRBdHRyaWJ1dGUoXCJhcmlhLXNlbGVjdGVkXCIsIFwiZmFsc2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRyeUNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEl0ZW0gPSB0aGlzLmNvdW50cnlMaXN0LnF1ZXJ5U2VsZWN0b3IoXCIjaXRpLWl0ZW0tXCIuY29uY2F0KGNvdW50cnlDb2RlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEl0ZW0uc2V0QXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiLCBcInRydWVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEl0ZW0uY2xhc3NMaXN0LmFkZChcIml0aV9fYWN0aXZlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSXRlbSA9IG5leHRJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnLnNldEF0dHJpYnV0ZShcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLCBuZXh0SXRlbS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGlmIHRoZSBmbGFnIGhhcyBjaGFuZ2VkIG9yIG5vdFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldkNvdW50cnkuaXNvMiAhPT0gY291bnRyeUNvZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfZ2V0SGlkZGVuU2VsZWN0ZWRGbGFnV2lkdGhcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2dldEhpZGRlblNlbGVjdGVkRmxhZ1dpZHRoKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0byBnZXQgdGhlIHJpZ2h0IHN0eWxpbmcgdG8gYXBwbHksIGFsbCB3ZSBuZWVkIGlzIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGUgY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgdGhlbiB0byBpbmplY3QgYSBkZWVwIGNsb25lIG9mIHRoZSBzZWxlY3RlZEZsYWcgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyQ2xvbmUgPSB0aGlzLnRlbElucHV0LnBhcmVudE5vZGUuY2xvbmVOb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckNsb25lLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lckNsb25lKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkRmxhZ0Nsb25lID0gdGhpcy5zZWxlY3RlZEZsYWcuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJDbG9uZS5hcHBlbmRDaGlsZChzZWxlY3RlZEZsYWdDbG9uZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHNlbGVjdGVkRmxhZ0Nsb25lLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJDbG9uZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNvbnRhaW5lckNsb25lKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3VwZGF0ZVBsYWNlaG9sZGVyXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF91cGRhdGVQbGFjZWhvbGRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZFNldFBsYWNlaG9sZGVyID0gdGhpcy5vcHRpb25zLmF1dG9QbGFjZWhvbGRlciA9PT0gXCJhZ2dyZXNzaXZlXCIgfHwgIXRoaXMuaGFkSW5pdGlhbFBsYWNlaG9sZGVyICYmIHRoaXMub3B0aW9ucy5hdXRvUGxhY2Vob2xkZXIgPT09IFwicG9saXRlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50bFRlbElucHV0VXRpbHMgJiYgc2hvdWxkU2V0UGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1iZXJUeXBlID0gaW50bFRlbElucHV0VXRpbHMubnVtYmVyVHlwZVt0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXJOdW1iZXJUeXBlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbGFjZWhvbGRlciA9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5pc28yID8gaW50bFRlbElucHV0VXRpbHMuZ2V0RXhhbXBsZU51bWJlcih0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuaXNvMiwgdGhpcy5vcHRpb25zLm5hdGlvbmFsTW9kZSwgbnVtYmVyVHlwZSkgOiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSB0aGlzLl9iZWZvcmVTZXROdW1iZXIocGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuY3VzdG9tUGxhY2Vob2xkZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyID0gdGhpcy5vcHRpb25zLmN1c3RvbVBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyLCB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5zZXRBdHRyaWJ1dGUoXCJwbGFjZWhvbGRlclwiLCBwbGFjZWhvbGRlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9zZWxlY3RMaXN0SXRlbVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc2VsZWN0TGlzdEl0ZW0obGlzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHNlbGVjdGVkIGZsYWcgYW5kIGFjdGl2ZSBsaXN0IGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWdDaGFuZ2VkID0gdGhpcy5fc2V0RmxhZyhsaXN0SXRlbS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNvdW50cnktY29kZVwiKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlRGlhbENvZGUobGlzdEl0ZW0uZ2V0QXR0cmlidXRlKFwiZGF0YS1kaWFsLWNvZGVcIiksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAvLyBmb2N1cyB0aGUgaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAvLyBwdXQgY3Vyc29yIGF0IGVuZCAtIHRoaXMgZml4IGlzIHJlcXVpcmVkIGZvciBGRiBhbmQgSUUxMSAod2l0aCBuYXRpb25hbE1vZGU9ZmFsc2UgaS5lLiBhdXRvXG4gICAgICAgICAgICAgICAgICAgIC8vIGluc2VydGluZyBkaWFsIGNvZGUpLCB3aG8gdHJ5IHRvIHB1dCB0aGUgY3Vyc29yIGF0IHRoZSBiZWdpbm5pbmcgdGhlIGZpcnN0IHRpbWVcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbiA9IHRoaXMudGVsSW5wdXQudmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LnNldFNlbGVjdGlvblJhbmdlKGxlbiwgbGVuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyQ291bnRyeUNoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfY2xvc2VEcm9wZG93blwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfY2xvc2VEcm9wZG93bigpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudHJ5TGlzdC5jbGFzc0xpc3QuYWRkKFwiaXRpX19oaWRlXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxhZy5zZXRBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIsIFwiZmFsc2VcIik7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgYXJyb3dcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bkFycm93LmNsYXNzTGlzdC5yZW1vdmUoXCJpdGlfX2Fycm93LS11cFwiKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdW5iaW5kIGtleSBldmVudHNcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5faGFuZGxlS2V5ZG93bk9uRHJvcGRvd24pO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX2hhbmRsZUNsaWNrT2ZmVG9DbG9zZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRyeUxpc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCB0aGlzLl9oYW5kbGVNb3VzZW92ZXJDb3VudHJ5TGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRyeUxpc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX2hhbmRsZUNsaWNrQ291bnRyeUxpc3QpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgbWVudSBmcm9tIGNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRyb3Bkb3duQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNNb2JpbGUpIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMuX2hhbmRsZVdpbmRvd1Njcm9sbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kcm9wZG93bi5wYXJlbnROb2RlKSB0aGlzLmRyb3Bkb3duLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kcm9wZG93bik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcihcImNsb3NlOmNvdW50cnlkcm9wZG93blwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9zY3JvbGxUb1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc2Nyb2xsVG8oZWxlbWVudCwgbWlkZGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLmNvdW50cnlMaXN0O1xuICAgICAgICAgICAgICAgICAgICAvLyB3aW5kb3dUb3AgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTQzODQwOTEvMjE3ODY2XG4gICAgICAgICAgICAgICAgICAgIHZhciB3aW5kb3dUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lckhlaWdodCA9IGNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250YWluZXJUb3AgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93VG9wO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyQm90dG9tID0gY29udGFpbmVyVG9wICsgY29udGFpbmVySGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudEhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudFRvcCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93VG9wO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudEJvdHRvbSA9IGVsZW1lbnRUb3AgKyBlbGVtZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3U2Nyb2xsVG9wID0gZWxlbWVudFRvcCAtIGNvbnRhaW5lclRvcCArIGNvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtaWRkbGVPZmZzZXQgPSBjb250YWluZXJIZWlnaHQgLyAyIC0gZWxlbWVudEhlaWdodCAvIDI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50VG9wIDwgY29udGFpbmVyVG9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzY3JvbGwgdXBcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtaWRkbGUpIG5ld1Njcm9sbFRvcCAtPSBtaWRkbGVPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gbmV3U2Nyb2xsVG9wO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRCb3R0b20gPiBjb250YWluZXJCb3R0b20pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNjcm9sbCBkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWlkZGxlKSBuZXdTY3JvbGxUb3AgKz0gbWlkZGxlT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodERpZmZlcmVuY2UgPSBjb250YWluZXJIZWlnaHQgLSBlbGVtZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCA9IG5ld1Njcm9sbFRvcCAtIGhlaWdodERpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl91cGRhdGVEaWFsQ29kZVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfdXBkYXRlRGlhbENvZGUobmV3RGlhbENvZGVCYXJlLCBoYXNTZWxlY3RlZExpc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dFZhbCA9IHRoaXMudGVsSW5wdXQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNhdmUgaGF2aW5nIHRvIHBhc3MgdGhpcyBldmVyeSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdEaWFsQ29kZSA9IFwiK1wiLmNvbmNhdChuZXdEaWFsQ29kZUJhcmUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3TnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWwuY2hhckF0KDApID09PSBcIitcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlcmUncyBhIHBsdXMgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgcmVwbGFjZW1lbnQgKGRvZXNuJ3QgbWF0dGVyIGlmIG5hdGlvbmFsTW9kZSBvciBub3QpXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldkRpYWxDb2RlID0gdGhpcy5fZ2V0RGlhbENvZGUoaW5wdXRWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZEaWFsQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgbnVtYmVyIGNvbnRhaW5zIGEgdmFsaWQgZGlhbCBjb2RlLCBzbyByZXBsYWNlIGl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3TnVtYmVyID0gaW5wdXRWYWwucmVwbGFjZShwcmV2RGlhbENvZGUsIG5ld0RpYWxDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBudW1iZXIgY29udGFpbnMgYW4gaW52YWxpZCBkaWFsIGNvZGUsIHNvIGRpdGNoIGl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKG5vIHdheSB0byBkZXRlcm1pbmUgd2hlcmUgdGhlIGludmFsaWQgZGlhbCBjb2RlIGVuZHMgYW5kIHRoZSByZXN0IG9mIHRoZSBudW1iZXIgYmVnaW5zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld051bWJlciA9IG5ld0RpYWxDb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5uYXRpb25hbE1vZGUgfHwgdGhpcy5vcHRpb25zLnNlcGFyYXRlRGlhbENvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IGRvIGFueXRoaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBuYXRpb25hbE1vZGUgaXMgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzIGFuIGV4aXN0aW5nIHZhbHVlIHdpdGggbm8gZGlhbCBjb2RlOiBwcmVmaXggdGhlIG5ldyBkaWFsIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOdW1iZXIgPSBuZXdEaWFsQ29kZSArIGlucHV0VmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNTZWxlY3RlZExpc3RJdGVtIHx8ICF0aGlzLm9wdGlvbnMuYXV0b0hpZGVEaWFsQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGV4aXN0aW5nIHZhbHVlIGFuZCBlaXRoZXIgdGhleSd2ZSBqdXN0IHNlbGVjdGVkIGEgbGlzdCBpdGVtLCBvciBhdXRvSGlkZURpYWxDb2RlIGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZWQ6IGluc2VydCBuZXcgZGlhbCBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3TnVtYmVyID0gbmV3RGlhbENvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LnZhbHVlID0gbmV3TnVtYmVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2dldERpYWxDb2RlXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXREaWFsQ29kZShudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpYWxDb2RlID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSBpbnRlcmVzdGVkIGluIGludGVybmF0aW9uYWwgbnVtYmVycyAoc3RhcnRpbmcgd2l0aCBhIHBsdXMpXG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIuY2hhckF0KDApID09PSBcIitcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bWVyaWNDaGFycyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdGVyYXRlIG92ZXIgY2hhcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBudW1iZXIuY2hhckF0KGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGNoYXIgaXMgbnVtYmVyIChodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvODkzNTY0OS8yMTc4NjYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihwYXJzZUludChjLCAxMCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWNDaGFycyArPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBjdXJyZW50IG51bWVyaWNDaGFycyBtYWtlIGEgdmFsaWQgZGlhbCBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvdW50cnlDb2Rlc1tudW1lcmljQ2hhcnNdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9yZSB0aGUgYWN0dWFsIHJhdyBzdHJpbmcgKHVzZWZ1bCBmb3IgbWF0Y2hpbmcgbGF0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsQ29kZSA9IG51bWJlci5zdWJzdHIoMCwgaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1lcmljQ2hhcnMubGVuZ3RoID09PSB0aGlzLmRpYWxDb2RlTWF4TGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlhbENvZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfZ2V0RnVsbE51bWJlclwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0RnVsbE51bWJlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMudGVsSW5wdXQudmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGlhbENvZGUgPSB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuZGlhbENvZGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmVmaXg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBudW1lcmljVmFsID0gdGhpcy5fZ2V0TnVtZXJpYyh2YWwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlcGFyYXRlRGlhbENvZGUgJiYgdmFsLmNoYXJBdCgwKSAhPT0gXCIrXCIgJiYgZGlhbENvZGUgJiYgbnVtZXJpY1ZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB1c2luZyBzZXBhcmF0ZURpYWxDb2RlLCBpdCBpcyB2aXNpYmxlIHNvIGlzIGVmZmVjdGl2ZWx5IHBhcnQgb2YgdGhlIHR5cGVkIG51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gXCIrXCIuY29uY2F0KGRpYWxDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArIHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9iZWZvcmVTZXROdW1iZXJcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2JlZm9yZVNldE51bWJlcihvcmlnaW5hbE51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtYmVyID0gb3JpZ2luYWxOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VwYXJhdGVEaWFsQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpYWxDb2RlID0gdGhpcy5fZ2V0RGlhbENvZGUobnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgdmFsaWQgZGlhbCBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlhbENvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIF9nZXREaWFsQ29kZSByZXR1cm5lZCBhbiBhcmVhIGNvZGUgYXMgd2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxDb2RlID0gXCIrXCIuY29uY2F0KHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5kaWFsQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBsb3Qgb2YgbnVtYmVycyB3aWxsIGhhdmUgYSBzcGFjZSBzZXBhcmF0aW5nIHRoZSBkaWFsIGNvZGUgYW5kIHRoZSBtYWluIG51bWJlciwgYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc29tZSBOQU5QIG51bWJlcnMgd2lsbCBoYXZlIGEgaHlwaGVuIGUuZy4gKzEgNjg0LTczMy0xMjM0IC0gaW4gYm90aCBjYXNlcyB3ZSB3YW50IHRvIGdldFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJpZCBvZiBpdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGRvbid0IGp1c3QgdHJpbSBhbGwgbm9uLW51bWVyaWNzIGFzIG1heSB3YW50IHRvIHByZXNlcnZlIGFuIG9wZW4gcGFyZW50aGVzaXMgZXRjXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gbnVtYmVyW2RpYWxDb2RlLmxlbmd0aF0gPT09IFwiIFwiIHx8IG51bWJlcltkaWFsQ29kZS5sZW5ndGhdID09PSBcIi1cIiA/IGRpYWxDb2RlLmxlbmd0aCArIDEgOiBkaWFsQ29kZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyLnN1YnN0cihzdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcChudW1iZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3RyaWdnZXJDb3VudHJ5Q2hhbmdlXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF90cmlnZ2VyQ291bnRyeUNoYW5nZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcihcImNvdW50cnljaGFuZ2VcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJoYW5kbGVBdXRvQ291bnRyeVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVBdXRvQ291bnRyeSgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbml0aWFsQ291bnRyeSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG11c3Qgc2V0IHRoaXMgZXZlbiBpZiB0aGVyZSBpcyBhbiBpbml0aWFsIHZhbCBpbiB0aGUgaW5wdXQ6IGluIGNhc2UgdGhlIGluaXRpYWwgdmFsIGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnZhbGlkIGFuZCB0aGV5IGRlbGV0ZSBpdCAtIHRoZXkgc2hvdWxkIHNlZSB0aGVpciBhdXRvIGNvdW50cnlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvdW50cnkgPSB3aW5kb3cuaW50bFRlbElucHV0R2xvYmFscy5hdXRvQ291bnRyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlJ3Mgbm8gaW5pdGlhbCB2YWx1ZSBpbiB0aGUgaW5wdXQsIHRoZW4gdXBkYXRlIHRoZSBmbGFnXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGVsSW5wdXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENvdW50cnkodGhpcy5kZWZhdWx0Q291bnRyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVBdXRvQ291bnRyeVByb21pc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiaGFuZGxlVXRpbHNcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlVXRpbHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsXG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50bFRlbElucHV0VXRpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlJ3MgYW4gaW5pdGlhbCB2YWx1ZSBpbiB0aGUgaW5wdXQsIHRoZW4gZm9ybWF0IGl0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50ZWxJbnB1dC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZhbEZyb21OdW1iZXIodGhpcy50ZWxJbnB1dC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVQbGFjZWhvbGRlcigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVV0aWxzU2NyaXB0UHJvbWlzZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiZGVzdHJveVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9ybSA9IHRoaXMudGVsSW5wdXQuZm9ybTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hbGxvd0Ryb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGRyb3Bkb3duIGlzIGNsb3NlZCAoYW5kIHVuYmluZCBsaXN0ZW5lcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxhZy5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlQ2xpY2tTZWxlY3RlZEZsYWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mbGFnc0NvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLl9oYW5kbGVGbGFnc0NvbnRhaW5lcktleWRvd24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGFiZWwgY2xpY2sgaGFja1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhYmVsID0gdGhpcy5fZ2V0Q2xvc2VzdExhYmVsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFiZWwpIGxhYmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oYW5kbGVMYWJlbENsaWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB1bmJpbmQgaGlkZGVuSW5wdXQgbGlzdGVuZXJzXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhpZGRlbklucHV0ICYmIGZvcm0pIGZvcm0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCB0aGlzLl9oYW5kbGVIaWRkZW5JbnB1dFN1Ym1pdCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVuYmluZCBhdXRvSGlkZURpYWxDb2RlIGxpc3RlbmVyc1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9IaWRlRGlhbENvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtKSBmb3JtLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgdGhpcy5faGFuZGxlU3VibWl0T3JCbHVyRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLCB0aGlzLl9oYW5kbGVTdWJtaXRPckJsdXJFdmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5iaW5kIGtleSBldmVudHMsIGFuZCBjdXQvcGFzdGUgZXZlbnRzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHRoaXMuX2hhbmRsZUtleXVwRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjdXRcIiwgdGhpcy5faGFuZGxlQ2xpcGJvYXJkRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwYXN0ZVwiLCB0aGlzLl9oYW5kbGVDbGlwYm9hcmRFdmVudCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhdHRyaWJ1dGUgb2YgaWQgaW5zdGFuY2U6IGRhdGEtaW50bC10ZWwtaW5wdXQtaWRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLWludGwtdGVsLWlucHV0LWlkXCIpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgbWFya3VwIChidXQgbGVhdmUgdGhlIG9yaWdpbmFsIGlucHV0KVxuICAgICAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IHRoaXMudGVsSW5wdXQucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLnRlbElucHV0LCB3cmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHdyYXBwZXIpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgd2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMuaW5zdGFuY2VzW3RoaXMuaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0RXh0ZW5zaW9uXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEV4dGVuc2lvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRsVGVsSW5wdXRVdGlscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGxUZWxJbnB1dFV0aWxzLmdldEV4dGVuc2lvbih0aGlzLl9nZXRGdWxsTnVtYmVyKCksIHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5pc28yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImdldE51bWJlclwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXROdW1iZXIoZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50bFRlbElucHV0VXRpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc28yID0gdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmlzbzI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50bFRlbElucHV0VXRpbHMuZm9ybWF0TnVtYmVyKHRoaXMuX2dldEZ1bGxOdW1iZXIoKSwgaXNvMiwgZm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImdldE51bWJlclR5cGVcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TnVtYmVyVHlwZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRsVGVsSW5wdXRVdGlscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGxUZWxJbnB1dFV0aWxzLmdldE51bWJlclR5cGUodGhpcy5fZ2V0RnVsbE51bWJlcigpLCB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuaXNvMik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC05OTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImdldFNlbGVjdGVkQ291bnRyeURhdGFcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2VsZWN0ZWRDb3VudHJ5RGF0YSgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImdldFZhbGlkYXRpb25FcnJvclwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWxpZGF0aW9uRXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50bFRlbElucHV0VXRpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc28yID0gdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmlzbzI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50bFRlbElucHV0VXRpbHMuZ2V0VmFsaWRhdGlvbkVycm9yKHRoaXMuX2dldEZ1bGxOdW1iZXIoKSwgaXNvMik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC05OTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImlzVmFsaWROdW1iZXJcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNWYWxpZE51bWJlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMuX2dldEZ1bGxOdW1iZXIoKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb3VudHJ5Q29kZSA9IHRoaXMub3B0aW9ucy5uYXRpb25hbE1vZGUgPyB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuaXNvMiA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cuaW50bFRlbElucHV0VXRpbHMgPyBpbnRsVGVsSW5wdXRVdGlscy5pc1ZhbGlkTnVtYmVyKHZhbCwgY291bnRyeUNvZGUpIDogbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcInNldENvdW50cnlcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0Q291bnRyeShvcmlnaW5hbENvdW50cnlDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb3VudHJ5Q29kZSA9IG9yaWdpbmFsQ291bnRyeUNvZGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgYWxyZWFkeSBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGbGFnSW5uZXIuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaXRpX19cIi5jb25jYXQoY291bnRyeUNvZGUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0RmxhZyhjb3VudHJ5Q29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVEaWFsQ29kZSh0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuZGlhbENvZGUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJDb3VudHJ5Q2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcInNldE51bWJlclwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXROdW1iZXIobnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIG11c3QgdXBkYXRlIHRoZSBmbGFnIGZpcnN0LCB3aGljaCB1cGRhdGVzIHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YSwgd2hpY2ggaXMgdXNlZCBmb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9ybWF0dGluZyB0aGUgbnVtYmVyIGJlZm9yZSBkaXNwbGF5aW5nIGl0XG4gICAgICAgICAgICAgICAgICAgIHZhciBmbGFnQ2hhbmdlZCA9IHRoaXMuX3VwZGF0ZUZsYWdGcm9tTnVtYmVyKG51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZhbEZyb21OdW1iZXIobnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyQ291bnRyeUNoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJzZXRQbGFjZWhvbGRlck51bWJlclR5cGVcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0UGxhY2Vob2xkZXJOdW1iZXJUeXBlKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyTnVtYmVyVHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVBsYWNlaG9sZGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBdKTtcbiAgICAgICAgICAgIHJldHVybiBJdGk7XG4gICAgICAgIH0oKTtcbiAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqXG4gKiAgU1RBVElDIE1FVEhPRFNcbiAqKioqKioqKioqKioqKioqKioqKi9cbiAgICAgICAgLy8gZ2V0IHRoZSBjb3VudHJ5IGRhdGEgb2JqZWN0XG4gICAgICAgIGludGxUZWxJbnB1dEdsb2JhbHMuZ2V0Q291bnRyeURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBhbGxDb3VudHJpZXM7XG4gICAgICAgIH07XG4gICAgICAgIC8vIGluamVjdCBhIDxzY3JpcHQ+IGVsZW1lbnQgdG8gbG9hZCB1dGlscy5qc1xuICAgICAgICB2YXIgaW5qZWN0U2NyaXB0ID0gZnVuY3Rpb24gaW5qZWN0U2NyaXB0KHBhdGgsIGhhbmRsZVN1Y2Nlc3MsIGhhbmRsZUZhaWx1cmUpIHtcbiAgICAgICAgICAgIC8vIGluamVjdCBhIG5ldyBzY3JpcHQgZWxlbWVudCBpbnRvIHRoZSBwYWdlXG4gICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBmb3JFYWNoSW5zdGFuY2UoXCJoYW5kbGVVdGlsc1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlU3VjY2VzcykgaGFuZGxlU3VjY2VzcygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNjcmlwdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgZm9yRWFjaEluc3RhbmNlKFwicmVqZWN0VXRpbHNTY3JpcHRQcm9taXNlXCIpO1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGVGYWlsdXJlKSBoYW5kbGVGYWlsdXJlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2NyaXB0LmNsYXNzTmFtZSA9IFwiaXRpLWxvYWQtdXRpbHNcIjtcbiAgICAgICAgICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgICAgICAgICBzY3JpcHQuc3JjID0gcGF0aDtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gbG9hZCB0aGUgdXRpbHMgc2NyaXB0XG4gICAgICAgIGludGxUZWxJbnB1dEdsb2JhbHMubG9hZFV0aWxzID0gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICAgICAgLy8gMiBvcHRpb25zOlxuICAgICAgICAgICAgLy8gMSkgbm90IGFscmVhZHkgc3RhcnRlZCBsb2FkaW5nIChzdGFydClcbiAgICAgICAgICAgIC8vIDIpIGFscmVhZHkgc3RhcnRlZCBsb2FkaW5nIChkbyBub3RoaW5nIC0ganVzdCB3YWl0IGZvciB0aGUgb25sb2FkIGNhbGxiYWNrIHRvIGZpcmUsIHdoaWNoIHdpbGxcbiAgICAgICAgICAgIC8vIHRyaWdnZXIgaGFuZGxlVXRpbHMgb24gYWxsIGluc3RhbmNlcywgaW52b2tpbmcgdGhlaXIgcmVzb2x2ZVV0aWxzU2NyaXB0UHJvbWlzZSBmdW5jdGlvbnMpXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5pbnRsVGVsSW5wdXRVdGlscyAmJiAhd2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMuc3RhcnRlZExvYWRpbmdVdGlsc1NjcmlwdCkge1xuICAgICAgICAgICAgICAgIC8vIG9ubHkgZG8gdGhpcyBvbmNlXG4gICAgICAgICAgICAgICAgd2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMuc3RhcnRlZExvYWRpbmdVdGlsc1NjcmlwdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBwcm9taXNlcywgdGhlbiByZXR1cm4gYSBwcm9taXNlXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBQcm9taXNlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmplY3RTY3JpcHQocGF0aCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluamVjdFNjcmlwdChwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuICAgICAgICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgICAgICAgaW50bFRlbElucHV0R2xvYmFscy5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuICAgICAgICAvLyB2ZXJzaW9uXG4gICAgICAgIGludGxUZWxJbnB1dEdsb2JhbHMudmVyc2lvbiA9IFwiMTYuMS4wXCI7XG4gICAgICAgIC8vIGNvbnZlbmllbmNlIHdyYXBwZXJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgaXRpID0gbmV3IEl0aShpbnB1dCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpdGkuX2luaXQoKTtcbiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZShcImRhdGEtaW50bC10ZWwtaW5wdXQtaWRcIiwgaXRpLmlkKTtcbiAgICAgICAgICAgIHdpbmRvdy5pbnRsVGVsSW5wdXRHbG9iYWxzLmluc3RhbmNlc1tpdGkuaWRdID0gaXRpO1xuICAgICAgICAgICAgcmV0dXJuIGl0aTtcbiAgICAgICAgfTtcbiAgICB9KCk7XG59KTsiLCIvKipcbiAqIEV4cG9zaW5nIGludGwtdGVsLWlucHV0IGFzIGEgY29tcG9uZW50XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vYnVpbGQvanMvaW50bFRlbElucHV0XCIpO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsInZhciBuZXh0VGljayA9IHJlcXVpcmUoJ3Byb2Nlc3MvYnJvd3Nlci5qcycpLm5leHRUaWNrO1xudmFyIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGltbWVkaWF0ZUlkcyA9IHt9O1xudmFyIG5leHRJbW1lZGlhdGVJZCA9IDA7XG5cbi8vIERPTSBBUElzLCBmb3IgY29tcGxldGVuZXNzXG5cbmV4cG9ydHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LCB3aW5kb3csIGFyZ3VtZW50cyksIGNsZWFyVGltZW91dCk7XG59O1xuZXhwb3J0cy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRJbnRlcnZhbCwgd2luZG93LCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7IHRpbWVvdXQuY2xvc2UoKTsgfTtcblxuZnVuY3Rpb24gVGltZW91dChpZCwgY2xlYXJGbikge1xuICB0aGlzLl9pZCA9IGlkO1xuICB0aGlzLl9jbGVhckZuID0gY2xlYXJGbjtcbn1cblRpbWVvdXQucHJvdG90eXBlLnVucmVmID0gVGltZW91dC5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7fTtcblRpbWVvdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFyRm4uY2FsbCh3aW5kb3csIHRoaXMuX2lkKTtcbn07XG5cbi8vIERvZXMgbm90IHN0YXJ0IHRoZSB0aW1lLCBqdXN0IHNldHMgdXAgdGhlIG1lbWJlcnMgbmVlZGVkLlxuZXhwb3J0cy5lbnJvbGwgPSBmdW5jdGlvbihpdGVtLCBtc2Vjcykge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gbXNlY3M7XG59O1xuXG5leHBvcnRzLnVuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gLTE7XG59O1xuXG5leHBvcnRzLl91bnJlZkFjdGl2ZSA9IGV4cG9ydHMuYWN0aXZlID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG5cbiAgdmFyIG1zZWNzID0gaXRlbS5faWRsZVRpbWVvdXQ7XG4gIGlmIChtc2VjcyA+PSAwKSB7XG4gICAgaXRlbS5faWRsZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gb25UaW1lb3V0KCkge1xuICAgICAgaWYgKGl0ZW0uX29uVGltZW91dClcbiAgICAgICAgaXRlbS5fb25UaW1lb3V0KCk7XG4gICAgfSwgbXNlY3MpO1xuICB9XG59O1xuXG4vLyBUaGF0J3Mgbm90IGhvdyBub2RlLmpzIGltcGxlbWVudHMgaXQgYnV0IHRoZSBleHBvc2VkIGFwaSBpcyB0aGUgc2FtZS5cbmV4cG9ydHMuc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gXCJmdW5jdGlvblwiID8gc2V0SW1tZWRpYXRlIDogZnVuY3Rpb24oZm4pIHtcbiAgdmFyIGlkID0gbmV4dEltbWVkaWF0ZUlkKys7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBmYWxzZSA6IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICBpbW1lZGlhdGVJZHNbaWRdID0gdHJ1ZTtcblxuICBuZXh0VGljayhmdW5jdGlvbiBvbk5leHRUaWNrKCkge1xuICAgIGlmIChpbW1lZGlhdGVJZHNbaWRdKSB7XG4gICAgICAvLyBmbi5jYWxsKCkgaXMgZmFzdGVyIHNvIHdlIG9wdGltaXplIGZvciB0aGUgY29tbW9uIHVzZS1jYXNlXG4gICAgICAvLyBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL2NhbGwtYXBwbHktc2VndVxuICAgICAgaWYgKGFyZ3MpIHtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbi5jYWxsKG51bGwpO1xuICAgICAgfVxuICAgICAgLy8gUHJldmVudCBpZHMgZnJvbSBsZWFraW5nXG4gICAgICBleHBvcnRzLmNsZWFySW1tZWRpYXRlKGlkKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpZDtcbn07XG5cbmV4cG9ydHMuY2xlYXJJbW1lZGlhdGUgPSB0eXBlb2YgY2xlYXJJbW1lZGlhdGUgPT09IFwiZnVuY3Rpb25cIiA/IGNsZWFySW1tZWRpYXRlIDogZnVuY3Rpb24oaWQpIHtcbiAgZGVsZXRlIGltbWVkaWF0ZUlkc1tpZF07XG59OyIsImltcG9ydCB7IEN1c3RvbUlucHV0RWxlbWVudCB9IGZyb20gJy4vZnJhbWV3b3JrL0N1c3RvbUlucHV0RWxlbWVudCc7XHJcbmltcG9ydCB7IEZpbGVGaWVsZEVsZW1lbnQgfSBmcm9tICcuL2VsZW1lbnRzL0ZpbGVGaWVsZC9GaWxlRmllbGRFbGVtZW50JztcclxuaW1wb3J0IHsgQXJyYXlVdGlsLCBNYWtlUmVxdWVzdCB9IGZyb20gJ0BsdWZ0Ym9ybi91dGlsaXRpZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZvcm0ge1xyXG5cdGFjdGlvbjogc3RyaW5nO1xyXG5cdG1ldGhvZDogc3RyaW5nO1xyXG5cdF9uYXRpdmVJbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXTtcclxuXHJcblx0cHVibGljIG9uc3VibWl0OiAoKHRoaXM6IEN1c3RvbUZvcm0sIHByb21pc2U6IFByb21pc2U8YW55PikgPT4gYW55KSB8IG51bGw7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybTogSFRNTEZvcm1FbGVtZW50KSB7XHJcblx0XHR0aGlzLmFjdGlvbiA9IGZvcm0uYWN0aW9uIHx8ICcnO1xyXG5cdFx0dGhpcy5tZXRob2QgPSBmb3JtLm1ldGhvZCB8fCAnZ2V0JztcclxuXHRcdHRoaXMuYXR0YWNoRm9ybSgpO1xyXG5cdFx0dGhpcy5iaW5Hcm91cHNUb0RlcGVuZGVuY3koKTtcclxuXHR9XHJcblxyXG5cdGdldCBpbnB1dHMoKTogQ3VzdG9tSW5wdXRFbGVtZW50W10ge1xyXG5cdFx0cmV0dXJuIEFycmF5VXRpbC5Gcm9tTm9kZUxpc3QodGhpcy5mb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoJy5ncm91cC1jb250YWluZXI6bm90KFtoaWRkZW5dKSBbY3VzdG9tLWlucHV0XTpub3QoW2hpZGRlbl0pJykpO1xyXG5cdH1cclxuXHRnZXQgbmF0aXZlSW5wdXRzKCk6IEhUTUxJbnB1dEVsZW1lbnRbXSB7XHJcblx0XHR0aGlzLl9uYXRpdmVJbnB1dHMgPVxyXG5cdFx0XHR0aGlzLl9uYXRpdmVJbnB1dHMgfHxcclxuXHRcdFx0QXJyYXlVdGlsLkZyb21Ob2RlTGlzdCh0aGlzLmZvcm0ucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQnKSk7XHJcblx0XHRyZXR1cm4gdGhpcy5fbmF0aXZlSW5wdXRzO1xyXG5cdH1cclxuXHJcblx0Z2V0IGhhc0ZpbGVzKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuaW5wdXRzLnNvbWUoaW5wdXQgPT4gaW5wdXQgaW5zdGFuY2VvZiBGaWxlRmllbGRFbGVtZW50KTtcclxuXHR9XHJcblxyXG5cdGF0dGFjaEZvcm0oKSB7XHJcblx0XHR0aGlzLmZvcm0ub25zdWJtaXQgPSBldmVudCA9PiB7XHJcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdGxldCB2YWxpZCA9IHRoaXMudmFsaWRhdGUoKTtcclxuXHRcdFx0aWYgKHZhbGlkKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMub25zdWJtaXQpIHtcclxuXHRcdFx0XHRcdHRoaXMub25zdWJtaXQodGhpcy5zdWJtaXQoKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0dmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcblx0XHR0aGlzLmlucHV0cy5mb3JFYWNoKGlucHV0ID0+ICg8Q3VzdG9tSW5wdXRFbGVtZW50PmlucHV0KS52YWxpZGF0ZSgpKTtcclxuXHRcdHJldHVybiB0aGlzLmlucHV0cy5ldmVyeShpbnB1dCA9PiAoPEN1c3RvbUlucHV0RWxlbWVudD5pbnB1dCkudmFsaWQpO1xyXG5cdH1cclxuXHJcblx0c3VibWl0KCk6IFByb21pc2U8YW55PiB7XHJcblx0XHRsZXQgZm9ybURhdGEgPSB7fTtcclxuXHRcdGNvbnN0IGhlYWRlcnM6IGFueSA9IHt9O1xyXG5cdFx0dGhpcy5pbnB1dHMubWFwKGkgPT4gKGZvcm1EYXRhW2kubmFtZV0gPSBpLnZhbHVlKSk7XHJcblx0XHRmb3JtRGF0YSA9IHRoaXMuZXh0cmFjdERhdGEoKTtcclxuXHRcdHJldHVybiBuZXcgTWFrZVJlcXVlc3QodGhpcy5hY3Rpb24sIHRoaXMubWV0aG9kLCBoZWFkZXJzKS5zZW5kKFxyXG5cdFx0XHRmb3JtRGF0YSxcclxuXHRcdCk7XHJcblx0fVxyXG5cdHByaXZhdGUgZXh0cmFjdERhdGEoKTogRm9ybURhdGEge1xyXG5cdFx0Y29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcblx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIHRoaXMuaW5wdXRzKSB7XHJcblx0XHRcdGlmIChpbnB1dCBpbnN0YW5jZW9mIEZpbGVGaWVsZEVsZW1lbnQpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaW5wdXQudmFsdWUubGVuZ3RoOyBpbmRleCsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBmaWxlID0gaW5wdXQudmFsdWVbaW5kZXhdO1xyXG5cdFx0XHRcdFx0Zm9ybURhdGEuYXBwZW5kKGlucHV0Lm5hbWUsIGZpbGUsIGZpbGUubmFtZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZvcm1EYXRhLmFwcGVuZChgVmFsdWVzWyR7aW5wdXQubmFtZX1dYCwgaW5wdXQudmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIHRoaXMubmF0aXZlSW5wdXRzKSB7XHJcblx0XHRcdGlmIChpbnB1dC5uYW1lKSB7XHJcblx0XHRcdFx0Zm9ybURhdGEuYXBwZW5kKGlucHV0Lm5hbWUsIGlucHV0LnZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZvcm1EYXRhO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBiaW5Hcm91cHNUb0RlcGVuZGVuY3koKSB7XHJcblx0XHRsZXQgZ3JvdXBDb250YWluZXJzID0gdGhpcy5mb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoJ2Rpdi5ncm91cC1jb250YWluZXI6bm90KFtkYXRhLWRlcGVuZHMtb249XCJcIl0pJyxcclxuXHRcdCk7XHJcblx0XHRncm91cENvbnRhaW5lcnMuZm9yRWFjaCgoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcclxuXHRcdFx0bGV0IGRlcGVuZGVudEZpZWxkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGVwZW5kcy1vbicpO1xyXG5cdFx0XHRsZXQgZGVwZW5kZW50VmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1kZXBlbmRlbnQtdmFsdWUnKTtcclxuXHRcdFx0bGV0IGN1c3RvbUVsZW1lbnQ6IEN1c3RvbUlucHV0RWxlbWVudCA9IGRvY3VtZW50LmZvcm1zWzBdLnF1ZXJ5U2VsZWN0b3IoYFtuYW1lPVwiJHtkZXBlbmRlbnRGaWVsZH1cIl1gKSBhcyBDdXN0b21JbnB1dEVsZW1lbnQ7XHJcblx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiaGlkZGVuXCIsIFwiXCIpO1xyXG5cdFx0XHRjdXN0b21FbGVtZW50Lm9uQ2hhbmdlLm9uKGV2ZW50ID0+IHtcclxuXHRcdFx0XHRpZiAoZXZlbnQudmFsdWUgPT09IGRlcGVuZGVudFZhbHVlIHx8IGV2ZW50LnZhbHVlLmluZGV4T2YoZGVwZW5kZW50VmFsdWUpID49IDApIHtcclxuXHRcdFx0XHRcdHRoaXMuc2hvd0dyb3VwQW5kSXRzRGVwZW5kZW5jaWVzKGVsZW1lbnQpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLmhpZGVHcm91cEFuZEl0c0RlcGVuZGVuY2llcyhlbGVtZW50KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGhpZGVHcm91cEFuZEl0c0RlcGVuZGVuY2llcyhncm91cDogRWxlbWVudCkge1xyXG5cdFx0Y29uc3QgaW5wdXRFbGVtZW50c0luc2lkZUdyb3VwID0gdGhpcy5pbnB1dHMuZmlsdGVyKGlucHV0ID0+IHRoaXMuaXNEZXNjZW5kYW50KGdyb3VwLCBpbnB1dCkpO1xyXG5cdFx0Z3JvdXAuc2V0QXR0cmlidXRlKFwiaGlkZGVuXCIsIFwiXCIpO1xyXG5cdFx0bGV0IGdyb3VwQ29udGFpbmVycyA9IHRoaXMuZm9ybS5xdWVyeVNlbGVjdG9yQWxsKCdkaXYuZ3JvdXAtY29udGFpbmVyOm5vdChbZGF0YS1kZXBlbmRzLW9uPVwiXCJdKScpO1xyXG5cdFx0Z3JvdXBDb250YWluZXJzLmZvckVhY2gob3RoZXJHcm91cCA9PiB7XHJcblx0XHRcdGlmIChvdGhlckdyb3VwICE9PSBncm91cCkge1xyXG5cdFx0XHRcdGxldCBncm91cERlcGVuZHNPbkZpZWxkID0gb3RoZXJHcm91cC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGVwZW5kcy1vbicpO1xyXG5cdFx0XHRcdGlucHV0RWxlbWVudHNJbnNpZGVHcm91cC5mb3JFYWNoKGlucHV0ID0+IHtcclxuXHRcdFx0XHRcdGlmIChpbnB1dC5uYW1lID09PSBncm91cERlcGVuZHNPbkZpZWxkKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuaGlkZUdyb3VwQW5kSXRzRGVwZW5kZW5jaWVzKG90aGVyR3JvdXApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblx0cHJpdmF0ZSBzaG93R3JvdXBBbmRJdHNEZXBlbmRlbmNpZXMoZ3JvdXA6IEVsZW1lbnQpIHtcclxuXHRcdGdyb3VwLnJlbW92ZUF0dHJpYnV0ZShcImhpZGRlblwiKTtcclxuXHRcdGNvbnN0IGlucHV0RWxlbWVudHNJbnNpZGVHcm91cCA9IHRoaXMuaW5wdXRzLmZpbHRlcihpbnB1dCA9PiB0aGlzLmlzRGVzY2VuZGFudChncm91cCwgaW5wdXQpKTtcclxuXHRcdGxldCBncm91cENvbnRhaW5lcnMgPSB0aGlzLmZvcm0ucXVlcnlTZWxlY3RvckFsbCgnZGl2Lmdyb3VwLWNvbnRhaW5lcjpub3QoW2RhdGEtZGVwZW5kcy1vbj1cIlwiXSknKTtcclxuXHRcdGdyb3VwQ29udGFpbmVycy5mb3JFYWNoKG90aGVyR3JvdXAgPT4ge1xyXG5cdFx0XHRpZiAob3RoZXJHcm91cCAhPT0gZ3JvdXApIHtcclxuXHRcdFx0XHRsZXQgZ3JvdXBEZXBlbmRzT25GaWVsZCA9IG90aGVyR3JvdXAuZ2V0QXR0cmlidXRlKCdkYXRhLWRlcGVuZHMtb24nKTtcclxuXHRcdFx0XHRsZXQgZGVwZW5kZW50VmFsdWUgPSBvdGhlckdyb3VwLmdldEF0dHJpYnV0ZSgnZGF0YS1kZXBlbmRlbnQtdmFsdWUnKTtcclxuXHRcdFx0XHRpbnB1dEVsZW1lbnRzSW5zaWRlR3JvdXAuZm9yRWFjaChpbnB1dCA9PiB7XHJcblx0XHRcdFx0XHRpZiAoaW5wdXQubmFtZSA9PT0gZ3JvdXBEZXBlbmRzT25GaWVsZCAmJiAoaW5wdXQudmFsdWUgPT09IGRlcGVuZGVudFZhbHVlIHx8IGlucHV0LnZhbHVlLmluZGV4T2YoZGVwZW5kZW50VmFsdWUpID49IDApKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2hvd0dyb3VwQW5kSXRzRGVwZW5kZW5jaWVzKG90aGVyR3JvdXApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblx0cHJpdmF0ZSBpc0Rlc2NlbmRhbnQocGFyZW50OiBFbGVtZW50LCBjaGlsZDogRWxlbWVudCkge1xyXG5cdFx0dmFyIG5vZGUgPSBjaGlsZC5wYXJlbnROb2RlO1xyXG5cdFx0d2hpbGUgKG5vZGUgIT0gbnVsbCkge1xyXG5cdFx0XHRpZiAobm9kZSA9PT0gcGFyZW50KSB7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdFx0bm9kZSA9IG5vZGUucGFyZW50RWxlbWVudDtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG59XHJcbiIsImltcG9ydCBDdXN0b21FbGVtZW50IGZyb20gJy4uLy4uL2ZyYW1ld29yay9jdXN0b20tZWxlbWVudC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dEVsZW1lbnQgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tSW5wdXRFbGVtZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21FdmVudHMnO1xyXG5pbXBvcnQgVHJhbnNsYXRvciBmcm9tICcuLi8uLi9mcmFtZXdvcmsvTGFuZ3VhZ2UvVHJhbnNsYXRvcic7XHJcbmltcG9ydCBnZXRBdHRyaWJ1dGVOYW1lc1BvbHlmaWxsIGZyb20gJy4uLy4uL2ZyYW1ld29yay9Qb2x5ZmlsbHMvZ2V0QXR0cmlidXRlTmFtZXNQb2x5ZmlsbCc7XHJcbmltcG9ydCBkZWJvdW5jZXIgZnJvbSBcIi4uLy4uL2ZyYW1ld29yay9VdGlsaXRpZXMvZGVib3VuY2VyXCI7XHJcblxyXG5AQ3VzdG9tRWxlbWVudCh7XHJcblx0c2VsZWN0b3I6ICdhZGRyZXNzLWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJhZGRyZXNzLXdyYXBwZXJcIj5cclxuXHRcdFx0XHQ8aW5wdXQgY2xhc3M9J2FkZHJlc3MtcGFydCcgaWQ9J2FkZHJlc3MnIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9J0FkZHJlc3MnLz5cclxuXHRcdFx0XHQ8aW5wdXQgY2xhc3M9J2FkZHJlc3MtcGFydCcgaWQ9J3ppcCcgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj0nWmlwJy8+XHJcblx0XHRcdFx0PGlucHV0IGNsYXNzPSdhZGRyZXNzLXBhcnQnIGlkPSdjaXR5JyB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPSdDaXR5Jy8+XHJcblx0XHRcdFx0PGlucHV0IGNsYXNzPSdhZGRyZXNzLXBhcnQnIGlkPSdjb3VudHJ5JyB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPSdDb3VudHJ5Jy8+XHJcblx0XHRcdDwvZGl2PmAsXHJcblx0c3R5bGU6IGAuYWRkcmVzcy13cmFwcGVye1xyXG5cdFx0XHRcdGRpc3BsYXk6IGZsZXg7XHJcblx0XHRcdFx0ZmxleC13cmFwOiBub3dyYXA7XHJcblx0XHRcdH1cclxuXHRcdFx0aW5wdXQuYWRkcmVzcy1wYXJ0e1xyXG5cdFx0XHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcblx0XHRcdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmMWY0ZmY7XHJcblx0XHRcdFx0bWFyZ2luOiAycHg7XHJcblx0XHRcdFx0cmVzaXplOiBub25lO1xyXG5cdFx0XHRcdHdpZHRoOjMzJSAhaW1wb3J0YW50O1xyXG5cdFx0XHR9XHJcblx0XHRgLFxyXG5cdHRlbXBsYXRlUGF0aDogJy4vaHRtbC5odG1sJyxcclxuXHR1c2VTaGFkb3c6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRyZXNzRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0cHJpdmF0ZSBhdXRvQ29tcGxldGVFbmFibGVkID0gZmFsc2U7XHJcblx0cHJpdmF0ZSBhZGRyZXNzQXV0b0NvbXBsZXRlOiBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlO1xyXG5cdHByaXZhdGUgZ29vZ2xlUGxhY2VzTGlicmFyeUVsZW1lbnQ6IEhUTUxTY3JpcHRFbGVtZW50O1xyXG5cdHByaXZhdGUgZ29vZ2xlUGxhY2VzQXBpS2V5OiBzdHJpbmc7XHJcblxyXG5cdGFkZHJlc3M6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblx0Y2l0eTogSFRNTElucHV0RWxlbWVudDtcclxuXHRjb3VudHJ5OiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cdHppcDogSFRNTElucHV0RWxlbWVudDtcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0Z2V0QXR0cmlidXRlTmFtZXNQb2x5ZmlsbCgpO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbHVlKCk6IHN0cmluZyB7XHJcblx0XHRsZXQgYWRkcmVzcyA9IHRoaXMuYWRkcmVzcy52YWx1ZSB8fCAnJztcclxuXHRcdGxldCBjaXR5ID0gdGhpcy5jaXR5LnZhbHVlID8gYCwke3RoaXMuY2l0eS52YWx1ZX1gIDogJyc7XHJcblx0XHRsZXQgemlwID0gdGhpcy56aXAudmFsdWUgPyBgLCR7dGhpcy56aXAudmFsdWV9YCA6ICcnO1xyXG5cdFx0bGV0IGNvdW50cnkgPSB0aGlzLmNvdW50cnkudmFsdWUgPyBgLCR7dGhpcy5jb3VudHJ5LnZhbHVlfWAgOiAnJztcclxuXHRcdHJldHVybiBgJHthZGRyZXNzfSR7Y2l0eX0ke3ppcH0ke2NvdW50cnl9YDtcclxuXHR9XHJcblxyXG5cdHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcblx0XHRjb25zdCB2YWx1ZXMgPSB2YWx1ZS5zcGxpdCgnLCcpO1xyXG5cdFx0dGhpcy5hZGRyZXNzLnZhbHVlID0gdmFsdWVzWzBdO1xyXG5cdFx0dGhpcy5jaXR5LnZhbHVlID0gdmFsdWVzWzFdO1xyXG5cdFx0dGhpcy5jb3VudHJ5LnZhbHVlID0gdmFsdWVzWzJdO1xyXG5cdFx0dGhpcy56aXAudmFsdWUgPSB2YWx1ZXNbM107XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHR0aGlzLmFkZHJlc3MudmFsaWRpdHkudmFsaWQgJiZcclxuXHRcdFx0dGhpcy5jaXR5LnZhbGlkaXR5LnZhbGlkICYmXHJcblx0XHRcdHRoaXMuY291bnRyeS52YWxpZGl0eS52YWxpZCAmJlxyXG5cdFx0XHR0aGlzLnppcC52YWxpZGl0eS52YWxpZFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xyXG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcclxuXHR9XHJcblxyXG5cdGNvbXBvbmVudERpZE1vdW50KCkge1xyXG5cdFx0dGhpcy5pbml0Q2hpbGRJbnB1dHMoKTtcclxuXHRcdHRoaXMuZ2V0QXR0cmlidXRlTmFtZXMoKS5mb3JFYWNoKGF0dHJpYnV0ZU5hbWUgPT4ge1xyXG5cdFx0XHRsZXQgYXR0cmlidXRlVmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcclxuXHRcdFx0dGhpcy5hdHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZU5hbWUsIG51bGwsIGF0dHJpYnV0ZVZhbHVlKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0aW5pdENoaWxkSW5wdXRzKCkge1xyXG5cdFx0dGhpcy5hZGRyZXNzID0gc3VwZXIuZ2V0Q2hpbGRJbnB1dCgnI2FkZHJlc3MnKTtcclxuXHRcdHRoaXMuY2l0eSA9IHN1cGVyLmdldENoaWxkSW5wdXQoJyNjaXR5Jyk7XHJcblx0XHR0aGlzLmNvdW50cnkgPSBzdXBlci5nZXRDaGlsZElucHV0KCcjY291bnRyeScpO1xyXG5cdFx0dGhpcy56aXAgPSBzdXBlci5nZXRDaGlsZElucHV0KCcjemlwJyk7XHJcblx0XHRjb25zdCBhZGRyZXNzQ2hhbmVEZWJvdW5jZSA9IGRlYm91bmNlcih0aGlzLmNoYW5nZS5iaW5kKHRoaXMpLCA0MDAsIGZhbHNlKTtcclxuXHRcdHRoaXMuYWRkcmVzcy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XHJcblx0XHRcdGFkZHJlc3NDaGFuZURlYm91bmNlKCk7XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuY2l0eS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHRcdHRoaXMuY291bnRyeS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHRcdHRoaXMuemlwLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuY2hhbmdlLmJpbmQodGhpcykpO1xyXG5cclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHRoaXMuYWRkcmVzcy5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJycpO1xyXG5cdFx0XHR0aGlzLmNpdHkuc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsICcnKTtcclxuXHRcdFx0dGhpcy5jb3VudHJ5LnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAnJyk7XHJcblx0XHRcdHRoaXMuemlwLnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAnJyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBldmVudHNcclxuXHRwdWJsaWMgY2hhbmdlKCRldmVudCk6IHZvaWQge1xyXG5cdFx0dGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuXHRcdHRoaXMub25DaGFuZ2UuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAnY2hhbmdlJykpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xyXG5cdFx0dGhpcy52YWxpZDtcclxuXHRcdHRoaXMub25WYWxpZGF0ZS5lbWl0KFxyXG5cdFx0XHRuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAndmFsaWRhdGUnKSxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjaGFuZ2VMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nKSB7XHJcblx0XHRpZiAoIXRoaXMuYWRkcmVzcyB8fCAhdGhpcy5jaXR5IHx8ICF0aGlzLmNvdW50cnkgfHwgIXRoaXMuemlwKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuYWRkcmVzcy5wbGFjZWhvbGRlciA9IFRyYW5zbGF0b3IuVHJhbnNsYXRlKCdBZGRyZXNzRWxlbWVudC5BZGRyZXNzJywgbGFuZ3VhZ2UpO1xyXG5cdFx0dGhpcy5jaXR5LnBsYWNlaG9sZGVyID0gVHJhbnNsYXRvci5UcmFuc2xhdGUoJ0FkZHJlc3NFbGVtZW50LkNpdHknLCBsYW5ndWFnZSk7XHJcblx0XHR0aGlzLmNvdW50cnkucGxhY2Vob2xkZXIgPSBUcmFuc2xhdG9yLlRyYW5zbGF0ZSgnQWRkcmVzc0VsZW1lbnQuQ291bnRyeScsIGxhbmd1YWdlKTtcclxuXHRcdHRoaXMuemlwLnBsYWNlaG9sZGVyID0gVHJhbnNsYXRvci5UcmFuc2xhdGUoJ0FkZHJlc3NFbGVtZW50LlppcCcsIGxhbmd1YWdlKTtcclxuXHR9XHJcblxyXG5cdGVuYWJsZUF1dG9Db21wbGV0ZSgpIHtcclxuXHRcdGlmICghdGhpcy5nb29nbGVQbGFjZXNBcGlLZXkgfHwgdGhpcy5nb29nbGVQbGFjZXNBcGlLZXkudHJpbSgpID09PSAnJyB8fCAhdGhpcy5hdXRvQ29tcGxldGVFbmFibGVkKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0dGhpcy5nb29nbGVQbGFjZXNMaWJyYXJ5RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFNjcmlwdEVsZW1lbnQ+KGBbc3JjPVwiaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2pzP2tleT0ke3RoaXMuZ29vZ2xlUGxhY2VzQXBpS2V5fSZsaWJyYXJpZXM9cGxhY2VzXCJdYCk7XHJcblx0XHRpZiAodGhpcy5nb29nbGVQbGFjZXNMaWJyYXJ5RWxlbWVudCkge1xyXG5cdFx0XHR0aGlzLmdvb2dsZVBsYWNlc0xpYnJhcnlFbGVtZW50QmluZExvYWQoKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5nb29nbGVQbGFjZXNMaWJyYXJ5RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG5cdFx0dGhpcy5nb29nbGVQbGFjZXNMaWJyYXJ5RWxlbWVudC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XHJcblx0XHR0aGlzLmdvb2dsZVBsYWNlc0xpYnJhcnlFbGVtZW50LnNyYyA9IGBodHRwczovL21hcHMuZ29vZ2xlYXBpcy5jb20vbWFwcy9hcGkvanM/a2V5PSR7dGhpcy5nb29nbGVQbGFjZXNBcGlLZXl9JmxpYnJhcmllcz1wbGFjZXNgO1xyXG5cdFx0d2luZG93LmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodGhpcy5nb29nbGVQbGFjZXNMaWJyYXJ5RWxlbWVudCk7XHJcblx0XHR0aGlzLmdvb2dsZVBsYWNlc0xpYnJhcnlFbGVtZW50QmluZExvYWQoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ29vZ2xlUGxhY2VzTGlicmFyeUVsZW1lbnRCaW5kTG9hZCgpIHtcclxuXHRcdHRoaXMuZ29vZ2xlUGxhY2VzTGlicmFyeUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcclxuXHRcdFx0dGhpcy5iaW5kQXV0b0NvbXBsZXRlKCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGJpbmRBdXRvQ29tcGxldGUoKTogdm9pZCB7XHJcblx0XHR0aGlzLmFkZHJlc3NBdXRvQ29tcGxldGUgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZSh0aGlzLmFkZHJlc3MpO1xyXG5cdFx0dGhpcy5hZGRyZXNzQXV0b0NvbXBsZXRlLmFkZExpc3RlbmVyKFwicGxhY2VfY2hhbmdlZFwiLCB0aGlzLm9uQWRkcmVzc0NoYW5nZWRIYW5kbGVyLmJpbmQodGhpcykpO1xyXG5cdH1cclxuXHJcblx0b25BZGRyZXNzQ2hhbmdlZEhhbmRsZXIoKSB7XHJcblx0XHR0aGlzLmNpdHkudmFsdWUgPSAnJztcclxuXHRcdHRoaXMuY291bnRyeS52YWx1ZSA9ICcnO1xyXG5cdFx0dGhpcy56aXAudmFsdWUgPSAnJztcclxuXHJcblx0XHRjb25zdCBwbGFjZSA9IHRoaXMuYWRkcmVzc0F1dG9Db21wbGV0ZS5nZXRQbGFjZSgpO1xyXG5cdFx0Y29uc29sZS5sb2cocGxhY2UpO1xyXG5cdFx0aWYgKCFwbGFjZS5hZGRyZXNzX2NvbXBvbmVudHMpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0XHJcblx0XHR0aGlzLmFkZHJlc3MudmFsdWUgPSBwbGFjZS5uYW1lO1xyXG5cclxuXHRcdGNvbnN0IGNpdHlDb21wb25lbnRzID0gcGxhY2UuYWRkcmVzc19jb21wb25lbnRzLmZpbHRlcihjb21wb25lbnQgPT4ge1xyXG5cdFx0XHRjb25zdCBjaXR5U3lub255bXMgPSBbJ2FkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMScsICdsb2NhbGl0eSddO1xyXG5cdFx0XHRjb25zdCBpc0NpdHlDb21wb25lbnQgPSBjaXR5U3lub255bXMuc29tZShjaXR5U3lub255bSA9PiBjb21wb25lbnQudHlwZXMuaW5kZXhPZihjaXR5U3lub255bSkgIT0gLTEpO1xyXG5cdFx0XHRyZXR1cm4gaXNDaXR5Q29tcG9uZW50O1xyXG5cdFx0fSk7XHJcblx0XHRpZiAoY2l0eUNvbXBvbmVudHMgJiYgY2l0eUNvbXBvbmVudHNbMF0pIHtcclxuXHRcdFx0dGhpcy5jaXR5LnZhbHVlID0gY2l0eUNvbXBvbmVudHNbY2l0eUNvbXBvbmVudHMubGVuZ3RoIC0gMV0ubG9uZ19uYW1lO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGNvdW50cnlDb21wb25lbnRzID0gcGxhY2UuYWRkcmVzc19jb21wb25lbnRzLmZpbHRlcihjb21wb25lbnQgPT4gY29tcG9uZW50LnR5cGVzLmluZGV4T2YoJ2NvdW50cnknKSAhPSAtMSk7XHJcblx0XHRpZiAoY291bnRyeUNvbXBvbmVudHMgJiYgY291bnRyeUNvbXBvbmVudHNbMF0pIHtcclxuXHRcdFx0dGhpcy5jb3VudHJ5LnZhbHVlID0gY291bnRyeUNvbXBvbmVudHNbY291bnRyeUNvbXBvbmVudHMubGVuZ3RoIC0gMV0ubG9uZ19uYW1lO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHppcENvbXBvbmVudHMgPSBwbGFjZS5hZGRyZXNzX2NvbXBvbmVudHMuZmlsdGVyKGNvbXBvbmVudCA9PiBjb21wb25lbnQudHlwZXMuaW5kZXhPZigncG9zdGFsX2NvZGUnKSAhPSAtMSk7XHJcblx0XHRpZiAoemlwQ29tcG9uZW50cyAmJiB6aXBDb21wb25lbnRzWzBdKSB7XHJcblx0XHRcdHRoaXMuemlwLnZhbHVlID0gemlwQ29tcG9uZW50c1swXS5sb25nX25hbWU7XHJcblx0XHR9XHJcblx0XHR0aGlzLmNoYW5nZShudWxsKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xyXG5cdFx0cmV0dXJuIFsnbGFuZ3VhZ2UnLCAnZ29vZ2xlLXBsYWNlcy1rZXknLCAnZW5hYmxlLWF1dG8tY29tcGxldGUnXTtcclxuXHR9XHJcblx0YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWU6IHN0cmluZywgb2xkVmFsOiBzdHJpbmcsIG5ld1ZhbDogc3RyaW5nKSB7XHJcblx0XHR0aGlzLmF0dHJpYnV0ZUNoYW5nZWQobmFtZSwgb2xkVmFsLCBuZXdWYWwpO1xyXG5cdH1cclxuXHRwcml2YXRlIGF0dHJpYnV0ZUNoYW5nZWQobmFtZTogc3RyaW5nLCBvbGRWYWw6IHN0cmluZywgbmV3VmFsOiBzdHJpbmcpIHtcclxuXHRcdHN3aXRjaCAobmFtZSkge1xyXG5cdFx0XHRjYXNlICdsYW5ndWFnZSc6XHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VMYW5ndWFnZShuZXdWYWwpXHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJ2dvb2dsZS1wbGFjZXMta2V5JzpcclxuXHRcdFx0XHR0aGlzLmdvb2dsZVBsYWNlc0FwaUtleSA9IG5ld1ZhbDtcclxuXHRcdFx0XHR0aGlzLmVuYWJsZUF1dG9Db21wbGV0ZSgpXHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJ2VuYWJsZS1hdXRvLWNvbXBsZXRlJzpcclxuXHRcdFx0XHRpZiAobmV3VmFsICYmIG5ld1ZhbCAhPSAnZmFsc2UnKSB7XHJcblx0XHRcdFx0XHR0aGlzLmF1dG9Db21wbGV0ZUVuYWJsZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0dGhpcy5lbmFibGVBdXRvQ29tcGxldGUoKVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDdXN0b21FbGVtZW50IGZyb20gJy4uLy4uL2ZyYW1ld29yay9jdXN0b20tZWxlbWVudC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dEVsZW1lbnQgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tSW5wdXRFbGVtZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21FdmVudHMnO1xyXG5pbXBvcnQgQmFua0FjY291bnRWYWxpZGF0b3IgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL1ZhbGlkYXRpb24vVmFsaWRhdG9ycy9CYW5rQWNjb3VudCc7XHJcbmltcG9ydCBCYW5rQWNjb3VudFJlZ2lzdHJhdGlvbk51bWJlclZhbGlkYXRvciBmcm9tICcuLi8uLi9mcmFtZXdvcmsvVmFsaWRhdGlvbi9WYWxpZGF0b3JzL0JhbmtBY2NvdW50UmVnaXN0cmF0aW9uTnVtYmVyJztcclxuaW1wb3J0IFRyYW5zbGF0b3IgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0xhbmd1YWdlL1RyYW5zbGF0b3InO1xyXG5cclxuQEN1c3RvbUVsZW1lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYmFuay1lbGVtZW50JyxcclxuXHR0ZW1wbGF0ZTogYFxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG5cdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPSdyZWctbnVtYmVyLWZpZWxkJyBwbGFjZWhvbGRlcj0nQmFuayBBY2NvdW50IFJlZ2lzdHJhdGlvbiBOdW1iZXInLz5cclxuXHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBpZD0nYWNjb3VudC1maWVsZCcgcGxhY2Vob2xkZXI9J0JhbmsgQWNjb3VudCcvPlxyXG5cdFx0XHQ8L2Rpdj5gLFxyXG5cdHN0eWxlOiBgXHJcbiAgICA6aG9zdHtcclxuICAgICAgICAgICAgd2lkdGg6MTAwJTtcclxuICAgIH1cclxuICAgIC53cmFwcGVye1xyXG4gICAgICAgICAgICBkaXNwbGF5OmZsZXg7XHJcbiAgICB9XHJcbiAgICBpbnB1dHtcclxuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNGZmO1xyXG4gICAgICAgICAgICBtYXJnaW46IDJweDtcclxuICAgICAgICAgICAgcmVzaXplOiBub25lO1xyXG4gICAgfVxyXG4gICAgICAgICAgIGAsXHJcblx0dXNlU2hhZG93OiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFua0ZpZWxkRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0YWNjb3VudDogSFRNTElucHV0RWxlbWVudDtcclxuXHRyZWdOdW1iZXI6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblx0YmFua0FjY291bnRWYWxpZGF0b3I6IEJhbmtBY2NvdW50VmFsaWRhdG9yID0gbmV3IEJhbmtBY2NvdW50VmFsaWRhdG9yKCk7XHJcblx0cmVnTnVtYmVyVmFsaWRhdG9yOiBCYW5rQWNjb3VudFJlZ2lzdHJhdGlvbk51bWJlclZhbGlkYXRvciA9IG5ldyBCYW5rQWNjb3VudFJlZ2lzdHJhdGlvbk51bWJlclZhbGlkYXRvcigpO1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsdWUoKTogc3RyaW5nIHtcclxuXHRcdGxldCBhY2NvdW50ID0gdGhpcy5hY2NvdW50LnZhbHVlIHx8ICcnO1xyXG5cdFx0bGV0IHJlZ051bWJlciA9IHRoaXMucmVnTnVtYmVyLnZhbHVlID8gYCwke3RoaXMucmVnTnVtYmVyLnZhbHVlfWAgOiAnJztcclxuXHRcdHJldHVybiBgJHthY2NvdW50fSR7cmVnTnVtYmVyfWA7XHJcblx0fVxyXG5cclxuXHRzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xyXG5cdFx0Y29uc3QgdmFsdWVzID0gdmFsdWUuc3BsaXQoJywnKTtcclxuXHRcdHRoaXMuYWNjb3VudC52YWx1ZSA9IHZhbHVlc1swXTtcclxuXHRcdHRoaXMucmVnTnVtYmVyLnZhbHVlID0gdmFsdWVzWzFdO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0dGhpcy5iYW5rQWNjb3VudFZhbGlkYXRvci5pc1NhdGlzZmllZEJ5KFxyXG5cdFx0XHRcdHRoaXMuYWNjb3VudC52YWx1ZSxcclxuXHRcdFx0XHQhdGhpcy5yZXF1aXJlZCxcclxuXHRcdFx0KSAmJlxyXG5cdFx0XHR0aGlzLnJlZ051bWJlclZhbGlkYXRvci5pc1NhdGlzZmllZEJ5KFxyXG5cdFx0XHRcdHRoaXMucmVnTnVtYmVyLnZhbHVlLFxyXG5cdFx0XHRcdCF0aGlzLnJlcXVpcmVkLFxyXG5cdFx0XHQpICYmXHJcblx0XHRcdHRoaXMuYWNjb3VudC52YWxpZGl0eS52YWxpZCAmJlxyXG5cdFx0XHR0aGlzLnJlZ051bWJlci52YWxpZGl0eS52YWxpZFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xyXG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcclxuXHR9XHJcblxyXG5cdGNvbXBvbmVudERpZE1vdW50KCkge1xyXG5cdFx0dGhpcy5pbml0Q2hpbGRJbnB1dHMoKTtcclxuXHRcdHRoaXMuZ2V0QXR0cmlidXRlTmFtZXMoKS5mb3JFYWNoKGF0dHJpYnV0ZU5hbWUgPT4ge1xyXG5cdFx0XHRsZXQgYXR0cmlidXRlVmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcclxuXHRcdFx0dGhpcy5hdHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZU5hbWUsIG51bGwsIGF0dHJpYnV0ZVZhbHVlKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Y2hhbmdlTGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZykge1xyXG5cdFx0aWYgKCF0aGlzLmFjY291bnQgfHwgIXRoaXMucmVnTnVtYmVyKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuYWNjb3VudC5wbGFjZWhvbGRlciA9IFRyYW5zbGF0b3IuVHJhbnNsYXRlKCdCYW5rRWxlbWVudC5BY2NvdW50JywgbGFuZ3VhZ2UpO1xyXG5cdFx0dGhpcy5yZWdOdW1iZXIucGxhY2Vob2xkZXIgPSBUcmFuc2xhdG9yLlRyYW5zbGF0ZSgnQmFua0VsZW1lbnQuUmVnaXN0cmF0aW9uTnVtYmVyJywgbGFuZ3VhZ2UpO1xyXG5cdH1cclxuXHJcblx0aW5pdENoaWxkSW5wdXRzKCkge1xyXG5cdFx0dGhpcy5hY2NvdW50ID0gc3VwZXIuZ2V0Q2hpbGRJbnB1dCgnI2FjY291bnQtZmllbGQnKTtcclxuXHRcdHRoaXMucmVnTnVtYmVyID0gc3VwZXIuZ2V0Q2hpbGRJbnB1dCgnI3JlZy1udW1iZXItZmllbGQnKTtcclxuXHRcdHRoaXMuYWNjb3VudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHRcdHRoaXMucmVnTnVtYmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuY2hhbmdlLmJpbmQodGhpcykpO1xyXG5cdFx0aWYgKHRoaXMucmVxdWlyZWQpIHtcclxuXHRcdFx0dGhpcy5hY2NvdW50LnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAnJyk7XHJcblx0XHRcdHRoaXMucmVnTnVtYmVyLnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAnJyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBldmVudHNcclxuXHRwdWJsaWMgY2hhbmdlKCRldmVudCk6IHZvaWQge1xyXG5cdFx0dGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuXHRcdHRoaXMub25DaGFuZ2UuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAnY2hhbmdlJykpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xyXG5cdFx0dGhpcy52YWxpZDtcclxuXHRcdHRoaXMub25WYWxpZGF0ZS5lbWl0KFxyXG5cdFx0XHRuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAndmFsaWRhdGUnKSxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcclxuXHRcdHJldHVybiBbJ2xhbmd1YWdlJ107XHJcblx0fVxyXG5cdGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lOiBzdHJpbmcsIG9sZFZhbDogc3RyaW5nLCBuZXdWYWw6IHN0cmluZykge1xyXG5cdFx0dGhpcy5hdHRyaWJ1dGVDaGFuZ2VkKG5hbWUsIG9sZFZhbCwgbmV3VmFsKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBhdHRyaWJ1dGVDaGFuZ2VkKG5hbWU6IHN0cmluZywgb2xkVmFsOiBzdHJpbmcsIG5ld1ZhbDogc3RyaW5nKSB7XHJcblx0XHRzd2l0Y2ggKG5hbWUpIHtcclxuXHRcdFx0Y2FzZSAnbGFuZ3VhZ2UnOlxyXG5cdFx0XHRcdHRoaXMuY2hhbmdlTGFuZ3VhZ2UobmV3VmFsKVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ3VzdG9tRWxlbWVudCBmcm9tICcuLi8uLi9mcmFtZXdvcmsvY3VzdG9tLWVsZW1lbnQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgQ3VzdG9tSW5wdXRFbGVtZW50IH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUlucHV0RWxlbWVudCc7XHJcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tRXZlbnRzJztcclxuaW1wb3J0IENwclZhbGlkYXRvciBmcm9tICcuLi8uLi9mcmFtZXdvcmsvVmFsaWRhdGlvbi9WYWxpZGF0b3JzL0NQUic7XHJcblxyXG5AQ3VzdG9tRWxlbWVudCh7XHJcblx0c2VsZWN0b3I6ICdjcHItZWxlbWVudCcsXHJcblx0dGVtcGxhdGU6IGBcclxuXHRcdFx0PGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuXHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBpZD0nY3ByLWZpZWxkJyBwbGFjZWhvbGRlcj0nRERNTVlZLVNTU1MnLz5cclxuXHRcdFx0PC9kaXY+YCxcclxuXHRzdHlsZTogYFxyXG4gICAgOmhvc3R7XHJcbiAgICAgICAgICAgIHdpZHRoOjEwMCU7XHJcbiAgICB9XHJcbiAgICAud3JhcHBlcntcclxuICAgICAgICAgICAgZGlzcGxheTpmbGV4O1xyXG4gICAgfVxyXG4gICAgaW5wdXR7XHJcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjRmZjtcclxuICAgICAgICAgICAgbWFyZ2luOiAycHg7XHJcbiAgICAgICAgICAgIHJlc2l6ZTogbm9uZTtcclxuICAgIH1cclxuICAgICAgICAgICBgLFxyXG5cdHVzZVNoYWRvdzogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENQUkVsZW1lbnQgZXh0ZW5kcyBDdXN0b21JbnB1dEVsZW1lbnQge1xyXG5cdHRleHQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblx0dmFsaWRhdG9yOiBDcHJWYWxpZGF0b3IgPSBuZXcgQ3ByVmFsaWRhdG9yKCk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWx1ZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGAke3RoaXMudGV4dC52YWx1ZX1gO1xyXG5cdH1cclxuXHJcblx0c2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMudGV4dC52YWx1ZSA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMudmFsaWRhdG9yLmlzU2F0aXNmaWVkQnkodGhpcy52YWx1ZSwgIXRoaXMucmVxdWlyZWQpO1xyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xyXG5cdH1cclxuXHJcblx0aW5pdENoaWxkSW5wdXRzKCkge1xyXG5cdFx0dGhpcy50ZXh0ID0gc3VwZXIuZ2V0Q2hpbGRJbnB1dCgnI2Nwci1maWVsZCcpO1xyXG5cdFx0dGhpcy50ZXh0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuY2hhbmdlLmJpbmQodGhpcykpO1xyXG5cdFx0aWYgKHRoaXMucmVxdWlyZWQpIHtcclxuXHRcdFx0dGhpcy50ZXh0LnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAnJyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBldmVudHNcclxuXHRwdWJsaWMgY2hhbmdlKCRldmVudCk6IHZvaWQge1xyXG5cdFx0dGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuXHRcdHRoaXMub25DaGFuZ2UuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAnY2hhbmdlJykpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xyXG5cdFx0dGhpcy52YWxpZDtcclxuXHRcdHRoaXMub25WYWxpZGF0ZS5lbWl0KFxyXG5cdFx0XHRuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAndmFsaWRhdGUnKSxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDdXN0b21FbGVtZW50IGZyb20gJy4uLy4uL2ZyYW1ld29yay9jdXN0b20tZWxlbWVudC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dEVsZW1lbnQgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tSW5wdXRFbGVtZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21FdmVudHMnO1xyXG5pbXBvcnQgQ3ByVmFsaWRhdG9yIGZyb20gJy4uLy4uL2ZyYW1ld29yay9WYWxpZGF0aW9uL1ZhbGlkYXRvcnMvQ1BSJztcclxuaW1wb3J0IEN2clZhbGlkYXRvciBmcm9tICcuLi8uLi9mcmFtZXdvcmsvVmFsaWRhdGlvbi9WYWxpZGF0b3JzL0NWUic7XHJcblxyXG5AQ3VzdG9tRWxlbWVudCh7XHJcblx0c2VsZWN0b3I6ICdjdnItZWxlbWVudCcsXHJcblx0dGVtcGxhdGU6IGBcclxuXHRcdFx0PGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuXHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBpZD0nY3ZyLWZpZWxkJyBwbGFjZWhvbGRlcj0nU1NTU1NTU1MnLz5cclxuXHRcdFx0PC9kaXY+YCxcclxuXHRzdHlsZTogYFxyXG4gICAgOmhvc3R7XHJcbiAgICAgICAgICAgIHdpZHRoOjEwMCU7XHJcbiAgICB9XHJcbiAgICAud3JhcHBlcntcclxuICAgICAgICAgICAgZGlzcGxheTpmbGV4O1xyXG4gICAgfVxyXG4gICAgaW5wdXR7XHJcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjRmZjtcclxuICAgICAgICAgICAgbWFyZ2luOiAycHg7XHJcbiAgICAgICAgICAgIHJlc2l6ZTogbm9uZTtcclxuICAgIH1cclxuICAgICAgICAgICBgLFxyXG5cdHVzZVNoYWRvdzogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENWUkVsZW1lbnQgZXh0ZW5kcyBDdXN0b21JbnB1dEVsZW1lbnQge1xyXG5cdHRleHQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblx0dmFsaWRhdG9yOiBDdnJWYWxpZGF0b3IgPSBuZXcgQ3ZyVmFsaWRhdG9yKCk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWx1ZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGAke3RoaXMudGV4dC52YWx1ZX1gO1xyXG5cdH1cclxuXHJcblx0c2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMudGV4dC52YWx1ZSA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMudmFsaWRhdG9yLmlzU2F0aXNmaWVkQnkodGhpcy52YWx1ZSwgIXRoaXMucmVxdWlyZWQpO1xyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xyXG5cdH1cclxuXHJcblx0aW5pdENoaWxkSW5wdXRzKCkge1xyXG5cdFx0dGhpcy50ZXh0ID0gc3VwZXIuZ2V0Q2hpbGRJbnB1dCgnI2N2ci1maWVsZCcpO1xyXG5cdFx0dGhpcy50ZXh0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuY2hhbmdlLmJpbmQodGhpcykpO1xyXG5cdFx0aWYgKHRoaXMucmVxdWlyZWQpIHtcclxuXHRcdFx0dGhpcy50ZXh0LnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAnJyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBldmVudHNcclxuXHRwdWJsaWMgY2hhbmdlKCRldmVudCk6IHZvaWQge1xyXG5cdFx0dGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuXHRcdHRoaXMub25DaGFuZ2UuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAnY2hhbmdlJykpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xyXG5cdFx0dGhpcy52YWxpZDtcclxuXHRcdHRoaXMub25WYWxpZGF0ZS5lbWl0KFxyXG5cdFx0XHRuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAndmFsaWRhdGUnKSxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDdXN0b21FbGVtZW50IGZyb20gJy4uLy4uL2ZyYW1ld29yay9jdXN0b20tZWxlbWVudC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dEVsZW1lbnQgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tSW5wdXRFbGVtZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21FdmVudHMnO1xyXG5pbXBvcnQgeyBTdHJpbmdVdGlsIH0gZnJvbSAnQGx1ZnRib3JuL3V0aWxpdGllcyc7XHJcblxyXG5AQ3VzdG9tRWxlbWVudCh7XHJcblx0c2VsZWN0b3I6ICdjaGVja2JveC1lbGVtZW50JyxcclxuXHR0ZW1wbGF0ZTogYFxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG5cdFx0XHQ8L2Rpdj5gLFxyXG5cdHN0eWxlOiBgXHJcblx0XHRcdDpob3N0e1xyXG5cdFx0XHRcdHdpZHRoOjEwMCU7XHJcblx0XHRcdH1cclxuXHRcdFx0LmNoZWNrYm94IHtcclxuXHRcdFx0XHR3aWR0aDogYXV0bztcclxuXHRcdFx0XHRtYXJnaW46IGF1dG8gM3B4O1xyXG5cdFx0XHRcdGNvbG9yOiByZ2JhKDcyLCA3MiwgNzIsIDAuNzUpO1xyXG5cdFx0XHRcdGZvbnQtc2l6ZTogMTNweDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpbnB1dFt0eXBlPSdjaGVja2JveCdde1xyXG5cdFx0XHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcblx0XHRcdFx0d2lkdGg6IGF1dG8gIWltcG9ydGFudDtcclxuXHRcdFx0XHRib3JkZXI6IG5vbmU7XHJcblx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2YxZjRmZjtcclxuXHRcdFx0XHRtYXJnaW46IDJweDtcclxuXHRcdFx0XHRyZXNpemU6IG5vbmU7XHJcblx0XHRcdH1cclxuXHRcdGAsXHJcblx0dXNlU2hhZG93OiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hlY2tCb3hFbGVtZW50IGV4dGVuZHMgQ3VzdG9tSW5wdXRFbGVtZW50IHtcclxuXHRjaGVja2JveDogSFRNTElucHV0RWxlbWVudFtdO1xyXG5cdGNoZWNrYm94VGVtcGxhdGUgPSBgXHJcblx0PGRpdiBjbGFzcz0nY2hlY2tib3gnPlxyXG5cdFx0PGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSd7MH0nIHZhbHVlPVwiezF9XCIgaWQ9XCJ7Mn1cIi8+XHJcblx0XHQ8bGFiZWwgZm9yPVwiezJ9XCI+ezF9PC9sYWJlbD5cclxuXHQ8L2Rpdj5gO1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsdWUoKTogc3RyaW5nW10ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2hlY2tib3guZmlsdGVyKGMgPT4gYy5jaGVja2VkKS5tYXAoYyA9PiBjLnZhbHVlKTtcclxuXHR9XHJcblxyXG5cdHNldCB2YWx1ZSh2YWx1ZXM6IHN0cmluZ1tdKSB7XHJcblx0XHQvLyB0aGlzLmNoZWNrYm94LnZhbHVlID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodGhpcy5yZXF1aXJlZCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy52YWx1ZS5sZW5ndGggPiAwO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcclxuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XHJcblx0fVxyXG5cclxuXHRpbml0Q2hpbGRJbnB1dHMoKSB7XHJcblx0XHR0aGlzLmFkZENoZWNrQm94ZXMoKTtcclxuXHRcdHRoaXMuY2hlY2tib3ggPSBzdXBlci5nZXRDaGlsZElucHV0cyhgW25hbWU9JyR7dGhpcy5uYW1lfSddYCk7XHJcblx0XHR0aGlzLmNoZWNrYm94LmZvckVhY2goYyA9PlxyXG5cdFx0XHRjLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuY2hhbmdlLmJpbmQodGhpcykpLFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYWRkQ2hlY2tCb3hlcygpIHtcclxuXHRcdGNvbnN0IHdyYXBwZXIgPSBzdXBlci5nZXRDaGlsZEVsZW1lbnQoJy53cmFwcGVyJyk7XHJcblx0XHR0aGlzLm9wdGlvbnMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcclxuXHRcdFx0d3JhcHBlci5pbnNlcnRBZGphY2VudEhUTUwoXHJcblx0XHRcdFx0J2JlZm9yZWVuZCcsXHJcblx0XHRcdFx0U3RyaW5nVXRpbC5TdHJpbmdGb3JtYXQoXHJcblx0XHRcdFx0XHR0aGlzLmNoZWNrYm94VGVtcGxhdGUsXHJcblx0XHRcdFx0XHR0aGlzLm5hbWUsXHJcblx0XHRcdFx0XHRlbGVtZW50LFxyXG5cdFx0XHRcdFx0YCR7dGhpcy5uYW1lfS0ke2luZGV4fWAsXHJcblx0XHRcdFx0KSxcclxuXHRcdFx0KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHQvLyBldmVudHNcclxuXHRwdWJsaWMgY2hhbmdlKCRldmVudCk6IHZvaWQge1xyXG5cdFx0dGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuXHRcdHRoaXMub25DaGFuZ2UuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAnY2hhbmdlJykpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xyXG5cdFx0dGhpcy52YWxpZDtcclxuXHRcdHRoaXMub25WYWxpZGF0ZS5lbWl0KFxyXG5cdFx0XHRuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAndmFsaWRhdGUnKSxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDdXN0b21FbGVtZW50IGZyb20gJy4uLy4uL2ZyYW1ld29yay9jdXN0b20tZWxlbWVudC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dEVsZW1lbnQgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tSW5wdXRFbGVtZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21FdmVudHMnO1xyXG5cclxuQEN1c3RvbUVsZW1lbnQoe1xyXG5cdHNlbGVjdG9yOiAncmVnZXgtZWxlbWVudCcsXHJcblx0dGVtcGxhdGU6IGBcclxuXHRcdFx0PGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuXHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBpZD0ncmVnZXgtZmllbGQnLz5cclxuXHRcdFx0PC9kaXY+YCxcclxuXHRzdHlsZTogYFxyXG4gICAgOmhvc3R7XHJcbiAgICAgICAgICAgIHdpZHRoOjEwMCU7XHJcbiAgICB9XHJcbiAgICAud3JhcHBlcntcclxuICAgICAgICAgICAgZGlzcGxheTpmbGV4O1xyXG4gICAgfVxyXG4gICAgaW5wdXR7XHJcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjRmZjtcclxuICAgICAgICAgICAgbWFyZ2luOiAycHg7XHJcbiAgICAgICAgICAgIHJlc2l6ZTogbm9uZTtcclxuICAgIH1cclxuICAgICAgICAgICBgLFxyXG5cdHVzZVNoYWRvdzogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEN1c3RvbVJlZ3VsYXJFeHByZXNzaW9uRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0dGV4dDogSFRNTElucHV0RWxlbWVudDtcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbHVlKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gYCR7dGhpcy50ZXh0LnZhbHVlfWA7XHJcblx0fVxyXG5cclxuXHRzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xyXG5cdFx0dGhpcy50ZXh0LnZhbHVlID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy50ZXh0LnZhbGlkaXR5LnZhbGlkO1xyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xyXG5cdH1cclxuXHJcblx0aW5pdENoaWxkSW5wdXRzKCkge1xyXG5cdFx0dGhpcy50ZXh0ID0gc3VwZXIuZ2V0Q2hpbGRJbnB1dCgnI3JlZ2V4LWZpZWxkJyk7XHJcblx0XHR0aGlzLnRleHQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5jaGFuZ2UuYmluZCh0aGlzKSk7XHJcblx0XHRpZiAodGhpcy5yZXF1aXJlZCkge1xyXG5cdFx0XHR0aGlzLnRleHQuc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsICcnKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmN1c3RvbVZhbHVlKSB7XHJcblx0XHRcdHRoaXMudGV4dC5zZXRBdHRyaWJ1dGUoJ3BhdHRlcm4nLCB0aGlzLmN1c3RvbVZhbHVlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIGV2ZW50c1xyXG5cdHB1YmxpYyBjaGFuZ2UoJGV2ZW50KTogdm9pZCB7XHJcblx0XHR0aGlzLnRvdWNoZWQgPSB0cnVlO1xyXG5cdFx0dGhpcy5vbkNoYW5nZS5lbWl0KG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICdjaGFuZ2UnKSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgdmFsaWRhdGUoKTogdm9pZCB7XHJcblx0XHR0aGlzLnZhbGlkO1xyXG5cdFx0dGhpcy5vblZhbGlkYXRlLmVtaXQoXHJcblx0XHRcdG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICd2YWxpZGF0ZScpLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IEN1c3RvbUVsZW1lbnQgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL2N1c3RvbS1lbGVtZW50LmRlY29yYXRvcic7XHJcbmltcG9ydCB7IEN1c3RvbUlucHV0RWxlbWVudCB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21JbnB1dEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBDdXN0b21FbGVtZW50RXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUV2ZW50cyc7XHJcblxyXG5AQ3VzdG9tRWxlbWVudCh7XHJcblx0c2VsZWN0b3I6ICdkYXRlLWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcblx0XHRcdFx0PGlucHV0IHR5cGU9XCJkYXRlXCIgaWQ9J2RhdGUtZmllbGQnLz5cclxuXHRcdFx0PC9kaXY+YCxcclxuXHRzdHlsZTogYFxyXG4gICAgOmhvc3R7XHJcbiAgICAgICAgICAgIHdpZHRoOjEwMCU7XHJcbiAgICB9XHJcbiAgICAud3JhcHBlcntcclxuICAgICAgICAgICAgZGlzcGxheTpmbGV4O1xyXG4gICAgfVxyXG4gICAgaW5wdXR7XHJcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjRmZjtcclxuICAgICAgICAgICAgbWFyZ2luOiAycHg7XHJcbiAgICAgICAgICAgIHJlc2l6ZTogbm9uZTtcclxuICAgIH1cclxuICAgICAgICAgICBgLFxyXG5cdHVzZVNoYWRvdzogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVGaWVsZEVsZW1lbnQgZXh0ZW5kcyBDdXN0b21JbnB1dEVsZW1lbnQge1xyXG5cdGRhdGU6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWx1ZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGF0ZS52YWx1ZTtcclxuXHR9XHJcblxyXG5cdHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcblx0XHR0aGlzLmRhdGUudmFsdWUgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWxpZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGUudmFsaWRpdHkudmFsaWQ7XHJcblx0fVxyXG5cclxuXHRjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcclxuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XHJcblx0fVxyXG5cclxuXHRpbml0Q2hpbGRJbnB1dHMoKSB7XHJcblx0XHR0aGlzLmRhdGUgPSBzdXBlci5nZXRDaGlsZElucHV0KCcjZGF0ZS1maWVsZCcpO1xyXG5cdFx0dGhpcy5kYXRlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuY2hhbmdlLmJpbmQodGhpcykpO1xyXG5cdFx0aWYgKHRoaXMucmVxdWlyZWQpIHtcclxuXHRcdFx0dGhpcy5kYXRlLnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAnJyk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5tYXgpIHtcclxuXHRcdFx0dGhpcy5kYXRlLnNldEF0dHJpYnV0ZSgnbWF4JywgdGhpcy5tYXgpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMubWluKSB7XHJcblx0XHRcdHRoaXMuZGF0ZS5zZXRBdHRyaWJ1dGUoJ21pbicsIHRoaXMubWluKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIGV2ZW50c1xyXG5cdHB1YmxpYyBjaGFuZ2UoJGV2ZW50KTogdm9pZCB7XHJcblx0XHR0aGlzLnRvdWNoZWQgPSB0cnVlO1xyXG5cdFx0dGhpcy5vbkNoYW5nZS5lbWl0KG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICdjaGFuZ2UnKSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgdmFsaWRhdGUoKTogdm9pZCB7XHJcblx0XHR0aGlzLnZhbGlkO1xyXG5cdFx0dGhpcy5vblZhbGlkYXRlLmVtaXQoXHJcblx0XHRcdG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICd2YWxpZGF0ZScpLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IEN1c3RvbUVsZW1lbnQgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL2N1c3RvbS1lbGVtZW50LmRlY29yYXRvcic7XHJcbmltcG9ydCB7IEN1c3RvbUlucHV0RWxlbWVudCB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21JbnB1dEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBDdXN0b21FbGVtZW50RXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUV2ZW50cyc7XHJcbmltcG9ydCB7IFN0cmluZ1V0aWwgfSBmcm9tICdAbHVmdGJvcm4vdXRpbGl0aWVzJztcclxuXHJcbkBDdXN0b21FbGVtZW50KHtcclxuXHRzZWxlY3RvcjogJ2Ryb3AtZG93bi1lbGVtZW50JyxcclxuXHR0ZW1wbGF0ZTogYFxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICA8c2VsZWN0IGlkPSdzZWxlY3QtbGlzdCc+XHJcblx0XHRcdCAgIDxvcHRpb24gdmFsdWU9XCItLVwiIHNlbGVjdGVkIGRpc2FibGVkPi08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcblx0XHRcdDwvZGl2PmAsXHJcblx0c3R5bGU6IGBcclxuICAgICAgICAgICAgOmhvc3R7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDoxMDAlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC53cmFwcGVye1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTpmbGV4O1xyXG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLnJhZGlvLWJ1dHRvbiB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogYXV0bztcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0byAzcHg7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICAgICAgZmxleC1ncm93OiAwLjE7XHJcbiAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZWxlY3R7XHJcbiAgICAgICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWY0ZmY7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW46IDJweDtcclxuICAgICAgICAgICAgICAgIHJlc2l6ZTogbm9uZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIGAsXHJcblx0dXNlU2hhZG93OiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJvcERvd25MaXN0RWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0c2VsZWN0OiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cdG9wdGlvblRlbXBsYXRlID0gYFxyXG4gICAgPG9wdGlvbiB2YWx1ZT0nezB9Jz5cclxuICAgICAgIHsxfVxyXG4gICAgPC9vcHRpb24+YDtcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbHVlKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gYCR7dGhpcy5zZWxlY3QudmFsdWV9YDtcclxuXHR9XHJcblxyXG5cdHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcblx0XHR0aGlzLnNlbGVjdC52YWx1ZSA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2VsZWN0LnZhbGlkaXR5LnZhbGlkO1xyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xyXG5cdH1cclxuXHJcblx0aW5pdENoaWxkSW5wdXRzKCkge1xyXG5cdFx0dGhpcy5zZWxlY3QgPSBzdXBlci5nZXRDaGlsZElucHV0KGAjc2VsZWN0LWxpc3RgKTtcclxuXHRcdHRoaXMuYWRkT3B0aW9ucygpO1xyXG5cdFx0aWYgKHRoaXMucmVxdWlyZWQpIHtcclxuXHRcdFx0dGhpcy5zZWxlY3Quc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsICcnKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLm11bHRpKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0LnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnJyk7XHJcblx0XHR9XHJcblx0XHR0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYWRkT3B0aW9ucygpIHtcclxuXHRcdHRoaXMub3B0aW9ucy5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xyXG5cdFx0XHR0aGlzLnNlbGVjdC5pbnNlcnRBZGphY2VudEhUTUwoXHJcblx0XHRcdFx0J2JlZm9yZWVuZCcsXHJcblx0XHRcdFx0U3RyaW5nVXRpbC5TdHJpbmdGb3JtYXQodGhpcy5vcHRpb25UZW1wbGF0ZSwgZWxlbWVudCwgZWxlbWVudCksXHJcblx0XHRcdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0Ly8gZXZlbnRzXHJcblx0cHVibGljIGNoYW5nZSgkZXZlbnQpOiB2b2lkIHtcclxuXHRcdHRoaXMudG91Y2hlZCA9IHRydWU7XHJcblx0XHR0aGlzLm9uQ2hhbmdlLmVtaXQobmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ2NoYW5nZScpKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB2YWxpZGF0ZSgpOiB2b2lkIHtcclxuXHRcdHRoaXMudmFsaWQ7XHJcblx0XHR0aGlzLm9uVmFsaWRhdGUuZW1pdChcclxuXHRcdFx0bmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ3ZhbGlkYXRlJyksXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBZGRyZXNzRWxlbWVudCB9IGZyb20gJy4vQWRkcmVzcy9BZGRyZXNzRWxlbWVudCc7XHJcbmltcG9ydCB7IFRleHRGaWVsZEVsZW1lbnQgfSBmcm9tICcuL1RleHRGaWVsZC9UZXh0RmllbGRFbGVtZW50JztcclxuaW1wb3J0IHsgRW1haWxGaWVsZEVsZW1lbnQgfSBmcm9tICcuL0VtYWlsRmllbGQvRW1haWxGaWVsZEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBDaGVja0JveEVsZW1lbnQgfSBmcm9tICcuL0NoZWNrQm94RWxlbWVudC9DaGVja0JveEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBSYWRpb0J1dHRvbkdyb3VwRWxlbWVudCB9IGZyb20gJy4vUmFkaW9CdXR0b25Hcm91cC9SYWRpb0J1dHRvbkdyb3VwRWxlbWVudCc7XHJcbmltcG9ydCB7IFRleHRBcmVhRWxlbWVudCB9IGZyb20gJy4vVGV4dEFyZWFFbGVtZW50L1RleHRBcmVhRWxlbWVudCc7XHJcbmltcG9ydCB7IERyb3BEb3duTGlzdEVsZW1lbnQgfSBmcm9tICcuL0Ryb3BEb3duTGlzdC9Ecm9wRG93bkxpc3RFbGVtZW50JztcclxuaW1wb3J0IHsgRmlsZUZpZWxkRWxlbWVudCB9IGZyb20gJy4vRmlsZUZpZWxkL0ZpbGVGaWVsZEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBOdW1lcmljRmllbGRFbGVtZW50IH0gZnJvbSAnLi9OdW1lcmljRmllbGQvTnVtZXJpY0ZpZWxkRWxlbWVudCc7XHJcbmltcG9ydCB7IEN1c3RvbVJlZ3VsYXJFeHByZXNzaW9uRWxlbWVudCB9IGZyb20gJy4vQ3VzdG9tUmVndWxhckV4cHJlc3Npb24vQ3VzdG9tUmVndWxhckV4cHJlc3Npb25FbGVtZW50JztcclxuaW1wb3J0IHsgRGF0ZUZpZWxkRWxlbWVudCB9IGZyb20gJy4vRGF0ZUZpZWxkL0RhdGVGaWVsZEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBJbnRQaG9uZUZpZWxkRWxlbWVudCB9IGZyb20gJy4vSW50ZXJuYXRpb25hUGhvbmVOdW1iZXIvSW50ZXJuYXRpb25hUGhvbmVOdW1iZXJFbGVtZW50JztcclxuaW1wb3J0IHsgQ1BSRWxlbWVudCB9IGZyb20gJy4vQ1BSRWxlbWVudC9DUFJFbGVtZW50JztcclxuaW1wb3J0IHsgQ1ZSRWxlbWVudCB9IGZyb20gJy4vQ1ZSRWxlbWVudC9DVlJFbGVtZW50JztcclxuaW1wb3J0IHsgSWRlbnRpZmljYXRpb25FbGVtZW50IH0gZnJvbSAnLi9JZGVudGlmaWNhdGlvbkVsZW1lbnQvSWRlbnRpZmljYXRpb25FbGVtZW50JztcclxuaW1wb3J0IHsgQmFua0ZpZWxkRWxlbWVudCB9IGZyb20gJy4vQmFua0ZpZWxkL0JhbmtGaWVsZEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBUeXBlQWhlYWRFbGVtZW50IH0gZnJvbSAnLi9UeXBlQWhlYWQvVHlwZUFoZWFkRWxlbWVudCc7XHJcblxyXG5leHBvcnQge1xyXG5cdEFkZHJlc3NFbGVtZW50LFxyXG5cdFRleHRGaWVsZEVsZW1lbnQsXHJcblx0RW1haWxGaWVsZEVsZW1lbnQsXHJcblx0Q2hlY2tCb3hFbGVtZW50LFxyXG5cdFJhZGlvQnV0dG9uR3JvdXBFbGVtZW50LFxyXG5cdFRleHRBcmVhRWxlbWVudCxcclxuXHREcm9wRG93bkxpc3RFbGVtZW50LFxyXG5cdEZpbGVGaWVsZEVsZW1lbnQsXHJcblx0TnVtZXJpY0ZpZWxkRWxlbWVudCxcclxuXHRDdXN0b21SZWd1bGFyRXhwcmVzc2lvbkVsZW1lbnQsXHJcblx0RGF0ZUZpZWxkRWxlbWVudCxcclxuXHRJbnRQaG9uZUZpZWxkRWxlbWVudCxcclxuXHRDUFJFbGVtZW50LFxyXG5cdENWUkVsZW1lbnQsXHJcblx0SWRlbnRpZmljYXRpb25FbGVtZW50LFxyXG5cdEJhbmtGaWVsZEVsZW1lbnQsXHJcblx0VHlwZUFoZWFkRWxlbWVudFxyXG59O1xyXG4iLCJpbXBvcnQgQ3VzdG9tRWxlbWVudCBmcm9tICcuLi8uLi9mcmFtZXdvcmsvY3VzdG9tLWVsZW1lbnQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgQ3VzdG9tSW5wdXRFbGVtZW50IH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUlucHV0RWxlbWVudCc7XHJcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tRXZlbnRzJztcclxuXHJcbkBDdXN0b21FbGVtZW50KHtcclxuXHRzZWxlY3RvcjogJ2VtYWlsLWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcblx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9J2VtYWlsLWZpZWxkJy8+XHJcblx0XHRcdDwvZGl2PmAsXHJcblx0c3R5bGU6IGBcclxuICAgIDpob3N0e1xyXG4gICAgICAgICAgICB3aWR0aDoxMDAlO1xyXG4gICAgfVxyXG4gICAgLndyYXBwZXJ7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6ZmxleDtcclxuICAgIH1cclxuICAgIGlucHV0e1xyXG4gICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWY0ZmY7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMnB4O1xyXG4gICAgICAgICAgICByZXNpemU6IG5vbmU7XHJcbiAgICB9XHJcbiAgICAgICAgICAgYCxcclxuXHR1c2VTaGFkb3c6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbWFpbEZpZWxkRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0bWFpbFJlZ2V4OiBSZWdFeHAgPSBuZXcgUmVnRXhwKFxyXG5cdFx0L14oW2EtekEtWjAtOcOGw5jDhcOmw7jDpV8uKy1dKStcXEAoKFthLXpBLVowLTnDhsOYw4XDpsO4w6UtXSkrXFwuKSsoW2EtekEtWjAtOcOGw5jDhcOmw7jDpV17Miw0fSkrJC8sXHJcblx0KTtcclxuXHJcblx0ZW1haWw6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWx1ZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGAke3RoaXMuZW1haWwudmFsdWV9YDtcclxuXHR9XHJcblxyXG5cdHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcblx0XHR0aGlzLmVtYWlsLnZhbHVlID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcblx0XHRjb25zdCBwYXR0ZXJuVmFsaWQgPSAhdGhpcy52YWx1ZSB8fCB0aGlzLm1haWxSZWdleC50ZXN0KHRoaXMudmFsdWUpO1xyXG5cdFx0cmV0dXJuIHRoaXMuZW1haWwudmFsaWRpdHkudmFsaWQgJiYgcGF0dGVyblZhbGlkO1xyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHR0aGlzLmluaXRDaGlsZElucHV0cygpO1xyXG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcclxuXHR9XHJcblxyXG5cdGluaXRDaGlsZElucHV0cygpIHtcclxuXHRcdHRoaXMuZW1haWwgPSBzdXBlci5nZXRDaGlsZElucHV0KCcjZW1haWwtZmllbGQnKTtcclxuXHRcdHRoaXMuZW1haWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5jaGFuZ2UuYmluZCh0aGlzKSk7XHJcblx0XHRpZiAodGhpcy5yZXF1aXJlZCkge1xyXG5cdFx0XHR0aGlzLmVtYWlsLnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAnJyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBldmVudHNcclxuXHRwdWJsaWMgY2hhbmdlKCRldmVudCk6IHZvaWQge1xyXG5cdFx0dGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuXHRcdHRoaXMub25DaGFuZ2UuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAnY2hhbmdlJykpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xyXG5cdFx0dGhpcy52YWxpZDtcclxuXHRcdHRoaXMub25WYWxpZGF0ZS5lbWl0KFxyXG5cdFx0XHRuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAndmFsaWRhdGUnKSxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDdXN0b21FbGVtZW50IGZyb20gJy4uLy4uL2ZyYW1ld29yay9jdXN0b20tZWxlbWVudC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dEVsZW1lbnQgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tSW5wdXRFbGVtZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21FdmVudHMnO1xyXG5cclxuQEN1c3RvbUVsZW1lbnQoe1xyXG5cdHNlbGVjdG9yOiAnZmlsZS1lbGVtZW50JyxcclxuXHR0ZW1wbGF0ZTogYFxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG5cdFx0XHRcdDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPSdmaWxlLWZpZWxkJyBhY2NlcHQ9XCJpbWFnZS8qLGFwcGxpY2F0aW9uL3BkZlwiLz5cclxuXHRcdFx0PC9kaXY+YCxcclxuXHRzdHlsZTogYFxyXG4gICAgOmhvc3R7XHJcbiAgICAgICAgICAgIHdpZHRoOjEwMCU7XHJcbiAgICB9XHJcbiAgICAud3JhcHBlcntcclxuICAgICAgICAgICAgZGlzcGxheTpmbGV4O1xyXG4gICAgfVxyXG4gICAgaW5wdXR7XHJcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjRmZjtcclxuICAgICAgICAgICAgbWFyZ2luOiAycHg7XHJcbiAgICAgICAgICAgIHJlc2l6ZTogbm9uZTtcclxuICAgIH1cclxuICAgICAgICAgICBgLFxyXG5cdHVzZVNoYWRvdzogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbGVGaWVsZEVsZW1lbnQgZXh0ZW5kcyBDdXN0b21JbnB1dEVsZW1lbnQge1xyXG5cdGZpbGU6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWx1ZSgpOiBGaWxlTGlzdCB7XHJcblx0XHRyZXR1cm4gdGhpcy5maWxlLmZpbGVzO1xyXG5cdH1cclxuXHJcblx0c2V0IHZhbHVlKGZpbGVzOiBGaWxlTGlzdCkge1xyXG5cdFx0dGhpcy5maWxlLmZpbGVzID0gZmlsZXM7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5maWxlLnZhbGlkaXR5LnZhbGlkO1xyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHR0aGlzLmluaXRDaGlsZElucHV0cygpO1xyXG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcclxuXHR9XHJcblxyXG5cdGluaXRDaGlsZElucHV0cygpIHtcclxuXHRcdHRoaXMuZmlsZSA9IHN1cGVyLmdldENoaWxkSW5wdXQoJyNmaWxlLWZpZWxkJyk7XHJcblx0XHR0aGlzLmZpbGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5jaGFuZ2UuYmluZCh0aGlzKSk7XHJcblx0XHRpZiAodGhpcy5yZXF1aXJlZCkge1xyXG5cdFx0XHR0aGlzLmZpbGUuc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsICcnKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLm11bHRpKSB7XHJcblx0XHRcdHRoaXMuZmlsZS5zZXRBdHRyaWJ1dGUoJ211bHRpcGxlJywgJycpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gZXZlbnRzXHJcblx0cHVibGljIGNoYW5nZSgkZXZlbnQpOiB2b2lkIHtcclxuXHRcdHRoaXMudG91Y2hlZCA9IHRydWU7XHJcblx0XHR0aGlzLm9uQ2hhbmdlLmVtaXQobmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ2NoYW5nZScpKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB2YWxpZGF0ZSgpOiB2b2lkIHtcclxuXHRcdHRoaXMudmFsaWQ7XHJcblx0XHR0aGlzLm9uVmFsaWRhdGUuZW1pdChcclxuXHRcdFx0bmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ3ZhbGlkYXRlJyksXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ3VzdG9tRWxlbWVudCBmcm9tICcuLi8uLi9mcmFtZXdvcmsvY3VzdG9tLWVsZW1lbnQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgQ3VzdG9tSW5wdXRFbGVtZW50IH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUlucHV0RWxlbWVudCc7XHJcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tRXZlbnRzJztcclxuaW1wb3J0IENwclZhbGlkYXRvciBmcm9tICcuLi8uLi9mcmFtZXdvcmsvVmFsaWRhdGlvbi9WYWxpZGF0b3JzL0NQUic7XHJcbmltcG9ydCBJVmFsaWRhdG9yIGZyb20gJy4uLy4uL2ZyYW1ld29yay9WYWxpZGF0aW9uL0lWYWxpZGF0b3IuaW50ZXJmYWNlJztcclxuaW1wb3J0IEN2clZhbGlkYXRvciBmcm9tICcuLi8uLi9mcmFtZXdvcmsvVmFsaWRhdGlvbi9WYWxpZGF0b3JzL0NWUic7XHJcbmltcG9ydCBCYW5rSWRTd2VkZW5WYWxpZGF0b3IgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL1ZhbGlkYXRpb24vVmFsaWRhdG9ycy9CYW5rSWRTd2VkZW4nO1xyXG5pbXBvcnQgQmFua0lkTm9yd2F5VmFsaWRhdG9yIGZyb20gJy4uLy4uL2ZyYW1ld29yay9WYWxpZGF0aW9uL1ZhbGlkYXRvcnMvQmFua0lkTm9yd2F5JztcclxuXHJcbkBDdXN0b21FbGVtZW50KHtcclxuXHRzZWxlY3RvcjogJ2lkLWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPSdpZC10eXBlJz5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSdjdnInPkRhbmlzaCBDVlI8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSdjcHInPkRhbmlzaCBDUFI8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSdzd2UnPlN3ZWRlbiBCYW5rIElkPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nbm9yJz5Ob3J3YXkgQmFuayBJZDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcblx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9J2lkLWZpZWxkJyBwbGFjZWhvbGRlcj0nJy8+XHJcblx0XHRcdDwvZGl2PmAsXHJcblx0c3R5bGU6IGBcclxuICAgIDpob3N0e1xyXG4gICAgICAgICAgICB3aWR0aDoxMDAlO1xyXG4gICAgfVxyXG4gICAgLndyYXBwZXJ7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6ZmxleDtcclxuICAgIH1cclxuICAgIGlucHV0LCBzZWxlY3R7XHJcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjRmZjtcclxuICAgICAgICAgICAgbWFyZ2luOiAycHg7XHJcbiAgICAgICAgICAgIHJlc2l6ZTogbm9uZTtcclxuICAgIH1cclxuICAgIGlucHV0e1xyXG4gICAgICAgICAgICB3aWR0aDogNzUlICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcbiAgICBzZWxlY3R7XHJcbiAgICAgICAgICAgIHdpZHRoOiAyNSUgIWltcG9ydGFudDtcclxuICAgIH1cclxuICAgICAgICAgICBgLFxyXG5cdHVzZVNoYWRvdzogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIElkZW50aWZpY2F0aW9uRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0dHlwZVNlbGVjdG9yOiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cdHRleHQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG5cdHR5cGU6IHN0cmluZztcclxuXHR2YWxpZGF0b3JzOiB7IFtpbmRleDogc3RyaW5nXTogSVZhbGlkYXRvciB9ID0ge1xyXG5cdFx0Y3ByOiBuZXcgQ3ByVmFsaWRhdG9yKCksXHJcblx0XHRjdnI6IG5ldyBDdnJWYWxpZGF0b3IoKSxcclxuXHRcdHN3ZTogbmV3IEJhbmtJZFN3ZWRlblZhbGlkYXRvcigpLFxyXG5cdFx0bm9yOiBuZXcgQmFua0lkTm9yd2F5VmFsaWRhdG9yKCksXHJcblx0fTtcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbHVlKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gYCR7dGhpcy50ZXh0LnZhbHVlfWA7XHJcblx0fVxyXG5cclxuXHRzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xyXG5cdFx0dGhpcy50ZXh0LnZhbHVlID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy52YWxpZGF0b3JzW3RoaXMudHlwZV0uaXNTYXRpc2ZpZWRCeShcclxuXHRcdFx0dGhpcy52YWx1ZSxcclxuXHRcdFx0IXRoaXMucmVxdWlyZWQsXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xyXG5cdH1cclxuXHJcblx0aW5pdENoaWxkSW5wdXRzKCkge1xyXG5cdFx0dGhpcy50ZXh0ID0gc3VwZXIuZ2V0Q2hpbGRJbnB1dCgnI2lkLWZpZWxkJyk7XHJcblx0XHR0aGlzLnR5cGVTZWxlY3RvciA9IHN1cGVyLmdldENoaWxkSW5wdXQoJyNpZC10eXBlJyk7XHJcblx0XHR0aGlzLnRleHQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5jaGFuZ2UuYmluZCh0aGlzKSk7XHJcblx0XHR0aGlzLnR5cGVTZWxlY3Rvci5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHRoaXMudGV4dC5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJycpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy50eXBlID0gdGhpcy50eXBlU2VsZWN0b3IudmFsdWU7XHJcblx0fVxyXG5cclxuXHQvLyBldmVudHNcclxuXHRwdWJsaWMgY2hhbmdlKCRldmVudCk6IHZvaWQge1xyXG5cdFx0dGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuXHRcdHRoaXMudHlwZSA9IHRoaXMudHlwZVNlbGVjdG9yLnZhbHVlO1xyXG5cdFx0dGhpcy5vbkNoYW5nZS5lbWl0KG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICdjaGFuZ2UnKSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgdmFsaWRhdGUoKTogdm9pZCB7XHJcblx0XHR0aGlzLnZhbGlkO1xyXG5cdFx0dGhpcy5vblZhbGlkYXRlLmVtaXQoXHJcblx0XHRcdG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICd2YWxpZGF0ZScpLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IEN1c3RvbUVsZW1lbnQgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL2N1c3RvbS1lbGVtZW50LmRlY29yYXRvcic7XHJcbmltcG9ydCB7IEN1c3RvbUlucHV0RWxlbWVudCB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21JbnB1dEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBDdXN0b21FbGVtZW50RXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUV2ZW50cyc7XHJcbmltcG9ydCAqIGFzIGludGxUZWxJbnB1dCBmcm9tICdpbnRsLXRlbC1pbnB1dCc7XHJcbmltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ2ludGwtdGVsLWlucHV0JztcclxuaW1wb3J0IHsgTWFrZVJlcXVlc3QgfSBmcm9tICdAbHVmdGJvcm4vdXRpbGl0aWVzJztcclxuXHJcbkBDdXN0b21FbGVtZW50KHtcclxuXHRzZWxlY3RvcjogJ2ludC1waG9uZS1lbGVtZW50JyxcclxuXHR0ZW1wbGF0ZTogYFxyXG4gICAgICAgICAgICA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgaHJlZj1cImh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2ludGwtdGVsLWlucHV0LzE2LjAuMC9jc3MvaW50bFRlbElucHV0LmNzc1wiID5cclxuXHRcdFx0PGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuXHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRlbFwiIGlkPVwicGhvbmUtZmllbGRcIiAgLz5cclxuXHRcdFx0PC9kaXY+YCxcclxuXHRzdHlsZTogYFxyXG4gICAgOmhvc3R7XHJcbiAgICAgICAgICAgIHdpZHRoOjEwMCU7XHJcbiAgICB9XHJcbiAgICAud3JhcHBlcntcclxuICAgICAgICAgICAgZGlzcGxheTpmbGV4O1xyXG4gICAgfVxyXG4gICAgLml0aSB7XHJcbiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuICAgIH1cclxuICAgIGlucHV0e1xyXG4gICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWY0ZmY7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMnB4O1xyXG4gICAgICAgICAgICByZXNpemU6IG5vbmU7XHJcbiAgICB9XHJcbiAgICAgICAgICAgYCxcclxuXHR1c2VTaGFkb3c6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnRQaG9uZUZpZWxkRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0cGhvbmU6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblx0ZnVsbFBob25lOiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cdGludGxUZWxJbnB1dDogUGx1Z2luO1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWx1ZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuaW50bFRlbElucHV0LmdldE51bWJlcigpO1xyXG5cdH1cclxuXHJcblx0c2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMucGhvbmUudmFsdWUgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWxpZCgpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IHBhdHRlcm5WYWxpZCA9XHJcblx0XHRcdCF0aGlzLmludGxUZWxJbnB1dC5nZXROdW1iZXIoKSB8fCB0aGlzLmludGxUZWxJbnB1dC5pc1ZhbGlkTnVtYmVyKCk7XHJcblx0XHRyZXR1cm4gcGF0dGVyblZhbGlkICYmIHRoaXMucGhvbmUudmFsaWRpdHkudmFsaWQ7XHJcblx0fVxyXG5cclxuXHRjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2V0SW50bFRlbElucHV0KCk7XHJcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xyXG5cdH1cclxuXHJcblx0aW5pdENoaWxkSW5wdXRzKCkge1xyXG5cdFx0dGhpcy5waG9uZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHRoaXMucGhvbmUuc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsICcnKTtcclxuXHRcdH1cclxuXHR9XHJcblx0c2V0SW50bFRlbElucHV0KCkge1xyXG5cdFx0dGhpcy5waG9uZSA9IHN1cGVyLmdldENoaWxkSW5wdXQoJyNwaG9uZS1maWVsZCcpO1xyXG5cdFx0dGhpcy5pbnRsVGVsSW5wdXQgPSBpbnRsVGVsSW5wdXQodGhpcy5waG9uZSwge1xyXG5cdFx0XHRnZW9JcExvb2t1cDogKHN1Y2Nlc3MsIGZhaWx1cmUpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbmV3IE1ha2VSZXF1ZXN0KFxyXG5cdFx0XHRcdFx0J2h0dHBzOi8vaXBpbmZvLmlvL2pzb24/dG9rZW49ODIyNjEzODIxN2E2OGEnLFxyXG5cdFx0XHRcdFx0J2dldCcsXHJcblx0XHRcdFx0XHR7ICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcclxuXHRcdFx0XHQpXHJcblx0XHRcdFx0XHQuc2VuZCgpXHJcblx0XHRcdFx0XHQudGhlbigocmVxdWVzdDogYW55KSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdCk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBzdWNjZXNzKHJlcy5jb3VudHJ5KTtcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHQuY2F0Y2goZXJyID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHN1Y2Nlc3MoJ0RLJyk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0aGlkZGVuSW5wdXQ6ICdmdWxscGhvbmUnLFxyXG5cdFx0XHRpbml0aWFsQ291bnRyeTogJ2F1dG8nLFxyXG5cdFx0XHRuYXRpb25hbE1vZGU6IHRydWUsXHJcblx0XHRcdHV0aWxzU2NyaXB0OlxyXG5cdFx0XHRcdCdodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9pbnRsLXRlbC1pbnB1dC8xNS4wLjEvanMvdXRpbHMuanMnLFxyXG5cdFx0fSBhcyBhbnkpO1xyXG5cdFx0dGhpcy5pbnRsVGVsSW5wdXQucHJvbWlzZS50aGVuKGUgPT4ge1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLmZ1bGxQaG9uZSA9IHN1cGVyLmdldENoaWxkSW5wdXQoJ1tuYW1lPVwiZnVsbHBob25lXCJdJyk7XHJcblx0XHRcdH0sIDEwMDApO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdC8vIGV2ZW50c1xyXG5cdHB1YmxpYyBjaGFuZ2UoJGV2ZW50KTogdm9pZCB7XHJcblx0XHR0aGlzLnRvdWNoZWQgPSB0cnVlO1xyXG5cdFx0dGhpcy5vbkNoYW5nZS5lbWl0KG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICdjaGFuZ2UnKSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgdmFsaWRhdGUoKTogdm9pZCB7XHJcblx0XHR0aGlzLnZhbGlkO1xyXG5cdFx0dGhpcy5vblZhbGlkYXRlLmVtaXQoXHJcblx0XHRcdG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICd2YWxpZGF0ZScpLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IEN1c3RvbUVsZW1lbnQgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL2N1c3RvbS1lbGVtZW50LmRlY29yYXRvcic7XHJcbmltcG9ydCB7IEN1c3RvbUlucHV0RWxlbWVudCB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21JbnB1dEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBDdXN0b21FbGVtZW50RXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUV2ZW50cyc7XHJcblxyXG5AQ3VzdG9tRWxlbWVudCh7XHJcblx0c2VsZWN0b3I6ICdudW1lcmljLWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcblx0XHRcdFx0PGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD0nbnVtZXJpYy1maWVsZCcvPlxyXG5cdFx0XHQ8L2Rpdj5gLFxyXG5cdHN0eWxlOiBgXHJcbiAgICA6aG9zdHtcclxuICAgICAgICAgICAgd2lkdGg6MTAwJTtcclxuICAgIH1cclxuICAgIC53cmFwcGVye1xyXG4gICAgICAgICAgICBkaXNwbGF5OmZsZXg7XHJcbiAgICB9XHJcbiAgICBpbnB1dHtcclxuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNGZmO1xyXG4gICAgICAgICAgICBtYXJnaW46IDJweDtcclxuICAgICAgICAgICAgcmVzaXplOiBub25lO1xyXG4gICAgfVxyXG4gICAgICAgICAgIGAsXHJcblx0dXNlU2hhZG93OiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTnVtZXJpY0ZpZWxkRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0bnVtYmVyOiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsdWUoKTogYW55IHtcclxuXHRcdGlmIChpc05hTih0aGlzLm51bWJlci52YWx1ZUFzTnVtYmVyKSkge1xyXG5cdFx0XHRyZXR1cm4gJyc7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcy5udW1iZXIudmFsdWVBc051bWJlcjtcclxuXHR9XHJcblxyXG5cdHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XHJcblx0XHR0aGlzLm51bWJlci52YWx1ZUFzTnVtYmVyID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5udW1iZXIudmFsaWRpdHkudmFsaWQ7XHJcblx0fVxyXG5cclxuXHRjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcclxuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XHJcblx0fVxyXG5cclxuXHRpbml0Q2hpbGRJbnB1dHMoKSB7XHJcblx0XHR0aGlzLm51bWJlciA9IHN1cGVyLmdldENoaWxkSW5wdXQoJyNudW1lcmljLWZpZWxkJyk7XHJcblx0XHR0aGlzLm51bWJlci5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHRoaXMubnVtYmVyLnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAnJyk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5tYXgpIHtcclxuXHRcdFx0dGhpcy5udW1iZXIuc2V0QXR0cmlidXRlKCdtYXgnLCB0aGlzLm1heCk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5taW4pIHtcclxuXHRcdFx0dGhpcy5udW1iZXIuc2V0QXR0cmlidXRlKCdtaW4nLCB0aGlzLm1pbik7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5zdGVwKSB7XHJcblx0XHRcdHRoaXMubnVtYmVyLnNldEF0dHJpYnV0ZSgnc3RlcCcsIHRoaXMuc3RlcCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBldmVudHNcclxuXHRwdWJsaWMgY2hhbmdlKCRldmVudCk6IHZvaWQge1xyXG5cdFx0dGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuXHRcdHRoaXMub25DaGFuZ2UuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAnY2hhbmdlJykpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xyXG5cdFx0dGhpcy52YWxpZDtcclxuXHRcdHRoaXMub25WYWxpZGF0ZS5lbWl0KFxyXG5cdFx0XHRuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAndmFsaWRhdGUnKSxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDdXN0b21FbGVtZW50IGZyb20gJy4uLy4uL2ZyYW1ld29yay9jdXN0b20tZWxlbWVudC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dEVsZW1lbnQgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tSW5wdXRFbGVtZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21FdmVudHMnO1xyXG5pbXBvcnQgeyBTdHJpbmdVdGlsIH0gZnJvbSAnQGx1ZnRib3JuL3V0aWxpdGllcyc7XHJcblxyXG5AQ3VzdG9tRWxlbWVudCh7XHJcblx0c2VsZWN0b3I6ICdyYWRpby1ncm91cC1lbGVtZW50JyxcclxuXHR0ZW1wbGF0ZTogYFxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG5cdFx0XHQ8L2Rpdj5gLFxyXG5cdHN0eWxlOiBgXHJcblx0XHRcdDpob3N0e1xyXG5cdFx0XHRcdHdpZHRoOjEwMCU7XHJcblx0XHRcdH1cclxuXHRcdFx0LnJhZGlvLWJ1dHRvbiB7XHJcblx0XHRcdFx0d2lkdGg6IGF1dG87XHJcblx0XHRcdFx0bWFyZ2luOiBhdXRvIDNweDtcclxuXHRcdFx0XHRjb2xvcjogcmdiYSg3MiwgNzIsIDcyLCAwLjc1KTtcclxuXHRcdFx0XHRmb250LXNpemU6IDEzcHg7XHJcblx0XHRcdH1cclxuXHRcdFx0aW5wdXR7XHJcblx0XHRcdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcclxuXHRcdFx0XHR3aWR0aDogYXV0byAhaW1wb3J0YW50O1xyXG5cdFx0XHRcdGJvcmRlcjogbm9uZTtcclxuXHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNGZmO1xyXG5cdFx0XHRcdG1hcmdpbjogMnB4O1xyXG5cdFx0XHRcdHJlc2l6ZTogbm9uZTtcclxuXHRcdFx0fVxyXG5cdFx0YCxcclxuXHR1c2VTaGFkb3c6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSYWRpb0J1dHRvbkdyb3VwRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0cmFkaW9CdXR0b246IEhUTUxJbnB1dEVsZW1lbnRbXTtcclxuXHRyYWRpb0J1dHRvblRlbXBsYXRlID0gYFxyXG5cdDxkaXYgY2xhc3M9J3JhZGlvLWJ1dHRvbic+XHJcblx0XHQ8aW5wdXQgdHlwZT0ncmFkaW8nIG5hbWU9J3swfScgdmFsdWU9XCJ7MX1cIiBpZD1cInsyfVwiIHszfS8+XHJcblx0XHQ8bGFiZWwgZm9yPVwiezJ9XCI+ezF9PC9sYWJlbD5cclxuXHQ8L2Rpdj5gO1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsdWUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnJhZGlvQnV0dG9uLmZpbHRlcihjID0+IGMuY2hlY2tlZCkubWFwKGMgPT4gYy52YWx1ZSlbMF07XHJcblx0fVxyXG5cclxuXHRzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xyXG5cdFx0bGV0IG1hdGNoZWRSYWRpbyA9IHRoaXMucmFkaW9CdXR0b24uZmlsdGVyKGMgPT4gYy52YWx1ZSA9PT0gdmFsdWUpWzBdO1xyXG5cdFx0aWYgKG1hdGNoZWRSYWRpbykge1xyXG5cdFx0XHRtYXRjaGVkUmFkaW8uc2V0QXR0cmlidXRlKCdjaGVja2VkJywgJycpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKHRoaXMucmVxdWlyZWQpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMucmFkaW9CdXR0b24uZmlsdGVyKGMgPT4gYy5jaGVja2VkKS5sZW5ndGggPiAwO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcclxuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XHJcblx0fVxyXG5cclxuXHRpbml0Q2hpbGRJbnB1dHMoKSB7XHJcblx0XHR0aGlzLmFkZFJhZGlvQnV0dG9ucygpO1xyXG5cdFx0dGhpcy5yYWRpb0J1dHRvbiA9IHN1cGVyLmdldENoaWxkSW5wdXRzKGBbbmFtZT0nJHt0aGlzLm5hbWV9J11gKTtcclxuXHRcdHRoaXMucmFkaW9CdXR0b24uZm9yRWFjaChyYWRpbyA9PlxyXG5cdFx0XHRyYWRpby5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKSxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFkZFJhZGlvQnV0dG9ucygpIHtcclxuXHRcdGNvbnN0IHdyYXBwZXIgPSBzdXBlci5nZXRDaGlsZEVsZW1lbnQoJy53cmFwcGVyJyk7XHJcblx0XHR0aGlzLm9wdGlvbnMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcclxuXHRcdFx0d3JhcHBlci5pbnNlcnRBZGphY2VudEhUTUwoXHJcblx0XHRcdFx0J2JlZm9yZWVuZCcsXHJcblx0XHRcdFx0U3RyaW5nVXRpbC5TdHJpbmdGb3JtYXQoXHJcblx0XHRcdFx0XHR0aGlzLnJhZGlvQnV0dG9uVGVtcGxhdGUsXHJcblx0XHRcdFx0XHR0aGlzLm5hbWUsXHJcblx0XHRcdFx0XHRlbGVtZW50LFxyXG5cdFx0XHRcdFx0YCR7dGhpcy5uYW1lfS0ke2luZGV4fWAsXHJcblx0XHRcdFx0XHRgJHt0aGlzLnJlcXVpcmVkID8gJ3JlcXVpcmVkJyA6ICcnfWAsXHJcblx0XHRcdFx0KSxcclxuXHRcdFx0KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHQvLyBldmVudHNcclxuXHRwdWJsaWMgY2hhbmdlKCRldmVudCk6IHZvaWQge1xyXG5cdFx0dGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuXHRcdHRoaXMub25DaGFuZ2UuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAnY2hhbmdlJykpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xyXG5cdFx0dGhpcy52YWxpZDtcclxuXHRcdHRoaXMub25WYWxpZGF0ZS5lbWl0KFxyXG5cdFx0XHRuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAndmFsaWRhdGUnKSxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDdXN0b21FbGVtZW50IGZyb20gJy4uLy4uL2ZyYW1ld29yay9jdXN0b20tZWxlbWVudC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dEVsZW1lbnQgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tSW5wdXRFbGVtZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21FdmVudHMnO1xyXG5cclxuQEN1c3RvbUVsZW1lbnQoe1xyXG5cdHNlbGVjdG9yOiAndGV4dC1hcmVhLWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcblx0XHRcdFx0PHRleHRhcmVhIHJvd3M9NSBpZD0ndGV4dC1hcmVhLWZpZWxkJz48L3RleHRhcmVhPlxyXG5cdFx0XHQ8L2Rpdj5gLFxyXG5cdHN0eWxlOiBgXHJcbiAgICA6aG9zdHtcclxuICAgICAgICAgICAgd2lkdGg6MTAwJTtcclxuICAgIH1cclxuICAgIC53cmFwcGVye1xyXG4gICAgICAgICAgICBkaXNwbGF5OmZsZXg7XHJcbiAgICB9XHJcbiAgICB0ZXh0YXJlYXtcclxuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNGZmO1xyXG4gICAgICAgICAgICBtYXJnaW46IDJweDtcclxuICAgICAgICAgICAgcmVzaXplOiBub25lO1xyXG4gICAgfVxyXG4gICAgICAgICAgIGAsXHJcblx0dXNlU2hhZG93OiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dEFyZWFFbGVtZW50IGV4dGVuZHMgQ3VzdG9tSW5wdXRFbGVtZW50IHtcclxuXHR0ZXh0OiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsdWUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBgJHt0aGlzLnRleHQudmFsdWV9YDtcclxuXHR9XHJcblxyXG5cdHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcblx0XHR0aGlzLnRleHQudmFsdWUgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWxpZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLnRleHQudmFsaWRpdHkudmFsaWQ7XHJcblx0fVxyXG5cclxuXHRjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcclxuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XHJcblx0fVxyXG5cclxuXHRpbml0Q2hpbGRJbnB1dHMoKSB7XHJcblx0XHR0aGlzLnRleHQgPSBzdXBlci5nZXRDaGlsZElucHV0KCcjdGV4dC1hcmVhLWZpZWxkJyk7XHJcblx0XHR0aGlzLnRleHQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5jaGFuZ2UuYmluZCh0aGlzKSk7XHJcblx0XHRpZiAodGhpcy5yZXF1aXJlZCkge1xyXG5cdFx0XHR0aGlzLnRleHQuc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsICcnKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIGV2ZW50c1xyXG5cdHB1YmxpYyBjaGFuZ2UoJGV2ZW50KTogdm9pZCB7XHJcblx0XHR0aGlzLnRvdWNoZWQgPSB0cnVlO1xyXG5cdFx0dGhpcy5vbkNoYW5nZS5lbWl0KG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICdjaGFuZ2UnKSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgdmFsaWRhdGUoKTogdm9pZCB7XHJcblx0XHR0aGlzLnZhbGlkO1xyXG5cdFx0dGhpcy5vblZhbGlkYXRlLmVtaXQoXHJcblx0XHRcdG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICd2YWxpZGF0ZScpLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IEN1c3RvbUVsZW1lbnQgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL2N1c3RvbS1lbGVtZW50LmRlY29yYXRvcic7XHJcbmltcG9ydCB7IEN1c3RvbUlucHV0RWxlbWVudCB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21JbnB1dEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBDdXN0b21FbGVtZW50RXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUV2ZW50cyc7XHJcblxyXG5AQ3VzdG9tRWxlbWVudCh7XHJcblx0c2VsZWN0b3I6ICd0ZXh0LWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcblx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9J3RleHQtZmllbGQnLz5cclxuXHRcdFx0PC9kaXY+YCxcclxuXHRzdHlsZTogYFxyXG5cdDpob3N0e1xyXG5cdFx0XHR3aWR0aDoxMDAlO1xyXG5cdH1cclxuXHQud3JhcHBlcntcclxuXHRcdFx0ZGlzcGxheTpmbGV4O1xyXG5cdH1cclxuXHRpbnB1dHtcclxuXHRcdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcclxuXHRcdFx0d2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuXHRcdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNGZmO1xyXG5cdFx0XHRtYXJnaW46IDJweDtcclxuXHRcdFx0cmVzaXplOiBub25lO1xyXG5cdH1cclxuXHRcdGAsXHJcblx0dXNlU2hhZG93OiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dEZpZWxkRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0dGV4dDogSFRNTElucHV0RWxlbWVudDtcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbHVlKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gYCR7dGhpcy50ZXh0LnZhbHVlfWA7XHJcblx0fVxyXG5cclxuXHRzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xyXG5cdFx0dGhpcy50ZXh0LnZhbHVlID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy50ZXh0LnZhbGlkaXR5LnZhbGlkO1xyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xyXG5cdH1cclxuXHJcblx0aW5pdENoaWxkSW5wdXRzKCkge1xyXG5cdFx0dGhpcy50ZXh0ID0gc3VwZXIuZ2V0Q2hpbGRJbnB1dCgnI3RleHQtZmllbGQnKTtcclxuXHRcdHRoaXMudGV4dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHRoaXMudGV4dC5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJycpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gZXZlbnRzXHJcblx0cHVibGljIGNoYW5nZSgkZXZlbnQpOiB2b2lkIHtcclxuXHRcdHRoaXMudG91Y2hlZCA9IHRydWU7XHJcblx0XHR0aGlzLm9uQ2hhbmdlLmVtaXQobmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ2NoYW5nZScpKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB2YWxpZGF0ZSgpOiB2b2lkIHtcclxuXHRcdHRoaXMudmFsaWQ7XHJcblx0XHR0aGlzLm9uVmFsaWRhdGUuZW1pdChcclxuXHRcdFx0bmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ3ZhbGlkYXRlJyksXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ3VzdG9tRWxlbWVudCBmcm9tICcuLi8uLi9mcmFtZXdvcmsvY3VzdG9tLWVsZW1lbnQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgQ3VzdG9tSW5wdXRFbGVtZW50IH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUlucHV0RWxlbWVudCc7XHJcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tRXZlbnRzJztcclxuaW1wb3J0IE9wdGlvbldpdGhEZXNjcmlwdGlvbiBmcm9tICcuLi8uLi9mcmFtZXdvcmsvTW9kZWxzL09wdGlvbldpdGhEZXNjcmlwdGlvbic7XHJcbmltcG9ydCBEb21VdGlsaXR5IGZyb20gJy4uLy4uL2ZyYW1ld29yay9VdGlsaXRpZXMvRG9tVXRpbGl0eSc7XHJcblxyXG5AQ3VzdG9tRWxlbWVudCh7XHJcblx0c2VsZWN0b3I6ICd0eXBlLWFoZWFkLWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHQ8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG5cdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInRleHQtaW5wdXRcIj5cclxuXHRcdFx0PGRpdiBpZD1cImRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcblx0XHQ8L2Rpdj5gLFxyXG5cdHN0eWxlOiBgXHJcblx0XHQ6aG9zdCB7XHJcblx0XHRcdHdpZHRoOjEwMCU7XHJcblx0XHR9XHJcblx0XHQud3JhcHBlciB7XHJcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHRcdFx0ZGlzcGxheTpmbGV4O1xyXG5cdFx0XHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG5cdFx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuXHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHRcdH1cclxuXHRcdCN0ZXh0LWlucHV0IHtcclxuXHRcdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcclxuXHRcdFx0d2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuXHRcdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNGZmO1xyXG5cdFx0XHRtYXJnaW46IDJweDtcclxuXHRcdFx0cmVzaXplOiBub25lO1xyXG5cdFx0fVxyXG5cdFx0LndyYXBwZXIgI2Rlc2NyaXB0aW9uIHtcclxuXHRcdFx0d2lkdGg6IDEwMCU7XHJcblx0XHRcdHBhZGRpbmc6IDAgMnB4O1xyXG5cdFx0XHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG5cdFx0fVxyXG5cdFx0Lm9wdGlvbnMtbGlzdCB7XHJcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI0U4RThFODtcclxuXHRcdFx0Ym9yZGVyLWJvdHRvbTogbm9uZTtcclxuXHRcdFx0Ym9yZGVyLXRvcDogbm9uZTtcclxuXHRcdFx0ei1pbmRleDogMztcclxuXHRcdFx0dG9wOiAxMDAlO1xyXG5cdFx0XHRsZWZ0OiAwO1xyXG5cdFx0XHRyaWdodDogMDtcclxuXHRcdFx0bWF4LWhlaWdodDogMjAwcHg7XHJcblx0XHRcdG92ZXJmbG93LXk6IGF1dG87XHJcblx0XHR9XHJcblx0XHQub3B0aW9ucy1saXN0LWl0ZW0ge1xyXG5cdFx0XHRwYWRkaW5nOiAxMHB4O1xyXG5cdFx0XHRjdXJzb3I6IHBvaW50ZXI7XHJcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7XHJcblx0XHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRThFOEU4O1xyXG5cdFx0fVxyXG5cdFx0Lm9wdGlvbnMtbGlzdC1pdGVtOmhvdmVyIHtcclxuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI0U4RThFODtcclxuXHRcdH1cclxuXHRcdC5vcHRpb25zLWxpc3QtaXRlbS5hY3RpdmUge1xyXG5cdFx0XHQvKndoZW4gbmF2aWdhdGluZyB0aHJvdWdoIHRoZSBpdGVtcyB1c2luZyB0aGUgYXJyb3cga2V5czoqL1xyXG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjMDAzRTY0ICFpbXBvcnRhbnQ7XHJcblx0XHRcdGNvbG9yOiAjRkZGRkZGO1xyXG5cdFx0fVxyXG5cdFx0Lm9wdGlvbnMtbGlzdC1pdGVtLXRpdGxlIHtcclxuXHRcdFx0Zm9udC1zaXplOiAxNnB4O1xyXG5cdFx0fVxyXG5cdFx0Lm9wdGlvbnMtbGlzdC1pdGVtLWRlc2NyaXB0aW9uIHtcclxuXHRcdFx0Zm9udC1zaXplOiAxMHB4O1xyXG5cdFx0fVxyXG5cdGAsXHJcblx0dXNlU2hhZG93OiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHlwZUFoZWFkRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblxyXG5cdHByaXZhdGUgdGV4dElucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudDtcclxuXHRwcml2YXRlIGRlc2NyaXB0aW9uRWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcblx0cHJpdmF0ZSBjb21wb25lbnRXcmFwcGVyOiBIVE1MRWxlbWVudDtcclxuXHRwcml2YXRlIGN1cnJlbnRGb3Vjc2VkSW5kZXggPSAtMTtcclxuXHJcblx0c2VsZWN0ZWRPcHRpb246IE9wdGlvbldpdGhEZXNjcmlwdGlvbjtcclxuXHRzZWFyY2hSZXN1bHRPcHRpb25zOiBPcHRpb25XaXRoRGVzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldCBzZWFyY2hIYXNSZXN1bHRzKCk6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgYXV0b2NvbXBsZXRlTGlzdCA9IHN1cGVyLmdldENoaWxkRWxlbWVudCgnLm9wdGlvbnMtbGlzdCcpO1xyXG5cdFx0cmV0dXJuIGF1dG9jb21wbGV0ZUxpc3QgJiYgdGhpcy5vcHRpb25zV2l0aERlc2NyaXB0aW9ucyAmJiB0aGlzLm9wdGlvbnNXaXRoRGVzY3JpcHRpb25zLmxlbmd0aCA+IDA7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsdWUoKTogc3RyaW5nIHtcclxuXHRcdGlmICghdGhpcy5zZWxlY3RlZE9wdGlvbikge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzLnNlbGVjdGVkT3B0aW9uLnZhbHVlO1xyXG5cdH1cclxuXHJcblx0c2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuXHRcdGlmICghdGhpcy5vcHRpb25zV2l0aERlc2NyaXB0aW9ucyB8fCB0aGlzLm9wdGlvbnNXaXRoRGVzY3JpcHRpb25zLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBvcHRpb24gPSB0aGlzLm9wdGlvbnNXaXRoRGVzY3JpcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpO1xyXG5cdFx0aWYgKCFvcHRpb24pIHtcclxuXHRcdFx0dGhpcy5kZXNjcmlwdGlvbkVsZW1lbnQuaW5uZXJIVE1MID0gbnVsbDtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZWxlY3RlZE9wdGlvbiA9IG9wdGlvbjtcclxuXHRcdHRoaXMudGV4dElucHV0RWxlbWVudC52YWx1ZSA9IG9wdGlvbi50aXRsZTtcclxuXHRcdHRoaXMuZGVzY3JpcHRpb25FbGVtZW50LmlubmVySFRNTCA9IG9wdGlvbi5kZXNjcmlwdGlvbjtcclxuXHR9XHJcblxyXG5cdGdldCB2YWxpZCgpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHJldHVybiAhIXRoaXMuc2VsZWN0ZWRPcHRpb247XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gISF0aGlzLnNlbGVjdGVkT3B0aW9uIHx8IHRoaXMudGV4dElucHV0RWxlbWVudC52YWx1ZSA9PT0gJyc7XHJcblx0fVxyXG5cclxuXHRjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcclxuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XHJcblx0fVxyXG5cclxuXHRpbml0Q2hpbGRJbnB1dHMoKSB7XHJcblx0XHR0aGlzLnRleHRJbnB1dEVsZW1lbnQgPSBzdXBlci5nZXRDaGlsZElucHV0KCcjdGV4dC1pbnB1dCcpO1xyXG5cdFx0dGhpcy5kZXNjcmlwdGlvbkVsZW1lbnQgPSBzdXBlci5nZXRDaGlsZElucHV0KCcjZGVzY3JpcHRpb24nKTtcclxuXHRcdHRoaXMuY29tcG9uZW50V3JhcHBlciA9IHN1cGVyLmdldENoaWxkRWxlbWVudCgnLndyYXBwZXInKTtcclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHRoaXMudGV4dElucHV0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJycpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy50ZXh0SW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuY2hhbmdlLmJpbmQodGhpcykpO1xyXG5cdFx0dGhpcy50ZXh0SW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG5cdFx0XHR0aGlzLmlucHV0RXZlbnRIYW5kbGVyKCk7XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYmluZE5hdmlnYXRpb24oKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaW5wdXRFdmVudEhhbmRsZXIoKSB7XHJcblx0XHR0aGlzLnNlbGVjdGVkT3B0aW9uID0gbnVsbDtcclxuXHRcdHRoaXMuZGVzY3JpcHRpb25FbGVtZW50LmlubmVySFRNTCA9IG51bGw7XHJcblx0XHR0aGlzLmNsb3NlT3B0aW9uc0xpc3QoKTtcclxuXHRcdHRoaXMuc2VhcmNoUmVzdWx0T3B0aW9ucyA9IFtdO1xyXG5cdFx0Y29uc3Qgc2VhcmNoVmFsdWUgPSB0aGlzLnRleHRJbnB1dEVsZW1lbnQudmFsdWU7XHJcblx0XHRpZiAoIXNlYXJjaFZhbHVlIHx8IHNlYXJjaFZhbHVlLnRyaW0oKSA9PT0gJycpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3Qgb3B0aW9uc2xpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHRcdG9wdGlvbnNsaXN0LmNsYXNzTGlzdC5hZGQoJ29wdGlvbnMtbGlzdCcpO1xyXG5cclxuXHRcdGlmICghdGhpcy5vcHRpb25zV2l0aERlc2NyaXB0aW9ucykge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLm9wdGlvbnNXaXRoRGVzY3JpcHRpb25zLmZvckVhY2goKG9wdGlvbjogT3B0aW9uV2l0aERlc2NyaXB0aW9uLCBpbmRleCkgPT4ge1xyXG5cdFx0XHR2YXIgcmVnZXggPSBuZXcgUmVnRXhwKHNlYXJjaFZhbHVlLCAnZ2knKTtcclxuXHRcdFx0Y29uc3QgaXNNYXRjaGluZ1RpdGxlID0gcmVnZXgudGVzdChvcHRpb24udGl0bGUpO1xyXG5cdFx0XHRjb25zdCBpc01hdGNoaW5nVmFsdWUgPSByZWdleC50ZXN0KG9wdGlvbi52YWx1ZSk7XHJcblx0XHRcdGNvbnN0IGlzTWF0Y2hpbmdEZXNjcmlwdGlvbiA9IHJlZ2V4LnRlc3Qob3B0aW9uLmRlc2NyaXB0aW9uKTtcclxuXHRcdFx0aWYgKCFpc01hdGNoaW5nVGl0bGUgJiYgIWlzTWF0Y2hpbmdWYWx1ZSAmJiAhaXNNYXRjaGluZ0Rlc2NyaXB0aW9uKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuc2VhcmNoUmVzdWx0T3B0aW9ucy5wdXNoKG9wdGlvbik7XHJcblx0XHRcdGNvbnN0IG9wdGlvbnNMaXN0SXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHRcdG9wdGlvbnNMaXN0SXRlbS5jbGFzc0xpc3QuYWRkKCdvcHRpb25zLWxpc3QtaXRlbScpO1xyXG5cdFx0XHRvcHRpb25zTGlzdEl0ZW0uZGF0YXNldFsndmFsdWUnXSA9IG9wdGlvbi52YWx1ZTtcclxuXHRcdFx0b3B0aW9uc2xpc3QuYXBwZW5kQ2hpbGQob3B0aW9uc0xpc3RJdGVtKTtcclxuXHRcdFx0Y29uc3Qgb3B0aW9uc0xpc3RJdGVtVGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0XHRvcHRpb25zTGlzdEl0ZW1UaXRsZS5jbGFzc0xpc3QuYWRkKCdvcHRpb25zLWxpc3QtaXRlbS10aXRsZScpO1xyXG5cdFx0XHRvcHRpb25zTGlzdEl0ZW1UaXRsZS5pbm5lckhUTUwgPSBEb21VdGlsaXR5LmJvbGRlblRleHQob3B0aW9uLnRpdGxlLCBzZWFyY2hWYWx1ZSk7XHJcblx0XHRcdG9wdGlvbnNMaXN0SXRlbS5hcHBlbmRDaGlsZChvcHRpb25zTGlzdEl0ZW1UaXRsZSk7XHJcblx0XHRcdGNvbnN0IG9wdGlvbnNMaXN0SXRlbURlc2NyaXB0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHRcdFx0b3B0aW9uc0xpc3RJdGVtRGVzY3JpcHRpb24uY2xhc3NMaXN0LmFkZCgnb3B0aW9ucy1saXN0LWl0ZW0tZGVzY3JpcHRpb24nKTtcclxuXHRcdFx0b3B0aW9uc0xpc3RJdGVtRGVzY3JpcHRpb24uaW5uZXJIVE1MID0gRG9tVXRpbGl0eS5ib2xkZW5UZXh0KG9wdGlvbi5kZXNjcmlwdGlvbiwgc2VhcmNoVmFsdWUpO1xyXG5cdFx0XHRvcHRpb25zTGlzdEl0ZW0uYXBwZW5kQ2hpbGQob3B0aW9uc0xpc3RJdGVtRGVzY3JpcHRpb24pO1xyXG5cdFx0XHRvcHRpb25zTGlzdEl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5vcHRpb25TZWxlY3RlZEhhbmRsZXIob3B0aW9uKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHRoaXMuY29tcG9uZW50V3JhcHBlci5hcHBlbmRDaGlsZChvcHRpb25zbGlzdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2xvc2VPcHRpb25zTGlzdCgpIHtcclxuXHRcdHRoaXMuY3VycmVudEZvdWNzZWRJbmRleCA9IC0xO1xyXG5cdFx0Y29uc3Qgb3B0aW9uc0xpc3QgPSBzdXBlci5nZXRDaGlsZEVsZW1lbnQoJy5vcHRpb25zLWxpc3QnKTtcclxuXHRcdGlmICghb3B0aW9uc0xpc3QpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0b3B0aW9uc0xpc3QucmVtb3ZlKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG9wdGlvblNlbGVjdGVkSGFuZGxlcihvcHRpb246IE9wdGlvbldpdGhEZXNjcmlwdGlvbikge1xyXG5cdFx0dGhpcy52YWx1ZSA9IG9wdGlvbi52YWx1ZTtcclxuXHRcdHRoaXMub25DaGFuZ2UuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAnY2hhbmdlJykpO1xyXG5cdFx0dGhpcy5jbG9zZU9wdGlvbnNMaXN0KCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGJpbmROYXZpZ2F0aW9uKCkge1xyXG5cdFx0dGhpcy50ZXh0SW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcclxuXHRcdFx0aWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcclxuXHRcdFx0XHR0aGlzLmNsb3NlT3B0aW9uc0xpc3QoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xyXG5cdFx0XHRcdGlmICghdGhpcy5zZWFyY2hIYXNSZXN1bHRzKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuY3VycmVudEZvdWNzZWRJbmRleCA9IHRoaXMuY3VycmVudEZvdWNzZWRJbmRleCA9PT0gdGhpcy5zZWFyY2hSZXN1bHRPcHRpb25zLmxlbmd0aCAtIDEgPyAwIDogdGhpcy5jdXJyZW50Rm91Y3NlZEluZGV4ICsgMTtcclxuXHRcdFx0XHR0aGlzLmhpZ2hsaWdodEZvY3VzZWRTZWFyY2hSZXN1bHQoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcclxuXHRcdFx0XHRpZiAoIXRoaXMuc2VhcmNoSGFzUmVzdWx0cykge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLmN1cnJlbnRGb3Vjc2VkSW5kZXggPSB0aGlzLmN1cnJlbnRGb3Vjc2VkSW5kZXggPT09IDAgPyB0aGlzLnNlYXJjaFJlc3VsdE9wdGlvbnMubGVuZ3RoIC0gMSA6IHRoaXMuY3VycmVudEZvdWNzZWRJbmRleCAtIDE7XHJcblx0XHRcdFx0dGhpcy5oaWdobGlnaHRGb2N1c2VkU2VhcmNoUmVzdWx0KCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xyXG5cdFx0XHRcdGlmICh0aGlzLmN1cnJlbnRGb3Vjc2VkSW5kZXggIT09IC0xICYmIHRoaXMuc2VhcmNoSGFzUmVzdWx0cykge1xyXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25TZWxlY3RlZEhhbmRsZXIodGhpcy5zZWFyY2hSZXN1bHRPcHRpb25zW3RoaXMuY3VycmVudEZvdWNzZWRJbmRleF0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRoaWdobGlnaHRGb2N1c2VkU2VhcmNoUmVzdWx0KCkge1xyXG5cdFx0Y29uc3Qgb3B0aW9uTGlzdEl0ZW1zID0gc3VwZXIuZ2V0Q2hpbGRFbGVtZW50cygnLm9wdGlvbnMtbGlzdC1pdGVtJyk7XHJcblx0XHRpZiAoIW9wdGlvbkxpc3RJdGVtcykge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRvcHRpb25MaXN0SXRlbXMuZm9yRWFjaCgobGlzdEl0ZW0sIGluZGV4KSA9PiB7XHJcblx0XHRcdGxpc3RJdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG5cdFx0XHRpZiAoaW5kZXggPT09IHRoaXMuY3VycmVudEZvdWNzZWRJbmRleCkge1xyXG5cdFx0XHRcdGxpc3RJdGVtLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBjaGFuZ2UoJGV2ZW50KTogdm9pZCB7XHJcblx0XHR0aGlzLnRvdWNoZWQgPSB0cnVlO1xyXG5cdFx0dGhpcy5vbkNoYW5nZS5lbWl0KG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICdjaGFuZ2UnKSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgdmFsaWRhdGUoKTogdm9pZCB7XHJcblx0XHR0aGlzLnZhbGlkO1xyXG5cdFx0dGhpcy5vblZhbGlkYXRlLmVtaXQoXHJcblx0XHRcdG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICd2YWxpZGF0ZScpLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiZXhwb3J0IGludGVyZmFjZSBMaXN0ZW5lcjxUPiB7XHJcbiAgICAoZXZlbnQ6IFQpOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlzcG9zYWJsZSB7XHJcbiAgICBkaXNwb3NlKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21FbGVtZW50RXZlbnRBcmdzIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZTogYW55LCBwdWJsaWMgZXZlbnROYW1lOiBzdHJpbmcpIHt9XHJcbn1cclxuLyoqIHBhc3NlcyB0aHJvdWdoIGV2ZW50cyBhcyB0aGV5IGhhcHBlbi4gWW91IHdpbGwgbm90IGdldCBldmVudHMgZnJvbSBiZWZvcmUgeW91IHN0YXJ0IGxpc3RlbmluZyAqL1xyXG5leHBvcnQgY2xhc3MgQ3VzdG9tRWxlbWVudEV2ZW50PFQ+IHtcclxuICAgIHByaXZhdGUgbGlzdGVuZXJzOiBMaXN0ZW5lcjxUPltdID0gW107XHJcbiAgICBwcml2YXRlIGxpc3RlbmVyc09uY2VyOiBMaXN0ZW5lcjxUPltdID0gW107XHJcblxyXG4gICAgb24gPSAobGlzdGVuZXI6IExpc3RlbmVyPFQ+KTogRGlzcG9zYWJsZSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGlzcG9zZTogKCkgPT4gdGhpcy5vZmYobGlzdGVuZXIpLFxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIG9uY2UgPSAobGlzdGVuZXI6IExpc3RlbmVyPFQ+KTogdm9pZCA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lcnNPbmNlci5wdXNoKGxpc3RlbmVyKTtcclxuICAgIH07XHJcblxyXG4gICAgb2ZmID0gKGxpc3RlbmVyOiBMaXN0ZW5lcjxUPikgPT4ge1xyXG4gICAgICAgIHZhciBjYWxsYmFja0luZGV4ID0gdGhpcy5saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrSW5kZXggPiAtMSkgdGhpcy5saXN0ZW5lcnMuc3BsaWNlKGNhbGxiYWNrSW5kZXgsIDEpO1xyXG4gICAgfTtcclxuXHJcbiAgICBlbWl0ID0gKGV2ZW50OiBUKSA9PiB7XHJcbiAgICAgICAgLyoqIFVwZGF0ZSBhbnkgZ2VuZXJhbCBsaXN0ZW5lcnMgKi9cclxuICAgICAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IGxpc3RlbmVyKGV2ZW50KSk7XHJcblxyXG4gICAgICAgIC8qKiBDbGVhciB0aGUgYG9uY2VgIHF1ZXVlICovXHJcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuZXJzT25jZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc09uY2VyLmZvckVhY2gobGlzdGVuZXIgPT4gbGlzdGVuZXIoZXZlbnQpKTtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNPbmNlciA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcGlwZSA9ICh0ZTogQ3VzdG9tRWxlbWVudEV2ZW50PFQ+KTogRGlzcG9zYWJsZSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub24oZSA9PiB0ZS5lbWl0KGUpKTtcclxuICAgIH07XHJcbn1cclxuIiwiaW1wb3J0IHsgQ3VzdG9tRWxlbWVudEV2ZW50LCBDdXN0b21FbGVtZW50RXZlbnRBcmdzIH0gZnJvbSBcIi4vQ3VzdG9tRXZlbnRzXCI7XHJcbmltcG9ydCB7IERvbVV0aWwsIEFycmF5VXRpbCB9IGZyb20gXCJAbHVmdGJvcm4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBPcHRpb25XaXRoRGVzY3JpcHRpb24gZnJvbSBcIi4vTW9kZWxzL09wdGlvbldpdGhEZXNjcmlwdGlvblwiO1xyXG5cclxuY2xhc3MgSURpY3Rpb25hcnk8VFZhbHVlPiB7XHJcblx0W2luZGV4OiBzdHJpbmddOiBUVmFsdWU7XHJcbn1cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEN1c3RvbUlucHV0RWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcclxuXHRwcml2YXRlIGRlcGVuZGVudE9uTGlzdCA9IG5ldyBJRGljdGlvbmFyeTxib29sZWFuPigpO1xyXG5cdHByaXZhdGUgdmlzaWJpbGl0eVN0YXRlID0gdHJ1ZTtcclxuXHJcblx0cHJvdGVjdGVkIHRvdWNoZWQgPSBmYWxzZTtcclxuXHRwcm90ZWN0ZWQgZG9tVXRpbDogRG9tVXRpbDtcclxuXHJcblx0cHJvdGVjdGVkIGhhc1ZhbHVlRGVwZW5kZW5jeTogYW55O1xyXG5cdHByb3RlY3RlZCBub1ZhbHVlRGVwZW5kZW5jeTogYW55O1xyXG5cdHByb3RlY3RlZCBkZXBlbmRlbmNpZXM6IGFueVtdO1xyXG5cclxuXHRwdWJsaWMgb25DaGFuZ2UgPSBuZXcgQ3VzdG9tRWxlbWVudEV2ZW50PEN1c3RvbUVsZW1lbnRFdmVudEFyZ3M+KCk7XHJcblx0cHVibGljIG9uVmFsaWRhdGUgPSBuZXcgQ3VzdG9tRWxlbWVudEV2ZW50PEN1c3RvbUVsZW1lbnRFdmVudEFyZ3M+KCk7XHJcblx0cHVibGljIG9uVmlzaWJpbGl0eUNoYW5nZWQgPSBuZXcgQ3VzdG9tRWxlbWVudEV2ZW50PEN1c3RvbUVsZW1lbnRFdmVudEFyZ3M+KCk7XHJcblxyXG5cdHB1YmxpYyBuYW1lOiBzdHJpbmc7XHJcblx0cHVibGljIG9wdGlvbnM6IGFueVtdO1xyXG5cdHB1YmxpYyBvcHRpb25zV2l0aERlc2NyaXB0aW9uczogT3B0aW9uV2l0aERlc2NyaXB0aW9uW107XHJcblx0cHVibGljIHJlcXVpcmVkOiBib29sZWFuO1xyXG5cdHB1YmxpYyBjdXN0b21WYWx1ZTogc3RyaW5nO1xyXG5cdHB1YmxpYyBhbGxEZXBlbmRlbmNpZXNNdXN0QmVNZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRwdWJsaWMgbXVsdGk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRwdWJsaWMgbWF4OiBhbnk7XHJcblx0cHVibGljIG1pbjogYW55O1xyXG5cdHB1YmxpYyBzdGVwOiBhbnk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHR9XHJcblxyXG5cdGFic3RyYWN0IGdldCB2YWx1ZSgpOiBhbnk7XHJcblx0YWJzdHJhY3Qgc2V0IHZhbHVlKHZhbHVlKTtcclxuXHRhYnN0cmFjdCBnZXQgdmFsaWQoKTogYm9vbGVhbjtcclxuXHJcblx0YWJzdHJhY3QgaW5pdENoaWxkSW5wdXRzKCk6IHZvaWQ7XHJcblx0YWJzdHJhY3QgdmFsaWRhdGUoKTogdm9pZDtcclxuXHRhYnN0cmFjdCBjaGFuZ2UoJGV2ZW50KTogdm9pZDtcclxuXHJcblx0Y29tcGFyZVZsYXVlcyA9IFtdO1xyXG5cclxuXHRpc1ZhbHVlQ29uZGl0aW9uTWF0Y2hlZCh2YWw6IGFueSkge1xyXG5cdFx0aWYgKHZhbCAmJiBBcnJheS5pc0FycmF5KHZhbCkgJiYgdmFsLmxlbmd0aCkge1xyXG5cdFx0XHRsZXQgcmVzdWx0ID0gZmFsc2U7XHJcblx0XHRcdHZhbC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGVsZW1lbnRNYXRjaGVkID0gdGhpcy5jb21wYXJlVmxhdWVzLmZpbmRJbmRleCh4ID0+IHggPT0gZWxlbWVudCkgIT09IC0xO1xyXG5cdFx0XHRcdGlmIChlbGVtZW50TWF0Y2hlZCkge1xyXG5cdFx0XHRcdFx0cmVzdWx0ID0gdHJ1ZTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZVZsYXVlcy5maW5kSW5kZXgoeCA9PiB4ID09IHZhbCkgIT09IC0xO1xyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlcygpO1xyXG5cdH1cclxuXHJcblx0aW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcclxuXHRcdHRoaXMuZG9tVXRpbCA9IG5ldyBEb21VdGlsKHRoaXMpO1xyXG5cdFx0dGhpcy5wYXJzZURhdGEoKTtcclxuXHRcdHRoaXMuaW5pdENoaWxkSW5wdXRzKCk7XHJcblx0XHR0aGlzLmJpbmRFdmVudHMoKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlcygpO1xyXG5cclxuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7XHJcblx0XHRcdHRoaXMuYmluZERlcGVuZGVuY2llcygpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlRGF0YSgpOiB2b2lkIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmICghKHRoaXMuY2hpbGRyZW5bMF0gaW5zdGFuY2VvZiBIVE1MU2NyaXB0RWxlbWVudCkpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0bGV0IGRhdGEgPSBKU09OLnBhcnNlKHRoaXMuY2hpbGRyZW5bMF0uaW5uZXJIVE1MKTtcclxuXHRcdFx0dGhpcy5vcHRpb25zID0gZGF0YS5vcHRpb25zO1xyXG5cdFx0XHR0aGlzLm9wdGlvbnNXaXRoRGVzY3JpcHRpb25zID0gZGF0YS5vcHRpb25zV2l0aERlc2NyaXB0aW9ucztcclxuXHRcdFx0dGhpcy5oYXNWYWx1ZURlcGVuZGVuY3kgPSBkYXRhLmhhc1ZhbHVlRGVwZW5kZW5jeTtcclxuXHRcdFx0dGhpcy5ub1ZhbHVlRGVwZW5kZW5jeSA9IGRhdGEubm9WYWx1ZURlcGVuZGVuY3k7XHJcblx0XHRcdHRoaXMuZGVwZW5kZW5jaWVzID0gZGF0YS5kZXBlbmRlbmNpZXM7XHJcblx0XHRcdHRoaXMucmVxdWlyZWQgPSBkYXRhLnJlcXVpcmVkO1xyXG5cdFx0XHR0aGlzLm5hbWUgPSBkYXRhLm5hbWU7XHJcblx0XHRcdHRoaXMuYWxsRGVwZW5kZW5jaWVzTXVzdEJlTWV0ID0gZGF0YS5hbGxEZXBlbmRlbmNpZXNNdXN0QmVNZXQ7XHJcblx0XHRcdHRoaXMubXVsdGkgPSBkYXRhLm11bHRpO1xyXG5cdFx0XHR0aGlzLm1heCA9IGRhdGEubWF4O1xyXG5cdFx0XHR0aGlzLm1pbiA9IGRhdGEubWluO1xyXG5cdFx0XHR0aGlzLnN0ZXAgPSBkYXRhLnN0ZXA7XHJcblx0XHRcdHRoaXMuY3VzdG9tVmFsdWUgPSBkYXRhLnZhbHVlO1xyXG5cdFx0fSBjYXRjaCAoZXgpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihleCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGJpbmRFdmVudHMoKTogdm9pZCB7XHJcblx0XHR0aGlzLm9uVmFsaWRhdGUub24oZSA9PiB7XHJcblx0XHRcdGlmICh0aGlzLnZhbGlkKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuY2xvc2VzdCgnLmN1c3RvbS12YWxpZGF0aW9uLXRhcmdldCcpKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNsb3Nlc3QoJy5jdXN0b20tdmFsaWRhdGlvbi10YXJnZXQnKS5jbGFzc0xpc3QucmVtb3ZlKFwiaW52YWxpZFwiKTtcclxuXHRcdFx0XHRcdHRoaXMuY2xvc2VzdCgnLmN1c3RvbS12YWxpZGF0aW9uLXRhcmdldCcpLmNsYXNzTGlzdC5hZGQoXCJ2YWxpZFwiKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuY2xvc2VzdCgnLmN1c3RvbS12YWxpZGF0aW9uLXRhcmdldCcpKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNsb3Nlc3QoJy5jdXN0b20tdmFsaWRhdGlvbi10YXJnZXQnKS5jbGFzc0xpc3QuYWRkKFwiaW52YWxpZFwiKTtcclxuXHRcdFx0XHRcdHRoaXMuY2xvc2VzdCgnLmN1c3RvbS12YWxpZGF0aW9uLXRhcmdldCcpLmNsYXNzTGlzdC5yZW1vdmUoXCJ2YWxpZFwiKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5kb21VdGlsLmZvY3VzKCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5vbkNoYW5nZS5vbihlID0+IHtcclxuXHRcdFx0aWYgKHRoaXMudG91Y2hlZCkge1xyXG5cdFx0XHRcdHRoaXMudmFsaWRhdGUoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldEF0dHJpYnV0ZXMoKTogdm9pZCB7XHJcblx0XHR0aGlzLnNldEF0dHJpYnV0ZShcImN1c3RvbS1pbnB1dFwiLCBcIlwiKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKFwibmFtZVwiLCB0aGlzLm5hbWUpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBiaW5kRGVwZW5kZW5jaWVzKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuaGFzVmFsdWVEZXBlbmRlbmN5ICYmIHRoaXMuaGFzVmFsdWVEZXBlbmRlbmN5Lml0ZW1zLmxlbmd0aCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGZpZWxkTmFtZSBvZiB0aGlzLmhhc1ZhbHVlRGVwZW5kZW5jeS5pdGVtcykge1xyXG5cdFx0XHRcdHRoaXMuYmluZERlcGVuZGVuY3koZmllbGROYW1lLCBcImhhc1wiKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLm5vVmFsdWVEZXBlbmRlbmN5ICYmIHRoaXMubm9WYWx1ZURlcGVuZGVuY3kuaXRlbXMubGVuZ3RoKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZmllbGROYW1lIG9mIHRoaXMubm9WYWx1ZURlcGVuZGVuY3kuaXRlbXMpIHtcclxuXHRcdFx0XHR0aGlzLmJpbmREZXBlbmRlbmN5KGZpZWxkTmFtZSwgXCJub1wiKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmRlcGVuZGVuY2llcyAmJiB0aGlzLmRlcGVuZGVuY2llcy5sZW5ndGgpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpbmRleCBpbiB0aGlzLmRlcGVuZGVuY2llcykge1xyXG5cdFx0XHRcdGlmICh0aGlzLmRlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGRlcGVuZGVuY3kgPSB0aGlzLmRlcGVuZGVuY2llc1tpbmRleF07XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGZpZWxkTmFtZSBvZiBkZXBlbmRlbmN5Lml0ZW1zKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuYmluZERlcGVuZGVuY3koXHJcblx0XHRcdFx0XHRcdFx0ZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFwiY3VzdG9tXCIsXHJcblx0XHRcdFx0XHRcdFx0ZGVwZW5kZW5jeS52YWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRkZXBlbmRlbmN5LmNyaXRlcmlhLFxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBiaW5kRGVwZW5kZW5jeShlbGVtZW50TmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIHZhbHVlPzogc3RyaW5nLCBjcml0ZXJpYT86IHN0cmluZywpOiB2b2lkIHtcclxuXHRcdGxldCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW25hbWU9XCIke2VsZW1lbnROYW1lfVwiXWApIGFzIEN1c3RvbUlucHV0RWxlbWVudDtcclxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgQ3VzdG9tSW5wdXRFbGVtZW50KSB7XHJcblx0XHRcdGVsZW1lbnQuY29tcGFyZVZsYXVlcy5wdXNoKHZhbHVlKTtcclxuXHRcdFx0aWYgKHRoaXMuZGVwZW5kZW50T25MaXN0Lmhhc093blByb3BlcnR5KGVsZW1lbnQubmFtZSkpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0bGV0IGlzVmlzaWJsZUJ5RGVmYXVsdCA9IHR5cGUgPT09IFwibm9cIjtcclxuXHRcdFx0ZWxlbWVudC5SZWdpc3RlckRlcGVuZGVudE9uKHRoaXMubmFtZSwgaXNWaXNpYmxlQnlEZWZhdWx0KTtcclxuXHRcdFx0dGhpcy5vbkNoYW5nZS5vbihlID0+IHtcclxuXHRcdFx0XHRsZXQgSXNDb25kaXRpb25NYXRjaGVkID0gZmFsc2U7XHJcblx0XHRcdFx0aWYgKHR5cGUgPT09IFwiaGFzXCIpIHtcclxuXHRcdFx0XHRcdElzQ29uZGl0aW9uTWF0Y2hlZCA9ICEhZS52YWx1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHR5cGUgPT09IFwibm9cIikge1xyXG5cdFx0XHRcdFx0SXNDb25kaXRpb25NYXRjaGVkID0gIWUudmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh0eXBlID09PSBcImN1c3RvbVwiKSB7XHJcblx0XHRcdFx0XHRpZiAoY3JpdGVyaWEgPT09IFwiRXhhY3RcIikge1xyXG5cdFx0XHRcdFx0XHRJc0NvbmRpdGlvbk1hdGNoZWQgPSBlbGVtZW50LmlzVmFsdWVDb25kaXRpb25NYXRjaGVkKGUudmFsdWUpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChjcml0ZXJpYSA9PT0gXCJMZXNzVGhhblwiKSB7XHJcblx0XHRcdFx0XHRcdElzQ29uZGl0aW9uTWF0Y2hlZCA9IGUudmFsdWUgPCB2YWx1ZTtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoY3JpdGVyaWEgPT09IFwiTW9yZVRoYW5cIikge1xyXG5cdFx0XHRcdFx0XHRJc0NvbmRpdGlvbk1hdGNoZWQgPSBlLnZhbHVlID4gdmFsdWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsZW1lbnQuRGVwZW5kZW50T25TdGF0ZUNoYW5nZWQodGhpcy5uYW1lLCBJc0NvbmRpdGlvbk1hdGNoZWQpO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0dGhpcy5vblZpc2liaWxpdHlDaGFuZ2VkLm9uKGUgPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLnZpc2liaWxpdHlTdGF0ZSkge1xyXG5cdFx0XHRcdFx0dGhpcy5vbkNoYW5nZS5lbWl0KFxyXG5cdFx0XHRcdFx0XHRuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCBcImNoYW5nZVwiKSxcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGVsZW1lbnQuRGVwZW5kZW50T25TdGF0ZUNoYW5nZWQodGhpcy5uYW1lLCBmYWxzZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2V0VmlzaWJpbGl0eSgpIHtcclxuXHRcdGlmICh0aGlzLmFsbERlcGVuZGVuY2llc011c3RCZU1ldCkge1xyXG5cdFx0XHR0aGlzLnZpc2liaWxpdHlTdGF0ZSA9IE9iamVjdC52YWx1ZXModGhpcy5kZXBlbmRlbnRPbkxpc3QpLmV2ZXJ5KHN0YXRlID0+IHN0YXRlKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMudmlzaWJpbGl0eVN0YXRlID0gT2JqZWN0LnZhbHVlcyh0aGlzLmRlcGVuZGVudE9uTGlzdCkuc29tZShzdGF0ZSA9PiBzdGF0ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMudmlzaWJpbGl0eVN0YXRlKSB7XHJcblx0XHRcdHRoaXMuc2hvdygpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5oaWRlKCk7XHJcblx0XHR9XHJcblx0XHR0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZWQuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCBcIlZpc2liaWxpdHlDaGFuZ2VkXCIpKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaGlkZSgpIHtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKFwiaGlkZGVuXCIsIFwiXCIpO1xyXG5cdFx0aWYgKHRoaXMuY2xvc2VzdCgnLmN1c3RvbS12YWxpZGF0aW9uLXRhcmdldCcpKSB7XHJcblx0XHRcdHRoaXMuY2xvc2VzdCgnLmN1c3RvbS12YWxpZGF0aW9uLXRhcmdldCcpLnNldEF0dHJpYnV0ZShcImhpZGRlblwiLCBcIlwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2hvdygpIHtcclxuXHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiaGlkZGVuXCIpO1xyXG5cdFx0aWYgKHRoaXMuY2xvc2VzdCgnLmN1c3RvbS12YWxpZGF0aW9uLXRhcmdldCcpKSB7XHJcblx0XHRcdHRoaXMuY2xvc2VzdCgnLmN1c3RvbS12YWxpZGF0aW9uLXRhcmdldCcpLnJlbW92ZUF0dHJpYnV0ZShcImhpZGRlblwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByb3RlY3RlZCBnZXRDaGlsZElucHV0KHNlbGVjdG9yOiBzdHJpbmcpOiBIVE1MSW5wdXRFbGVtZW50IHtcclxuXHRcdGxldCBlbGVtZW50OiBhbnkgPSB0aGlzO1xyXG5cdFx0aWYgKHRoaXMuc2hhZG93Um9vdCkge1xyXG5cdFx0XHRlbGVtZW50ID0gdGhpcy5zaGFkb3dSb290O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgYXMgSFRNTElucHV0RWxlbWVudDtcclxuXHR9XHJcblxyXG5cdHByb3RlY3RlZCBnZXRDaGlsZElucHV0cyhzZWxlY3Rvcjogc3RyaW5nKTogSFRNTElucHV0RWxlbWVudFtdIHtcclxuXHRcdGxldCBlbGVtZW50OiBhbnkgPSB0aGlzO1xyXG5cdFx0aWYgKHRoaXMuc2hhZG93Um9vdCkge1xyXG5cdFx0XHRlbGVtZW50ID0gdGhpcy5zaGFkb3dSb290O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIEFycmF5VXRpbC5Gcm9tTm9kZUxpc3QoXHJcblx0XHRcdGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvciksXHJcblx0XHQpIGFzIEhUTUxJbnB1dEVsZW1lbnRbXTtcclxuXHR9XHJcblxyXG5cdHByb3RlY3RlZCBnZXRDaGlsZEVsZW1lbnQoc2VsZWN0b3I6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcclxuXHRcdGxldCBlbGVtZW50OiBhbnkgPSB0aGlzO1xyXG5cdFx0aWYgKHRoaXMuc2hhZG93Um9vdCkge1xyXG5cdFx0XHRlbGVtZW50ID0gdGhpcy5zaGFkb3dSb290O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgYXMgSFRNTEVsZW1lbnQ7XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgZ2V0Q2hpbGRFbGVtZW50cyhzZWxlY3Rvcjogc3RyaW5nKTogSFRNTEVsZW1lbnRbXSB7XHJcblx0XHRsZXQgZWxlbWVudDogYW55ID0gdGhpcztcclxuXHRcdGlmICh0aGlzLnNoYWRvd1Jvb3QpIHtcclxuXHRcdFx0ZWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdDtcclxuXHRcdH1cclxuXHRcdHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpIGFzIEhUTUxFbGVtZW50W107XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgUmVnaXN0ZXJEZXBlbmRlbnRPbihuYW1lOiBzdHJpbmcsIGluaXRpYWxWYWx1ZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcblx0XHR0aGlzLmRlcGVuZGVudE9uTGlzdFtuYW1lXSA9IGluaXRpYWxWYWx1ZTtcclxuXHRcdHRoaXMuc2V0VmlzaWJpbGl0eSgpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIERlcGVuZGVudE9uU3RhdGVDaGFuZ2VkKG5hbWU6IHN0cmluZywgc3RhdGU6IGJvb2xlYW4pIHtcclxuXHRcdGlmICh0aGlzLmRlcGVuZGVudE9uTGlzdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG5cdFx0XHR0aGlzLmRlcGVuZGVudE9uTGlzdFtuYW1lXSA9IHN0YXRlO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZXRWaXNpYmlsaXR5KCk7XHJcblx0fVxyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGFic3RyYWN0IGNsYXNzIEJhc2VEaWN0aW9uYXJ5IHtcclxuXHRhYnN0cmFjdCBkaWN0aW9uYXJ5OiBhbnk7XHJcblxyXG5cdGdldChrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcblx0XHRjb25zdCBrZXlQYXJ0cyA9IGtleS5zcGxpdCgnLicpO1xyXG5cdFx0dmFyIHJlc3VsdDogc3RyaW5nIHwgYW55ID0gdGhpcy5kaWN0aW9uYXJ5O1xyXG5cdFx0a2V5UGFydHMuZm9yRWFjaChrZXlQYXJ0ID0+IHtcclxuXHRcdFx0cmVzdWx0ID0gcmVzdWx0W2tleVBhcnRdO1xyXG5cdFx0XHRpZiAoIXJlc3VsdCkge1xyXG5cdFx0XHRcdHJlc3VsdCA9IGtleTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn0iLCJpbXBvcnQgQmFzZURpY3Rpb25hcnkgZnJvbSBcIi4vQmFzZS9CYXNlRGljdGlvbmFyeVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGFuaXNoRGljdGlvbmFyeSBleHRlbmRzIEJhc2VEaWN0aW9uYXJ5IHtcclxuXHJcblx0ZGljdGlvbmFyeTogYW55ID0ge1xyXG5cdFx0QWRkcmVzc0VsZW1lbnQ6IHtcclxuXHRcdFx0QWRkcmVzczogXCJhZHJlc3NlXCIsXHJcblx0XHRcdENpdHk6IFwiYnlcIixcclxuXHRcdFx0Q291bnRyeTogXCJsYW5kXCIsXHJcblx0XHRcdFppcDogXCJwb3N0bnVtbWVyXCJcclxuXHRcdH0sXHJcblx0XHRCYW5rRWxlbWVudDoge1xyXG5cdFx0XHRBY2NvdW50OiBcIktvbnRvbnVtbWVyXCIsXHJcblx0XHRcdFJlZ2lzdHJhdGlvbk51bWJlcjogXCJSZWdpc3RyZXJpbmdzbnVtbWVyXCJcclxuXHRcdH1cclxuXHR9O1xyXG5cclxufSIsImltcG9ydCBCYXNlRGljdGlvbmFyeSBmcm9tIFwiLi9CYXNlL0Jhc2VEaWN0aW9uYXJ5XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmdsaXNoRGljdGlvbmFyeSBleHRlbmRzIEJhc2VEaWN0aW9uYXJ5IHtcclxuXHJcblx0ZGljdGlvbmFyeTogYW55ID0ge1xyXG5cdFx0QWRkcmVzc0VsZW1lbnQ6IHtcclxuXHRcdFx0QWRkcmVzczogXCJhZGRyZXNzXCIsXHJcblx0XHRcdENpdHk6IFwiY2l0eVwiLFxyXG5cdFx0XHRDb3VudHJ5OiBcImNvdW50cnlcIixcclxuXHRcdFx0WmlwOiBcInppcFwiXHJcblx0XHR9LFxyXG5cdFx0QmFua0VsZW1lbnQ6IHtcclxuXHRcdFx0QWNjb3VudDogXCJCYW5rIEFjY291bnRcIixcclxuXHRcdFx0UmVnaXN0cmF0aW9uTnVtYmVyOiBcIkJhbmsgQWNjb3VudCBSZWdpc3RyYXRpb24gTnVtYmVyXCJcclxuXHRcdH1cclxuXHR9O1xyXG5cclxufVxyXG4iLCJpbXBvcnQgRGFuaXNoRGljdGlvbmFyeSBmcm9tIFwiLi9MYW5ndWFnZXMvRGFuaXNoRGljdGlvbmFyeVwiO1xyXG5pbXBvcnQgRW5nbGlzaERpY3Rpb25hcnkgZnJvbSBcIi4vTGFuZ3VhZ2VzL0VuZ2xpc2hEaWN0aW9uYXJ5XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUcmFuc2xhdG9yIHtcclxuXHRwcml2YXRlIHN0YXRpYyBsYW5nYXVnZXMgPSBbXHJcblx0XHQnZW4nLFxyXG5cdFx0J2RhJ1xyXG5cdF07XHJcblx0cHJpdmF0ZSBzdGF0aWMgZGFuaXNoRGljdGlvbmFyeSA9IG5ldyBEYW5pc2hEaWN0aW9uYXJ5KCk7XHJcblx0cHJpdmF0ZSBzdGF0aWMgZW5nbGlzaERpY3Rpb25hcnkgPSBuZXcgRW5nbGlzaERpY3Rpb25hcnkoKTtcclxuXHJcblx0c3RhdGljIFRyYW5zbGF0ZShrZXk6IHN0cmluZywgbGFuZ3VhZ2UgPSAnZGEnKTogc3RyaW5nIHtcclxuXHRcdGxhbmd1YWdlID0gbGFuZ3VhZ2UudG9Mb3dlckNhc2UoKTtcclxuXHRcdGNvbnN0IGlzU3VwcG9ydGVkTGFuZ3VhZ2UgPSBUcmFuc2xhdG9yLmxhbmdhdWdlcy5pbmRleE9mKGxhbmd1YWdlKSAhPSAtMTtcclxuXHRcdGlmICghaXNTdXBwb3J0ZWRMYW5ndWFnZSkge1xyXG5cdFx0XHRsYW5ndWFnZSA9ICdkYSdcclxuXHRcdH1cclxuXHRcdHN3aXRjaCAobGFuZ3VhZ2UpIHtcclxuXHRcdFx0Y2FzZSAnZGEnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmRhbmlzaERpY3Rpb25hcnkuZ2V0KGtleSk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJ2VuJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lbmdsaXNoRGljdGlvbmFyeS5nZXQoa2V5KTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHR9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVOYW1lc1BvbHlmaWxsKCkge1xyXG5cdGlmIChFbGVtZW50LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVOYW1lcyA9PSB1bmRlZmluZWQpIHtcclxuXHRcdEVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5hbWVzID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHR2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuXHRcdFx0dmFyIGxlbmd0aCA9IGF0dHJpYnV0ZXMubGVuZ3RoO1xyXG5cdFx0XHR2YXIgcmVzdWx0ID0gbmV3IEFycmF5KGxlbmd0aCk7XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRyZXN1bHRbaV0gPSBhdHRyaWJ1dGVzW2ldLm5hbWU7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH07XHJcblx0fVxyXG59O1xyXG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBEb21VdGlsaXR5IHtcclxuXHJcblx0Ly8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTIzMDQ0NS9qYXZhc2NyaXB0LXJlZ2V4LWhvdy10by1ib2xkLXNwZWNpZmljLXdvcmRzLXdpdGgtcmVnZXhcclxuXHRzdGF0aWMgYm9sZGVuVGV4dChpbnB1dFRleHQ6IHN0cmluZywgbWF0Y2hpbmRUZXh0VG9Cb2xkZW46IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIGlucHV0VGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoJyhefCkoJyArIG1hdGNoaW5kVGV4dFRvQm9sZGVuICsgJykofCQpJywgJ2lnJyksICckMTxiPiQyPC9iPiQzJyk7XHJcblx0fVxyXG59IiwidHlwZSBQcm9jZWR1cmUgPSAoLi4uYXJnczogYW55W10pID0+IGFueTtcclxuXHJcbmludGVyZmFjZSBEZWJvdW5jZSB7XHJcblx0KC4uLmFyZ3M6IGFueVtdKTogYW55O1xyXG5cdGNsZWFyOiAoKSA9PiB2b2lkO1xyXG5cdGZsdXNoOiAoKSA9PiB2b2lkO1xyXG59XHJcblxyXG5jb25zdCBkZWJvdW5jZXIgPSAoZnVuYzogUHJvY2VkdXJlLCB3YWl0OiBudW1iZXIsIGltbWVkaWF0ZTogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XHJcblx0bGV0IHRpbWVvdXQ6IG51bWJlciB8IG51bGw7XHJcblx0bGV0IGFyZ3M6IGFueTtcclxuXHRsZXQgY29udGV4dDogYW55O1xyXG5cdGxldCByZXN1bHQ6IGFueTtcclxuXHJcblx0Y29uc3QgbGF0ZXIgPSAoKSA9PiB7XHJcblx0XHR0aW1lb3V0ID0gbnVsbDtcclxuXHRcdGlmICghaW1tZWRpYXRlKSB7XHJcblx0XHRcdHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XHJcblx0XHRcdGNvbnRleHQgPSBhcmdzID0gbnVsbDtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRjb25zdCBkZWJvdW5jZWRGdW5jOiBQcm9jZWR1cmUgPSBmdW5jdGlvbiAodGhpczogYW55KSB7XHJcblx0XHRjb250ZXh0ID0gdGhpcztcclxuXHRcdGFyZ3MgPSBhcmd1bWVudHM7XHJcblx0XHRjb25zdCBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xyXG5cclxuXHRcdGlmICghdGltZW91dCkge1xyXG5cdFx0XHR0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChjYWxsTm93KSB7XHJcblx0XHRcdHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XHJcblx0XHRcdGNvbnRleHQgPSBhcmdzID0gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH07XHJcblxyXG5cdGNvbnN0IGNsZWFyID0gKCkgPT4ge1xyXG5cdFx0aWYgKHRpbWVvdXQpIHtcclxuXHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG5cdFx0XHR0aW1lb3V0ID0gbnVsbDtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRjb25zdCBmbHVzaCA9ICgpID0+IHtcclxuXHRcdGlmICh0aW1lb3V0KSB7XHJcblx0XHRcdHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XHJcblx0XHRcdGNvbnRleHQgPSBhcmdzID0gbnVsbDtcclxuXHJcblx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcclxuXHRcdFx0dGltZW91dCA9IG51bGw7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0Y29uc3QgZGVib3VuY2VkOiBEZWJvdW5jZSA9ICgoKSA9PiB7XHJcblx0XHRjb25zdCBmOiBhbnkgPSBkZWJvdW5jZWRGdW5jO1xyXG5cdFx0Zi5jbGVhciA9IGNsZWFyO1xyXG5cdFx0Zi5mbHVzaCA9IGZsdXNoO1xyXG5cdFx0cmV0dXJuIGY7XHJcblx0fSkoKTtcclxuXHJcblx0cmV0dXJuIGRlYm91bmNlZDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGRlYm91bmNlcjsiLCJpbXBvcnQgSVZhbGlkYXRpb24gZnJvbSAnLi4vSVZhbGlkYXRvci5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFua0FjY291bnRWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdGlvbiB7XHJcbiAgICBpc1NhdGlzZmllZEJ5KGlucHV0OiBzdHJpbmcsIGFsbG93RW1wdHk6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IElWYWxpZGF0aW9uIGZyb20gJy4uL0lWYWxpZGF0b3IuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhbmtBY2NvdW50UmVnaXN0cmF0aW9uTnVtYmVyVmFsaWRhdG9yXHJcbiAgICBpbXBsZW1lbnRzIElWYWxpZGF0aW9uIHtcclxuICAgIGlzU2F0aXNmaWVkQnkoaW5wdXQ6IHN0cmluZywgYWxsb3dFbXB0eTogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgSVZhbGlkYXRpb24gZnJvbSAnLi4vSVZhbGlkYXRvci5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFua0lkTm9yd2F5VmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRpb24ge1xyXG4gICAgaXNTYXRpc2ZpZWRCeShpbnB1dDogc3RyaW5nLCBhbGxvd0VtcHR5OiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrTm9QZXJzb25udW1tZXIoaW5wdXQsIGFsbG93RW1wdHkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tOb1BlcnNvbm51bW1lcihcclxuICAgICAgICBpbnB1dDogc3RyaW5nLFxyXG4gICAgICAgIGFsbG93RW1wdHk6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFpbnB1dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYWxsb3dFbXB0eTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcGVyc29ubnVtbWVyOiBzdHJpbmcgPSBpbnB1dC5yZXBsYWNlKCcgJywgJycpLnJlcGxhY2UoJy0nLCAnJyk7XHJcbiAgICAgICAgY29uc3QgcmVnZXg6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoXHJcbiAgICAgICAgICAgIC9eKDBbMS05XXwxWzAtOV18MlswLTldfDNbMC0xXSkoMFsxLTldfDFbMC0yXSkoXFxkezJ9KShcXGR7NX0pJC8sXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gcmVnZXgudGVzdChwZXJzb25udW1tZXIpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCBJVmFsaWRhdGlvbiBmcm9tICcuLi9JVmFsaWRhdG9yLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYW5rSWRTd2VkZW5WYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdGlvbiB7XHJcbiAgICBpc1NhdGlzZmllZEJ5KGlucHV0OiBzdHJpbmcsIGFsbG93RW1wdHk6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tTZVBlcnNvbm51bW1lcihpbnB1dCwgYWxsb3dFbXB0eSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja1NlUGVyc29ubnVtbWVyKFxyXG4gICAgICAgIGlucHV0OiBzdHJpbmcsXHJcbiAgICAgICAgYWxsb3dFbXB0eTogYm9vbGVhbiA9IHRydWUsXHJcbiAgICApOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWlucHV0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhbGxvd0VtcHR5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwZXJzb25udW1tZXI6IHN0cmluZyA9IGlucHV0LnJlcGxhY2UoJyAnLCAnJykucmVwbGFjZSgnLScsICcnKTtcclxuICAgICAgICBjb25zdCByZWdleDogUmVnRXhwID0gbmV3IFJlZ0V4cChcclxuICAgICAgICAgICAgL14oMTlcXGR7Mn18MjBcXGR7Mn0pKDBbMS05XXwxWzAtMl0pKDBbMS05XXwxWzAtOV18MlswLTldfDNbMC0xXSkoXFxkezR9KSQvLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QocGVyc29ubnVtbWVyKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgSVZhbGlkYXRpb24gZnJvbSAnLi4vSVZhbGlkYXRvci5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3ByVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRpb24ge1xyXG4gICAgaXNTYXRpc2ZpZWRCeShpbnB1dDogc3RyaW5nLCBhbGxvd0VtcHR5OiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ3ByKGlucHV0LCBhbGxvd0VtcHR5KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgbW9kdWx1czExTXVsdGlwbHkodmFsdWU6IG51bWJlciwgaW5kZXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbDogbnVtYmVyW10gPSBbNCwgMywgMiwgNywgNiwgNSwgNCwgMywgMiwgMV07XHJcbiAgICAgICAgcmV0dXJuIGNvbnRyb2xbaW5kZXhdICogdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtb2R1bHVzMTFFeGNlcHRpb25zKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBleGNlcHRpb25EYXRlczogRGF0ZVtdID0gW1xyXG4gICAgICAgICAgICAxOTYwLFxyXG4gICAgICAgICAgICAxOTY0LFxyXG4gICAgICAgICAgICAxOTY1LFxyXG4gICAgICAgICAgICAxOTY2LFxyXG4gICAgICAgICAgICAxOTY5LFxyXG4gICAgICAgICAgICAxOTcwLFxyXG4gICAgICAgICAgICAxOTgwLFxyXG4gICAgICAgICAgICAxOTgyLFxyXG4gICAgICAgICAgICAxOTg0LFxyXG4gICAgICAgICAgICAxOTg1LFxyXG4gICAgICAgICAgICAxOTg2LFxyXG4gICAgICAgICAgICAxOTg3LFxyXG4gICAgICAgICAgICAxOTg4LFxyXG4gICAgICAgICAgICAxOTg5LFxyXG4gICAgICAgICAgICAxOTkwLFxyXG4gICAgICAgIF0ubWFwKHggPT4gbmV3IERhdGUoeCwgMCwgMSkpOyAvLyBtb250aHMgYXJlIDAtaW5kZXhlZFxyXG5cclxuICAgICAgICBjb25zdCBjcHJEYXRlOiBEYXRlID0gdGhpcy5nZXRDcHJEYXRlKGlucHV0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkRhdGVzLnNvbWUoeCA9PiB4LmdldERhdGUoKSA9PT0gY3ByRGF0ZS5nZXREYXRlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tDcHJEYXRlKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgeWVhcjogbnVtYmVyID0gK2lucHV0LnN1YnN0cig0LCAyKSArIDIwMDA7XHJcbiAgICAgICAgeWVhciAtPSB5ZWFyID4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpID8gMTAwIDogMDsgLy8gaXMgMjB4eCBvciAxOXh4XHJcbiAgICAgICAgY29uc3QgbW9udGg6IG51bWJlciA9ICtpbnB1dC5zdWJzdHIoMiwgMikgLSAxO1xyXG4gICAgICAgIGNvbnN0IGRheTogbnVtYmVyID0gK2lucHV0LnN1YnN0cigwLCAyKTtcclxuICAgICAgICBjb25zdCBkYXRlOiBEYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSk7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXHJcbiAgICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGggJiZcclxuICAgICAgICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IGRheVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDcHJEYXRlKGlucHV0OiBzdHJpbmcpOiBEYXRlIHtcclxuICAgICAgICBsZXQgeWVhcjogbnVtYmVyID0gK2lucHV0LnN1YnN0cig0LCAyKSArIDIwMDA7XHJcbiAgICAgICAgeWVhciAtPSB5ZWFyID4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpID8gMTAwIDogMDsgLy8gaXMgMjB4eCBvciAxOXh4XHJcbiAgICAgICAgY29uc3QgbW9udGg6IG51bWJlciA9ICtpbnB1dC5zdWJzdHIoMiwgMikgLSAxO1xyXG4gICAgICAgIGNvbnN0IGRheTogbnVtYmVyID0gK2lucHV0LnN1YnN0cigwLCAyKTtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0NwcihpbnB1dDogc3RyaW5nLCBhbGxvd0VtcHR5OiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghaW5wdXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbG93RW1wdHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNwcm5yOiBzdHJpbmcgPSBpbnB1dC5yZXBsYWNlKCcgJywgJycpLnJlcGxhY2UoJy0nLCAnJyk7XHJcbiAgICAgICAgaWYgKCFjcHJuci5tYXRjaCgvXlxcZHsxMH0kLykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tDcHJEYXRlKGNwcm5yKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1vZHVsdXMxMUV4Y2VwdGlvbnMoY3BybnIpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG91dHB1dDogbnVtYmVyID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgMTA7IGkrKykge1xyXG4gICAgICAgICAgICBvdXRwdXQgKz0gdGhpcy5tb2R1bHVzMTFNdWx0aXBseShcclxuICAgICAgICAgICAgICAgIHBhcnNlSW50KGNwcm5yLnN1YnN0cihpLCAxKSwgMTApLFxyXG4gICAgICAgICAgICAgICAgaSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQgJSAxMSA9PT0gMDsgLy8gaHZpcyBvdXRwdXQgZ8OlciBvcCBpIDExLCBlciBkZXQgZXQgZ3lsZGlndCBjcHIuXHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IElWYWxpZGF0aW9uIGZyb20gJy4uL0lWYWxpZGF0b3IuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN2clZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0aW9uIHtcclxuICAgIGlzU2F0aXNmaWVkQnkoaW5wdXQ6IHN0cmluZywgYWxsb3dFbXB0eTogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0N2cihpbnB1dCwgYWxsb3dFbXB0eSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0N2cihpbnB1dDogc3RyaW5nLCBhbGxvd0VtcHR5OiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghYWxsb3dFbXB0eSAmJiAhaW5wdXQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBjb25zdCBjdnJucjogc3RyaW5nID0gaW5wdXQucmVwbGFjZSgnICcsICcnKS5yZXBsYWNlKCctJywgJycpO1xyXG4gICAgICAgIGlmICghY3ZybnIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbG93RW1wdHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghL15cXGR7OH0kLy50ZXN0KGN2cm5yKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjdnIgbnVtcmUga2FuIMOlYmVuYmFydCBvZ3PDpSBtb2R1bHVzMTEgdGVzdGVzLlxyXG4gICAgICAgIGxldCB0b3RhbDogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgWzIsIDcsIDYsIDUsIDQsIDMsIDIsIDFdLmZvckVhY2goKGVsbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgdG90YWwgKz0gcGFyc2VJbnQoY3ZybnJbaW5kZXhdLCAxMCkgKiBlbG07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0b3RhbCAlIDExID09PSAwO1xyXG4gICAgfVxyXG59XHJcbiIsImNsYXNzIGVsZW1lbnRDb25maWcge1xyXG5cdHNlbGVjdG9yOiBzdHJpbmc7XHJcblx0dGVtcGxhdGU6IHN0cmluZztcclxuXHRzdHlsZTogc3RyaW5nO1xyXG5cdHVzZVNoYWRvdzogYm9vbGVhbjtcclxuXHR0ZW1wbGF0ZVBhdGg/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmNvbnN0IHZhbGlkYXRlU2VsZWN0b3IgPSAoc2VsZWN0b3I6IHN0cmluZykgPT4ge1xyXG5cdGlmIChzZWxlY3Rvci5pbmRleE9mKCctJykgPD0gMCkge1xyXG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgbmVlZCBhdCBsZWFzdCAxIGRhc2ggaW4gdGhlIGN1c3RvbSBlbGVtZW50IG5hbWUhJyk7XHJcblx0fVxyXG59O1xyXG5cclxuY29uc3QgQ3VzdG9tRWxlbWVudCA9IChjb25maWc6IGVsZW1lbnRDb25maWcpID0+IHtcclxuXHRyZXR1cm4gKGNsczogYW55KSA9PiB7XHJcblx0XHR2YWxpZGF0ZVNlbGVjdG9yKGNvbmZpZy5zZWxlY3Rvcik7XHJcblx0XHRsZXQgdGVtcGxhdGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcclxuXHRcdGlmICghY29uZmlnLnRlbXBsYXRlKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignWW91IG5lZWQgdG8gcGFzcyBhIHRlbXBsYXRlIGZvciB0aGUgZWxlbWVudCcpO1xyXG5cdFx0fVxyXG5cdFx0dGVtcGxhdGVFbGVtZW50LmlubmVySFRNTCA9IGA8c3R5bGU+JHtjb25maWcuc3R5bGV9PC9zdHlsZT4gJHtcclxuXHRcdFx0Y29uZmlnLnRlbXBsYXRlXHJcblx0XHRcdH1gO1xyXG5cdFx0bGV0IGNvbm5lY3RlZENhbGxiYWNrID0gY2xzLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7IH07XHJcblx0XHRjb25zdCBkaXNjb25uZWN0ZWRDYWxsYmFjayA9IGNscy5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkgeyB9O1xyXG5cclxuXHRcdGNscy5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdGxldCBjbG9uZSA9IGRvY3VtZW50LmltcG9ydE5vZGUodGVtcGxhdGVFbGVtZW50LmNvbnRlbnQsIHRydWUpO1xyXG5cdFx0XHRpZiAoY29uZmlnLnVzZVNoYWRvdyAmJiAhdGhpcy5zaGFkb3dSb290KSB7XHJcblx0XHRcdFx0dGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSkuYXBwZW5kQ2hpbGQoY2xvbmUpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuYXBwZW5kQ2hpbGQoY2xvbmUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLmNvbXBvbmVudFdpbGxNb3VudCkge1xyXG5cdFx0XHRcdHRoaXMuY29tcG9uZW50V2lsbE1vdW50KCk7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29ubmVjdGVkQ2FsbGJhY2suY2FsbCh0aGlzKTtcclxuXHRcdFx0aWYgKHRoaXMuY29tcG9uZW50RGlkTW91bnQpIHtcclxuXHRcdFx0XHR0aGlzLmNvbXBvbmVudERpZE1vdW50KCk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0Y2xzLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0aWYgKHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQpIHtcclxuXHRcdFx0XHR0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh0aGlzKTtcclxuXHRcdFx0aWYgKHRoaXMuY29tcG9uZW50RGlkVW5tb3VudCkge1xyXG5cdFx0XHRcdHRoaXMuY29tcG9uZW50RGlkVW5tb3VudCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdFx0d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShjb25maWcuc2VsZWN0b3IsIGNscyk7XHJcblx0fTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEN1c3RvbUVsZW1lbnQ7XHJcbiIsImltcG9ydCAnQHdlYmNvbXBvbmVudHMvd2ViY29tcG9uZW50c2pzL3dlYmNvbXBvbmVudHMtYnVuZGxlJztcclxuaW1wb3J0ICdAd2ViY29tcG9uZW50cy93ZWJjb21wb25lbnRzanMvY3VzdG9tLWVsZW1lbnRzLWVzNS1hZGFwdGVyLmpzJztcclxuaW1wb3J0ICdAd2ViY29tcG9uZW50cy93ZWJjb21wb25lbnRzanMvd2ViY29tcG9uZW50cy1sb2FkZXIuanMnO1xyXG5cclxuLy8gZm9ybVxyXG5pbXBvcnQgeyBDdXN0b21Gb3JtIH0gZnJvbSAnLi9jdXN0b20tZm9ybSc7XHJcbmltcG9ydCB7IEN1c3RvbUlucHV0RWxlbWVudCB9IGZyb20gJy4vZnJhbWV3b3JrL0N1c3RvbUlucHV0RWxlbWVudCc7XHJcblxyXG4vLyBlbGVtZW50c1xyXG5pbXBvcnQgKiBhcyBlbGVtZW50cyBmcm9tICcuL2VsZW1lbnRzL0VsZW1lbnRzJztcclxuXHJcbmV4cG9ydCB7IEN1c3RvbUZvcm0sIGVsZW1lbnRzLCBDdXN0b21JbnB1dEVsZW1lbnQgfTtcclxuIl19
6427
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJkZW1vL2luZGV4LnRzIiwibm9kZV9tb2R1bGVzL0BsdWZ0Ym9ybi91dGlsaXRpZXMvZGlzdC9VdGlsaXRpZXMvQW5hbHl0aWNzQ2xpY2tFdmVudHMuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9BcnJheVV0aWwuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9CYWNrZ3JvdW5kTGF6eUxvYWRlci5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL0Jyb3dzZXJUeXBlLmpzIiwibm9kZV9tb2R1bGVzL0BsdWZ0Ym9ybi91dGlsaXRpZXMvZGlzdC9VdGlsaXRpZXMvQ2hhbmdlTGFuZ3VhZ2UuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9Db3B5IFV0aWxpdHkuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9DdXN0b21JbnB1dHMuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9DdXN0b21WYWxpZGF0aW9uVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL0RlYm91bmNlci5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL0RvbVV0aWwuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9FbGVtZW50U2NhbGUuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9Gb3JtVXRpbHMuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9HbG9iYWxEb21VdGlsLmpzIiwibm9kZV9tb2R1bGVzL0BsdWZ0Ym9ybi91dGlsaXRpZXMvZGlzdC9VdGlsaXRpZXMvSFRNTEltcG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL0hlYWRlckFuaW1hdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL0h0bWxMb2FkZXIuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9JbWFnZUxhenlMb2FkZXIuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9NYWtlUmVxdWVzdC5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL01vZGFsVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL05hdkJhclNjcm9sbGVkLmpzIiwibm9kZV9tb2R1bGVzL0BsdWZ0Ym9ybi91dGlsaXRpZXMvZGlzdC9VdGlsaXRpZXMvTmF2YmFyLmpzIiwibm9kZV9tb2R1bGVzL0BsdWZ0Ym9ybi91dGlsaXRpZXMvZGlzdC9VdGlsaXRpZXMvT3ZlcmxheXMuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9SZXBsYWNlT25DbGljay5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL1NjcmlwdExvYWRlci5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL1Njcm9sbFBvc2l0aW9uLmpzIiwibm9kZV9tb2R1bGVzL0BsdWZ0Ym9ybi91dGlsaXRpZXMvZGlzdC9VdGlsaXRpZXMvU3RyaW5nVXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL1VSTEhlbHBlci5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvVXRpbGl0aWVzL1VybFV0aWwuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy9WaWV3cG9ydFV0aWwuanMiLCJub2RlX21vZHVsZXMvQGx1ZnRib3JuL3V0aWxpdGllcy9kaXN0L1V0aWxpdGllcy90aHJvdHRsZS5qcyIsIm5vZGVfbW9kdWxlcy9AbHVmdGJvcm4vdXRpbGl0aWVzL2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvQHdlYmNvbXBvbmVudHMvd2ViY29tcG9uZW50c2pzL2N1c3RvbS1lbGVtZW50cy1lczUtYWRhcHRlci5qcyIsIm5vZGVfbW9kdWxlcy9Ad2ViY29tcG9uZW50cy93ZWJjb21wb25lbnRzanMvd2ViY29tcG9uZW50cy1idW5kbGUuanMiLCJub2RlX21vZHVsZXMvQHdlYmNvbXBvbmVudHMvd2ViY29tcG9uZW50c2pzL3dlYmNvbXBvbmVudHMtbG9hZGVyLmpzIiwibm9kZV9tb2R1bGVzL2ludGwtdGVsLWlucHV0L2J1aWxkL2pzL2ludGxUZWxJbnB1dC5qcyIsIm5vZGVfbW9kdWxlcy9pbnRsLXRlbC1pbnB1dC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsInNyYy9jdXN0b20tZm9ybS50cyIsInNyYy9lbGVtZW50cy9BZGRyZXNzL0FkZHJlc3NFbGVtZW50LnRzIiwic3JjL2VsZW1lbnRzL0JhbmtGaWVsZC9CYW5rRmllbGRFbGVtZW50LnRzIiwic3JjL2VsZW1lbnRzL0NQUkVsZW1lbnQvQ1BSRWxlbWVudC50cyIsInNyYy9lbGVtZW50cy9DVlJFbGVtZW50L0NWUkVsZW1lbnQudHMiLCJzcmMvZWxlbWVudHMvQ2hlY2tCb3hFbGVtZW50L0NoZWNrQm94RWxlbWVudC50cyIsInNyYy9lbGVtZW50cy9DdXN0b21SZWd1bGFyRXhwcmVzc2lvbi9DdXN0b21SZWd1bGFyRXhwcmVzc2lvbkVsZW1lbnQudHMiLCJzcmMvZWxlbWVudHMvRGF0ZUZpZWxkL0RhdGVGaWVsZEVsZW1lbnQudHMiLCJzcmMvZWxlbWVudHMvRHJvcERvd25MaXN0L0Ryb3BEb3duTGlzdEVsZW1lbnQudHMiLCJzcmMvZWxlbWVudHMvRWxlbWVudHMudHMiLCJzcmMvZWxlbWVudHMvRW1haWxGaWVsZC9FbWFpbEZpZWxkRWxlbWVudC50cyIsInNyYy9lbGVtZW50cy9GaWxlRmllbGQvRmlsZUZpZWxkRWxlbWVudC50cyIsInNyYy9lbGVtZW50cy9JZGVudGlmaWNhdGlvbkVsZW1lbnQvSWRlbnRpZmljYXRpb25FbGVtZW50LnRzIiwic3JjL2VsZW1lbnRzL0ludGVybmF0aW9uYVBob25lTnVtYmVyL0ludGVybmF0aW9uYVBob25lTnVtYmVyRWxlbWVudC50cyIsInNyYy9lbGVtZW50cy9OdW1lcmljRmllbGQvTnVtZXJpY0ZpZWxkRWxlbWVudC50cyIsInNyYy9lbGVtZW50cy9SYWRpb0J1dHRvbkdyb3VwL1JhZGlvQnV0dG9uR3JvdXBFbGVtZW50LnRzIiwic3JjL2VsZW1lbnRzL1RleHRBcmVhRWxlbWVudC9UZXh0QXJlYUVsZW1lbnQudHMiLCJzcmMvZWxlbWVudHMvVGV4dEZpZWxkL1RleHRGaWVsZEVsZW1lbnQudHMiLCJzcmMvZWxlbWVudHMvVHlwZUFoZWFkL1R5cGVBaGVhZEVsZW1lbnQudHMiLCJzcmMvZnJhbWV3b3JrL0N1c3RvbUV2ZW50cy50cyIsInNyYy9mcmFtZXdvcmsvQ3VzdG9tSW5wdXRFbGVtZW50LnRzIiwic3JjL2ZyYW1ld29yay9MYW5ndWFnZS9MYW5ndWFnZXMvQmFzZS9CYXNlRGljdGlvbmFyeS50cyIsInNyYy9mcmFtZXdvcmsvTGFuZ3VhZ2UvTGFuZ3VhZ2VzL0RhbmlzaERpY3Rpb25hcnkudHMiLCJzcmMvZnJhbWV3b3JrL0xhbmd1YWdlL0xhbmd1YWdlcy9FbmdsaXNoRGljdGlvbmFyeS50cyIsInNyYy9mcmFtZXdvcmsvTGFuZ3VhZ2UvVHJhbnNsYXRvci50cyIsInNyYy9mcmFtZXdvcmsvUG9seWZpbGxzL2dldEF0dHJpYnV0ZU5hbWVzUG9seWZpbGwudHMiLCJzcmMvZnJhbWV3b3JrL1V0aWxpdGllcy9Eb21VdGlsaXR5LnRzIiwic3JjL2ZyYW1ld29yay9VdGlsaXRpZXMvZGVib3VuY2VyLnRzIiwic3JjL2ZyYW1ld29yay9WYWxpZGF0aW9uL1ZhbGlkYXRvcnMvQmFua0FjY291bnQudHMiLCJzcmMvZnJhbWV3b3JrL1ZhbGlkYXRpb24vVmFsaWRhdG9ycy9CYW5rQWNjb3VudFJlZ2lzdHJhdGlvbk51bWJlci50cyIsInNyYy9mcmFtZXdvcmsvVmFsaWRhdGlvbi9WYWxpZGF0b3JzL0JhbmtJZE5vcndheS50cyIsInNyYy9mcmFtZXdvcmsvVmFsaWRhdGlvbi9WYWxpZGF0b3JzL0JhbmtJZFN3ZWRlbi50cyIsInNyYy9mcmFtZXdvcmsvVmFsaWRhdGlvbi9WYWxpZGF0b3JzL0NQUi50cyIsInNyYy9mcmFtZXdvcmsvVmFsaWRhdGlvbi9WYWxpZGF0b3JzL0NWUi50cyIsInNyYy9mcmFtZXdvcmsvY3VzdG9tLWVsZW1lbnQuZGVjb3JhdG9yLnRzIiwic3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7QUNBQSx3Q0FBc0Q7QUFHdEQsUUFBUSxDQUFDLGtCQUFrQixHQUFHO0lBQzFCLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDcEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxrQkFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQUEsT0FBTztZQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQUEsUUFBUSxJQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQztLQUNMO0FBQ0wsQ0FBQyxDQUFDOztBQ1ZGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2xYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbHpDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Q0FBQyxLQUFLLENBQUMsQ0FBQzthQUN2RDtpQkFBTTtnQkFDTixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3hCO1lBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzFCO1lBQ0QsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUMzQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUN6QjtRQUNGLENBQUMsQ0FBQztRQUVGLEdBQUcsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEdBQUc7WUFDcEMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQzVCO1lBQ0Qsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUM3QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQzthQUMzQjtRQUNGLENBQUMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDcEQsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsa0JBQWUsYUFBYSxDQUFDOzs7OztBQ3hEN0IsK0RBQTZEO0FBQzdELHlFQUF1RTtBQUN2RSxrRUFBZ0U7QUFFaEUsT0FBTztBQUNQLDZDQUEyQztBQU1sQywyRkFOQSx3QkFBVSxPQU1BO0FBTG5CLHFFQUFvRTtBQUtyQyxtR0FMdEIsdUNBQWtCLE9BS3NCO0FBSGpELFdBQVc7QUFDWCw4Q0FBZ0Q7QUFFM0IsNEJBQVEiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJpbXBvcnQgeyBDdXN0b21Gb3JtLCBlbGVtZW50cyB9IGZyb20gJy4vLi4vc3JjL2luZGV4JztcclxuXHJcblxyXG5kb2N1bWVudC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xyXG4gICAgICAgIGxldCBmb3JtID0gbmV3IEN1c3RvbUZvcm0oZG9jdW1lbnQuZm9ybXNbMF0pO1xyXG4gICAgICAgIGZvcm0ub25zdWJtaXQgPSBwcm9taXNlID0+IHtcclxuICAgICAgICAgICAgcHJvbWlzZS50aGVuKHJlc3BvbnNlID0+IHsgfSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIEFycmF5VXRpbF8xID0gcmVxdWlyZShcIi4vQXJyYXlVdGlsXCIpO1xyXG52YXIgVXJsVXRpbF8xID0gcmVxdWlyZShcIi4vVXJsVXRpbFwiKTtcclxudmFyIEFuYWx5dGljc0NsaWNrRXZlbnRzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQW5hbHl0aWNzQ2xpY2tFdmVudHMoKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RvciA9IFwiW2dhLXRyYWNrXVwiO1xyXG4gICAgICAgIHRoaXMucGFnZVVybCA9IG5ldyBVcmxVdGlsXzEuZGVmYXVsdCgpLnBhdGhBcnJheSgpLmpvaW4oXCItXCIpO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSBBcnJheVV0aWxfMS5kZWZhdWx0LkZyb21Ob2RlTGlzdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuc2VsZWN0b3IpKTtcclxuICAgICAgICBpZiAoIXRoaXMucGFnZVVybCkge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2VVcmwgPSBcIkZyb250UGFnZVwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEFuYWx5dGljc0NsaWNrRXZlbnRzLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGdhKFwic2VuZFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRBY3Rpb246IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZ2EtYWN0aW9uXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Q2F0ZWdvcnk6IF90aGlzLnBhZ2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRMYWJlbDogZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJnYS1sYWJlbFwiKSxcclxuICAgICAgICAgICAgICAgICAgICBoaXRUeXBlOiBcImV2ZW50XCIsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEFuYWx5dGljc0NsaWNrRXZlbnRzO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBBbmFseXRpY3NDbGlja0V2ZW50cztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QW5hbHl0aWNzQ2xpY2tFdmVudHMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIEFycmF5VXRpbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEFycmF5VXRpbCgpIHtcclxuICAgIH1cclxuICAgIEFycmF5VXRpbC5Gcm9tTm9kZUxpc3QgPSBmdW5jdGlvbiAobGlzdCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBsaXN0KTtcclxuICAgIH07XHJcbiAgICBBcnJheVV0aWwuYWRkVG9DdXJyZW50ID0gZnVuY3Rpb24gKGNodW5rcywgaXRlbSkge1xyXG4gICAgICAgIGlmICghY2h1bmtzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjaHVua3NbMF0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2h1bmtzW2NodW5rcy5sZW5ndGggLSAxXS5wdXNoKGl0ZW0pO1xyXG4gICAgfTtcclxuICAgIEFycmF5VXRpbC5hZGRUb05ldyA9IGZ1bmN0aW9uIChjaHVua3MsIGl0ZW0pIHtcclxuICAgICAgICBjaHVua3NbY2h1bmtzLmxlbmd0aF0gPSBbXTtcclxuICAgICAgICBjaHVua3NbY2h1bmtzLmxlbmd0aCAtIDFdLnB1c2goaXRlbSk7XHJcbiAgICB9O1xyXG4gICAgQXJyYXlVdGlsLmRpdmlkZUFjY29yZGluZ1Byb3BlcnR5ID0gZnVuY3Rpb24gKGFycmF5LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGNodW5rcyA9IFtdO1xyXG4gICAgICAgIGNodW5rc1swXSA9IFthcnJheVswXV07XHJcbiAgICAgICAgYXJyYXkucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RvcihhKSA9PT0gc2VsZWN0b3IoYikpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFkZFRvQ3VycmVudChjaHVua3MsIGIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuYWRkVG9OZXcoY2h1bmtzLCBiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY2h1bmtzO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBBcnJheVV0aWw7XHJcbn0oKSk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IEFycmF5VXRpbDtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXJyYXlVdGlsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBCcm93c2VyVHlwZV8xID0gcmVxdWlyZShcIi4vQnJvd3NlclR5cGVcIik7XHJcbnZhciBEb21VdGlsXzEgPSByZXF1aXJlKFwiLi9Eb21VdGlsXCIpO1xyXG52YXIgVmlld3BvcnRVdGlsXzEgPSByZXF1aXJlKFwiLi9WaWV3cG9ydFV0aWxcIik7XHJcbnZhciBCYWNrZ3JvdW5kTGF6eUxvYWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEJhY2tncm91bmRMYXp5TG9hZGVyKCkge1xyXG4gICAgICAgIHRoaXMuYnJvd3NlclR5cGUgPSBuZXcgQnJvd3NlclR5cGVfMS5kZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB2YXIgbGF6eUJhY2tncm91bmRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5sYXp5LWJhY2tncm91bmRcIik7XHJcbiAgICAgICAgaWYgKCFsYXp5QmFja2dyb3VuZHMpIHtcclxuICAgICAgICAgICAgdGhpcy5sYXp5QmFja2dyb3VuZHMgPSBbXTtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhcIm5vIGxhenlsb2FkIGltYWdlcy4uLiBjb250aW51ZWluZ1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxhenlCYWNrZ3JvdW5kcyA9IFtdLnNsaWNlLmNhbGwobGF6eUJhY2tncm91bmRzKTtcclxuICAgIH1cclxuICAgIEJhY2tncm91bmRMYXp5TG9hZGVyLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMubGF6eWxvYWRCYWNrZ3JvdW5kcygpO1xyXG4gICAgICAgIGlmIChcIkludGVyc2VjdGlvbk9ic2VydmVyXCIgaW4gd2luZG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxMYXp5TG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBCYWNrZ3JvdW5kTGF6eUxvYWRlci5wcm90b3R5cGUuc2Nyb2xsTGF6eUxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLyppZiAoXCJJbnRlcnNlY3Rpb25PYnNlcnZlclwiIGluIHdpbmRvdykge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbE9ic2VydmFibGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLmxhenlsb2FkQmFja2dyb3VuZHMuYmluZCh0aGlzKSwgdHJ1ZSlcclxuICAgICAgICB9Ki9cclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLmxhenlsb2FkQmFja2dyb3VuZHMuYmluZCh0aGlzKSwgdHJ1ZSk7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy5sYXp5bG9hZEJhY2tncm91bmRzLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib3JpZW50YXRpb25jaGFuZ2VcIiwgdGhpcy5sYXp5bG9hZEJhY2tncm91bmRzLmJpbmQodGhpcykpO1xyXG4gICAgfTtcclxuICAgIEJhY2tncm91bmRMYXp5TG9hZGVyLnByb3RvdHlwZS5zY3JvbGxPYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmIChcIkludGVyc2VjdGlvbk9ic2VydmVyXCIgaW4gd2luZG93KSB7XHJcbiAgICAgICAgICAgIHZhciBsYXp5T2JzZXJ2ZXJfMSA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbiAoZW50cmllcywgb2JzZXJ2ZXIpIHtcclxuICAgICAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaChmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkudGFyZ2V0LmNsYXNzTGlzdC5hZGQoXCJ2aXNpYmxlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXp5T2JzZXJ2ZXJfMS51bm9ic2VydmUoZW50cnkudGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMubGF6eUJhY2tncm91bmRzLmZvckVhY2goZnVuY3Rpb24gKGxhenlJbWFnZSkgeyByZXR1cm4gbGF6eU9ic2VydmVyXzEub2JzZXJ2ZShsYXp5SW1hZ2UpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQmFja2dyb3VuZExhenlMb2FkZXIucHJvdG90eXBlLmxhenlsb2FkQmFja2dyb3VuZHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLmxhenlCYWNrZ3JvdW5kcy5mb3JFYWNoKGZ1bmN0aW9uIChsYXp5SW1hZ2UpIHtcclxuICAgICAgICAgICAgX3RoaXMuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdmFyIGltYWdlVmlld1BvcnQgPSBuZXcgVmlld3BvcnRVdGlsXzEuVmlld3BvcnRVdGlsKGxhenlJbWFnZSk7XHJcbiAgICAgICAgICAgIHZhciBpbWFnZURvbVV0aWwgPSBuZXcgRG9tVXRpbF8xLmRlZmF1bHQobGF6eUltYWdlKTtcclxuICAgICAgICAgICAgaWYgKGltYWdlVmlld1BvcnQuSXNPZmZzZXRWaXNpYmxlKDMwMCkpIHtcclxuICAgICAgICAgICAgICAgIGltYWdlRG9tVXRpbC5hcHBlbmRDbGFzcyhcInZpc2libGVcIik7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5sYXp5QmFja2dyb3VuZHMgPSBfdGhpcy5sYXp5QmFja2dyb3VuZHMuZmlsdGVyKGZ1bmN0aW9uIChpbWFnZSkgeyByZXR1cm4gaW1hZ2UgIT09IGxhenlJbWFnZTsgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMubGF6eUJhY2tncm91bmRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgX3RoaXMubGF6eWxvYWRCYWNrZ3JvdW5kcy5iaW5kKF90aGlzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgX3RoaXMubGF6eWxvYWRCYWNrZ3JvdW5kcy5iaW5kKF90aGlzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCBfdGhpcy5sYXp5bG9hZEJhY2tncm91bmRzLmJpbmQoX3RoaXMpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEJhY2tncm91bmRMYXp5TG9hZGVyO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBCYWNrZ3JvdW5kTGF6eUxvYWRlcjtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QmFja2dyb3VuZExhenlMb2FkZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIEJyb3dzZXJUeXBlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQnJvd3NlclR5cGUoKSB7XHJcbiAgICAgICAgdGhpcy5uVmVyID0gbmF2aWdhdG9yLmFwcFZlcnNpb247XHJcbiAgICAgICAgdGhpcy5uQWd0ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgICAgICB0aGlzLmJyb3dzZXJOYW1lID0gbmF2aWdhdG9yLmFwcE5hbWU7XHJcbiAgICAgICAgdGhpcy5mdWxsVmVyc2lvbiA9IHBhcnNlRmxvYXQobmF2aWdhdG9yLmFwcFZlcnNpb24pO1xyXG4gICAgICAgIHRoaXMubWFqb3JWZXJzaW9uID0gcGFyc2VJbnQobmF2aWdhdG9yLmFwcFZlcnNpb24sIDEwKTtcclxuICAgICAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IFwiVW5rbm93biBPU1wiO1xyXG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJXaW5cIikgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxhdGZvcm1OYW1lID0gXCJXaW5kb3dzXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJNYWNcIikgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxhdGZvcm1OYW1lID0gXCJNYWNpbnRvc2hcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIkxpbnV4XCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IFwiTGludXhcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIkFuZHJvaWRcIikgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxhdGZvcm1OYW1lID0gXCJBbmRyb2lkXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJsaWtlIE1hY1wiKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5wbGF0Zm9ybU5hbWUgPSBcImlPU1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVzZXJBZ2VudFN0cmluZyA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XHJcbiAgICAgICAgLy8gSW4gT3BlcmEsIHRoZSB0cnVlIHZlcnNpb24gaXMgYWZ0ZXIgXCJPcGVyYVwiIG9yIGFmdGVyIFwiVmVyc2lvblwiXHJcbiAgICAgICAgaWYgKCh0aGlzLnZlck9mZnNldCA9IHRoaXMubkFndC5pbmRleE9mKFwiT3BlcmFcIikpICE9IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJvd3Nlck5hbWUgPSBcIk9wZXJhXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZnVsbFZlcnNpb24gPSBwYXJzZUZsb2F0KHRoaXMubkFndC5zdWJzdHJpbmcodGhpcy52ZXJPZmZzZXQgKyA2KSk7XHJcbiAgICAgICAgICAgIGlmICgodGhpcy52ZXJPZmZzZXQgPSB0aGlzLm5BZ3QuaW5kZXhPZihcIlZlcnNpb25cIikpICE9IC0xKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mdWxsVmVyc2lvbiA9IHBhcnNlRmxvYXQodGhpcy5uQWd0LnN1YnN0cmluZyh0aGlzLnZlck9mZnNldCArIDgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSW4gTVNJRSwgdGhlIHRydWUgdmVyc2lvbiBpcyBhZnRlciBcIk1TSUVcIiBpbiB1c2VyQWdlbnRcclxuICAgICAgICBlbHNlIGlmICgodGhpcy52ZXJPZmZzZXQgPSB0aGlzLm5BZ3QuaW5kZXhPZihcIk1TSUVcIikpICE9IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJvd3Nlck5hbWUgPSBcIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlclwiO1xyXG4gICAgICAgICAgICB0aGlzLmZ1bGxWZXJzaW9uID0gcGFyc2VGbG9hdCh0aGlzLm5BZ3Quc3Vic3RyaW5nKHRoaXMudmVyT2Zmc2V0ICsgNSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgodGhpcy52ZXJPZmZzZXQgPSB0aGlzLm5BZ3QuaW5kZXhPZihcIkVkZ2VcIikpICE9IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJvd3Nlck5hbWUgPSBcIkVkZ2VcIjtcclxuICAgICAgICAgICAgdGhpcy5mdWxsVmVyc2lvbiA9IHBhcnNlRmxvYXQodGhpcy5uQWd0LnN1YnN0cmluZyh0aGlzLnZlck9mZnNldCArIDUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSW4gQ2hyb21lLCB0aGUgdHJ1ZSB2ZXJzaW9uIGlzIGFmdGVyIFwiQ2hyb21lXCJcclxuICAgICAgICBlbHNlIGlmICgodGhpcy52ZXJPZmZzZXQgPSB0aGlzLm5BZ3QuaW5kZXhPZihcIkNocm9tZVwiKSkgIT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5icm93c2VyTmFtZSA9IFwiQ2hyb21lXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZnVsbFZlcnNpb24gPSBwYXJzZUZsb2F0KHRoaXMubkFndC5zdWJzdHJpbmcodGhpcy52ZXJPZmZzZXQgKyA3KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIFNhZmFyaSwgdGhlIHRydWUgdmVyc2lvbiBpcyBhZnRlciBcIlNhZmFyaVwiIG9yIGFmdGVyIFwiVmVyc2lvblwiXHJcbiAgICAgICAgZWxzZSBpZiAoKHRoaXMudmVyT2Zmc2V0ID0gdGhpcy5uQWd0LmluZGV4T2YoXCJTYWZhcmlcIikpICE9IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJvd3Nlck5hbWUgPSBcIlNhZmFyaVwiO1xyXG4gICAgICAgICAgICB0aGlzLmZ1bGxWZXJzaW9uID0gcGFyc2VGbG9hdCh0aGlzLm5BZ3Quc3Vic3RyaW5nKHRoaXMudmVyT2Zmc2V0ICsgNykpO1xyXG4gICAgICAgICAgICBpZiAoKHRoaXMudmVyT2Zmc2V0ID0gdGhpcy5uQWd0LmluZGV4T2YoXCJWZXJzaW9uXCIpKSAhPSAtMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZnVsbFZlcnNpb24gPSBwYXJzZUZsb2F0KHRoaXMubkFndC5zdWJzdHJpbmcodGhpcy52ZXJPZmZzZXQgKyA4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIEZpcmVmb3gsIHRoZSB0cnVlIHZlcnNpb24gaXMgYWZ0ZXIgXCJGaXJlZm94XCJcclxuICAgICAgICBlbHNlIGlmICgodGhpcy52ZXJPZmZzZXQgPSB0aGlzLm5BZ3QuaW5kZXhPZihcIkZpcmVmb3hcIikpICE9IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJvd3Nlck5hbWUgPSBcIkZpcmVmb3hcIjtcclxuICAgICAgICAgICAgdGhpcy5mdWxsVmVyc2lvbiA9IHBhcnNlRmxvYXQodGhpcy5uQWd0LnN1YnN0cmluZyh0aGlzLnZlck9mZnNldCArIDgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSW4gbW9zdCBvdGhlciBicm93c2VycywgXCJuYW1lL3ZlcnNpb25cIiBpcyBhdCB0aGUgZW5kIG9mIHVzZXJBZ2VudFxyXG4gICAgICAgIGVsc2UgaWYgKCh0aGlzLm5hbWVPZmZzZXQgPSB0aGlzLm5BZ3QubGFzdEluZGV4T2YoXCIgXCIpICsgMSkgPFxyXG4gICAgICAgICAgICAodGhpcy52ZXJPZmZzZXQgPSB0aGlzLm5BZ3QubGFzdEluZGV4T2YoXCIvXCIpKSkge1xyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJOYW1lID0gdGhpcy5uQWd0LnN1YnN0cmluZyh0aGlzLm5hbWVPZmZzZXQsIHRoaXMudmVyT2Zmc2V0KTtcclxuICAgICAgICAgICAgdGhpcy5mdWxsVmVyc2lvbiA9IHBhcnNlRmxvYXQodGhpcy5uQWd0LnN1YnN0cmluZyh0aGlzLnZlck9mZnNldCArIDEpKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYnJvd3Nlck5hbWUudG9Mb3dlckNhc2UoKSA9PSB0aGlzLmJyb3dzZXJOYW1lLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3Nlck5hbWUgPSBuYXZpZ2F0b3IuYXBwTmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0cmltIHRoZSBmdWxsVmVyc2lvbiBzdHJpbmcgYXQgc2VtaWNvbG9uL3NwYWNlIGlmIHByZXNlbnRcclxuICAgICAgICAvKlxyXG4gICAgICAgICAgICBpZiAoKHRoaXMuaXggPSB0aGlzLmZ1bGxWZXJzaW9uLmluZGV4T2YoXCI7XCIpKSAhPSAtMSlcclxuICAgICAgICAgICAgdGhpcy5mdWxsVmVyc2lvbiA9IHRoaXMuZnVsbFZlcnNpb24uc3Vic3RyaW5nKDAsIGl4KTtcclxuICAgICAgICAgICAgaWYgKCh0aGlzLml4ID0gdGhpcy5mdWxsVmVyc2lvbi5pbmRleE9mKFwiIFwiKSkgIT0gLTEpXHJcbiAgICAgICAgICAgIHRoaXMuZnVsbFZlcnNpb24gPSB0aGlzLmZ1bGxWZXJzaW9uLnN1YnN0cmluZygwLCBpeCk7XHJcbiAgICAgICAgKi9cclxuICAgICAgICB0aGlzLm1ham9yVmVyc2lvbiA9IHBhcnNlSW50KFwiXCIgKyB0aGlzLmZ1bGxWZXJzaW9uLCAxMCk7XHJcbiAgICAgICAgaWYgKGlzTmFOKHRoaXMubWFqb3JWZXJzaW9uKSkge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bGxWZXJzaW9uID0gcGFyc2VGbG9hdChuYXZpZ2F0b3IuYXBwVmVyc2lvbik7XHJcbiAgICAgICAgICAgIHRoaXMubWFqb3JWZXJzaW9uID0gcGFyc2VJbnQobmF2aWdhdG9yLmFwcFZlcnNpb24sIDEwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBCcm93c2VyVHlwZS5wcm90b3R5cGUuaXNDaHJvbWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJvd3Nlck5hbWUgPT09IFwiQ2hyb21lXCI7XHJcbiAgICB9O1xyXG4gICAgQnJvd3NlclR5cGUucHJvdG90eXBlLmlzRmlyZWZveCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5icm93c2VyTmFtZSA9PT0gXCJGaXJlZm94XCI7XHJcbiAgICB9O1xyXG4gICAgQnJvd3NlclR5cGUucHJvdG90eXBlLmlzRWRnZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5icm93c2VyTmFtZSA9PT0gXCJFZGdlXCI7XHJcbiAgICB9O1xyXG4gICAgQnJvd3NlclR5cGUucHJvdG90eXBlLmlzT3BlcmEgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJvd3Nlck5hbWUgPT09IFwiT3BlcmFcIjtcclxuICAgIH07XHJcbiAgICBCcm93c2VyVHlwZS5wcm90b3R5cGUuaXNJRSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5icm93c2VyTmFtZSA9PT0gXCJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXJcIiB8fCB0aGlzLmJyb3dzZXJOYW1lID09PSBcIk5ldHNjYXBlXCI7XHJcbiAgICB9O1xyXG4gICAgQnJvd3NlclR5cGUucHJvdG90eXBlLmlzU2FmYXJpID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJyb3dzZXJOYW1lID09PSBcIlNhZmFyaVwiO1xyXG4gICAgfTtcclxuICAgIEJyb3dzZXJUeXBlLnByb3RvdHlwZS5pUGhvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGlEZXZpY2VzID0gW1wiaVBob25lIFNpbXVsYXRvclwiLCBcImlQb2QgU2ltdWxhdG9yXCIsIFwiaVBob25lXCIsIFwiaVBvZFwiXTtcclxuICAgICAgICBpZiAobmF2aWdhdG9yLnBsYXRmb3JtKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChpRGV2aWNlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3IucGxhdGZvcm0gPT09IGlEZXZpY2VzLnBvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfTtcclxuICAgIEJyb3dzZXJUeXBlLnByb3RvdHlwZS5pc01vYmlsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gL01vYmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG4gICAgfTtcclxuICAgIEJyb3dzZXJUeXBlLnByb3RvdHlwZS5pT1N2ZXJzaW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc01vYmlsZSgpICYmICF0aGlzLmlQaG9uZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5tYWpvclZlcnNpb24gKyBcIlwiO1xyXG4gICAgfTtcclxuICAgIEJyb3dzZXJUeXBlLnByb3RvdHlwZS5oYXNQbHVnaW4gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgdmFyIHBsdWdpbnMgPSB3aW5kb3cubmF2aWdhdG9yLnBsdWdpbnM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChwbHVnaW5zW2ldW25hbWVdKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH07XHJcbiAgICBCcm93c2VyVHlwZS5wcm90b3R5cGUuaXNJZnJhbWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpLmNsYXNzTGlzdC5jb250YWlucyhcImlmcmFtZVwiKTtcclxuICAgIH07XHJcbiAgICBCcm93c2VyVHlwZS5wcm90b3R5cGUuaXNfdG91Y2hfZGV2aWNlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBwcmVmaXhlcyA9IFwiIC13ZWJraXQtIC1tb3otIC1vLSAtbXMtIFwiLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICB2YXIgbXEgPSBmdW5jdGlvbiAocXVlcnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKHF1ZXJ5KS5tYXRjaGVzO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKFwib250b3VjaHN0YXJ0XCIgaW4gd2luZG93KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcXVlcnkgPSBbXCIoXCIsIHByZWZpeGVzLmpvaW4oXCJ0b3VjaC1lbmFibGVkKSwoXCIpLCBcImhlYXJ0elwiLCBcIilcIl0uam9pbihcIlwiKTtcclxuICAgICAgICByZXR1cm4gbXEocXVlcnkpO1xyXG4gICAgfTtcclxuICAgIEJyb3dzZXJUeXBlLnByb3RvdHlwZS51c2VOYXRpdmVQZGZWaWV3ZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJZnJhbWUoKSB8fCB0aGlzLmlzTW9iaWxlKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5oYXNQbHVnaW4oXCJhcHBsaWNhdGlvbi9wZGZcIik7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEJyb3dzZXJUeXBlO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBCcm93c2VyVHlwZTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QnJvd3NlclR5cGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIEFycmF5VXRpbF8xID0gcmVxdWlyZShcIi4vQXJyYXlVdGlsXCIpO1xyXG52YXIgRG9tVXRpbF8xID0gcmVxdWlyZShcIi4vRG9tVXRpbFwiKTtcclxudmFyIENoYW5nZUxhbmd1YWdlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQ2hhbmdlTGFuZ3VhZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5sYW5ndWFnZUZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0TGFuZ3VhZ2UnKTtcclxuICAgICAgICB0aGlzLmxhbmd1YWdlcyA9IEFycmF5VXRpbF8xLmRlZmF1bHQuRnJvbU5vZGVMaXN0KHRoaXMubGFuZ3VhZ2VGb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJykpO1xyXG4gICAgfVxyXG4gICAgQ2hhbmdlTGFuZ3VhZ2UucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLmxhbmd1YWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChsYW5ndWFnZSkge1xyXG4gICAgICAgICAgICBpZiAobGFuZ3VhZ2UuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgbGFuZ3VhZ2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBfdGhpcy5zZXRMYW5ndWFnZS5iaW5kKF90aGlzKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgQ2hhbmdlTGFuZ3VhZ2UucHJvdG90eXBlLnNldExhbmd1YWdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIGxhbmd1YWdlVXRpbCA9IG5ldyBEb21VdGlsXzEuZGVmYXVsdChldmVudC5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICB2YXIgYWN0aW9uVXJsID0gdGhpcy5sYW5ndWFnZUZvcm0uYWN0aW9uO1xyXG4gICAgICAgIGlmIChhY3Rpb25VcmwuaW5kZXhPZignPycpIDwgMCkge1xyXG4gICAgICAgICAgICBhY3Rpb25VcmwgKz0gXCI/Y3VsdHVyZT1cIiArIGxhbmd1YWdlVXRpbC5nZXREYXRhQXR0cignbGFuZycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYWN0aW9uVXJsICs9IFwiJmN1bHR1cmU9XCIgKyBsYW5ndWFnZVV0aWwuZ2V0RGF0YUF0dHIoJ2xhbmcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sYW5ndWFnZUZvcm0uYWN0aW9uID0gYWN0aW9uVXJsO1xyXG4gICAgICAgIHRoaXMubGFuZ3VhZ2VGb3JtLnN1Ym1pdCgpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBDaGFuZ2VMYW5ndWFnZTtcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gQ2hhbmdlTGFuZ3VhZ2U7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNoYW5nZUxhbmd1YWdlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBDb3B5VXRpbGl0eSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIENvcHlVdGlsaXR5KCkge1xyXG4gICAgfVxyXG4gICAgQ29weVV0aWxpdHkuZGVlcENvcHkgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcclxuICAgICAgICAgICAgaWYgKGRlc3RpbmF0aW9uLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkZXN0aW5hdGlvbltrZXldIGluc3RhbmNlb2YgT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWVwQ29weShkZXN0aW5hdGlvbltrZXldLCBzb3VyY2Vba2V5XSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbltrZXldID0gc291cmNlW2tleV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbltrZXldID0gc291cmNlW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIENvcHlVdGlsaXR5O1xyXG59KCkpO1xyXG5leHBvcnRzLkNvcHlVdGlsaXR5ID0gQ29weVV0aWxpdHk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvcHkgVXRpbGl0eS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgQ3VzdG9tSW5wdXRzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQ3VzdG9tSW5wdXRzKCkge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tSW5wdXRzID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5jdXN0b20taW5wdXRcIikpO1xyXG4gICAgfVxyXG4gICAgQ3VzdG9tSW5wdXRzLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5jdXN0b21JbnB1dHMuZm9yRWFjaChmdW5jdGlvbiAoY3VzdG9tSW5wdXQpIHtcclxuICAgICAgICAgICAgY3VzdG9tSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLnJhZGlvQ2xpY2soY3VzdG9tSW5wdXQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBDdXN0b21JbnB1dHMucHJvdG90eXBlLnJhZGlvQ2xpY2sgPSBmdW5jdGlvbiAoY3VzdG9tSW5wdXQpIHtcclxuICAgICAgICB2YXIgcmFkaW9FbGVtZW50ID0gY3VzdG9tSW5wdXQucHJldmlvdXNFbGVtZW50U2libGluZztcclxuICAgICAgICByYWRpb0VsZW1lbnQuY2hlY2tlZCA9IHRydWU7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEN1c3RvbUlucHV0cztcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gQ3VzdG9tSW5wdXRzO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1DdXN0b21JbnB1dHMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIEN1c3RvbVZhbGlkYXRpb25VdGlsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQ3VzdG9tVmFsaWRhdGlvblV0aWwoKSB7XHJcbiAgICAgICAgdGhpcy5tYWlsUmVnZXggPSBuZXcgUmVnRXhwKC9eKFthLXpBLVowLTnDhsOYw4XDpsO4w6VfListXSkrXFxAKChbYS16QS1aMC05w4bDmMOFw6bDuMOlLV0pK1xcLikrKFthLXpBLVowLTnDhsOYw4XDpsO4w6VdezIsNH0pKyQvKTtcclxuICAgICAgICB0aGlzLnVybFJlZ2V4ID0gbmV3IFJlZ0V4cCgvWy1hLXpBLVowLTlAOiUuX1xcK34jPV17MSwyNTZ9XFwuW2EtekEtWjAtOSgpXXsxLDZ9XFxiKFstYS16QS1aMC05KClAOiVfXFwrLn4jPyYvLz1dKikvKTtcclxuICAgICAgICB0aGlzLmh0dHBVcmxSZWdleCA9IG5ldyBSZWdFeHAoL15odHRwcz86XFwvXFwvKHd3d1xcLik/Wy1hLXpBLVowLTlAOiUuX1xcK34jPV17MSwyNTZ9XFwuW2EtekEtWjAtOSgpXXsxLDZ9XFxiKFstYS16QS1aMC05KClAOiVfXFwrLn4jPyYvLz1dKikvKTtcclxuICAgIH1cclxuICAgIEN1c3RvbVZhbGlkYXRpb25VdGlsLnByb3RvdHlwZS52YWxpZGF0ZUVtYWlsID0gZnVuY3Rpb24gKG1haWwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYWlsUmVnZXgudGVzdChtYWlsKTtcclxuICAgIH07XHJcbiAgICBDdXN0b21WYWxpZGF0aW9uVXRpbC5wcm90b3R5cGUudmFsaWRhdGVVcmwgPSBmdW5jdGlvbiAodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXJsUmVnZXgudGVzdCh1cmwpO1xyXG4gICAgfTtcclxuICAgIEN1c3RvbVZhbGlkYXRpb25VdGlsLnByb3RvdHlwZS52YWxpZGF0ZUh0dHBVcmwgPSBmdW5jdGlvbiAodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFVybFJlZ2V4LnRlc3QodXJsKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gQ3VzdG9tVmFsaWRhdGlvblV0aWw7XHJcbn0oKSk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IEN1c3RvbVZhbGlkYXRpb25VdGlsO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1DdXN0b21WYWxpZGF0aW9uVXRpbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgZGVib3VuY2VyID0gZnVuY3Rpb24gKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xyXG4gICAgaWYgKGltbWVkaWF0ZSA9PT0gdm9pZCAwKSB7IGltbWVkaWF0ZSA9IGZhbHNlOyB9XHJcbiAgICB2YXIgdGltZW91dDtcclxuICAgIHZhciBhcmdzO1xyXG4gICAgdmFyIGNvbnRleHQ7XHJcbiAgICB2YXIgcmVzdWx0O1xyXG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRpbWVvdXQgPSBudWxsO1xyXG4gICAgICAgIGlmICghaW1tZWRpYXRlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XHJcbiAgICAgICAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdmFyIGRlYm91bmNlZEZ1bmMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29udGV4dCA9IHRoaXM7XHJcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcclxuICAgICAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcclxuICAgICAgICBpZiAoIXRpbWVvdXQpIHtcclxuICAgICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhbGxOb3cpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcclxuICAgICAgICAgICAgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuICAgIHZhciBjbGVhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XHJcbiAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcclxuICAgICAgICAgICAgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XHJcbiAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB2YXIgZGVib3VuY2VkID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZiA9IGRlYm91bmNlZEZ1bmM7XHJcbiAgICAgICAgZi5jbGVhciA9IGNsZWFyO1xyXG4gICAgICAgIGYuZmx1c2ggPSBmbHVzaDtcclxuICAgICAgICByZXR1cm4gZjtcclxuICAgIH0pKCk7XHJcbiAgICByZXR1cm4gZGVib3VuY2VkO1xyXG59O1xyXG5leHBvcnRzLmRlZmF1bHQgPSBkZWJvdW5jZXI7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURlYm91bmNlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgVmlld3BvcnRVdGlsXzEgPSByZXF1aXJlKFwiLi9WaWV3cG9ydFV0aWxcIik7XHJcbnZhciBEb21VdGlsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gRG9tVXRpbChlbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLnZpZXdQb3J0VXRpbCA9IG5ldyBWaWV3cG9ydFV0aWxfMS5WaWV3cG9ydFV0aWwodGhpcy5lbGVtZW50KTtcclxuICAgIH1cclxuICAgIERvbVV0aWwucHJvdG90eXBlLmdldERhdGFBdHRyID0gZnVuY3Rpb24gKGF0dHIsIGRlZmF1bHR2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1cIiArIGF0dHIpO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBkZWZhdWx0dmFsdWU7XHJcbiAgICB9O1xyXG4gICAgRG9tVXRpbC5wcm90b3R5cGUuc2V0RGF0YUF0dHIgPSBmdW5jdGlvbiAoYXR0ciwgdmFsdWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLVwiICsgYXR0ciwgdmFsdWUpO1xyXG4gICAgfTtcclxuICAgIERvbVV0aWwucHJvdG90eXBlLmdldEF0dHIgPSBmdW5jdGlvbiAoYXR0ciwgZGVmYXVsdHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cik7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGRlZmF1bHR2YWx1ZTtcclxuICAgIH07XHJcbiAgICBEb21VdGlsLnByb3RvdHlwZS5zZXRBdHRyID0gZnVuY3Rpb24gKGF0dHIsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0ciwgdmFsdWUpO1xyXG4gICAgfTtcclxuICAgIERvbVV0aWwucHJvdG90eXBlLnJlbW92ZUF0dHIgPSBmdW5jdGlvbiAoYXR0cikge1xyXG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xyXG4gICAgfTtcclxuICAgIERvbVV0aWwucHJvdG90eXBlLnJlbW92ZURhdGFBdHRyID0gZnVuY3Rpb24gKGF0dHIpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtXCIgKyBhdHRyKTtcclxuICAgIH07XHJcbiAgICBEb21VdGlsLnByb3RvdHlwZS5oYXNBdHRyID0gZnVuY3Rpb24gKGF0dHIpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXR0cik7XHJcbiAgICB9O1xyXG4gICAgRG9tVXRpbC5wcm90b3R5cGUuc2hha2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLmFwcGVuZENsYXNzKCdzaGFrZScpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBfdGhpcy5yZW1vdmVDbGFzcygnc2hha2UnKTtcclxuICAgICAgICAgICAgX3RoaXMuZWxlbWVudC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDYwMCk7XHJcbiAgICB9O1xyXG4gICAgRG9tVXRpbC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLmFwcGVuZENsYXNzKCdlcnJvcicpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBfdGhpcy5yZW1vdmVDbGFzcygnZXJyb3InKTtcclxuICAgICAgICAgICAgX3RoaXMuZWxlbWVudC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDUwMDApO1xyXG4gICAgfTtcclxuICAgIERvbVV0aWwucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52aWV3UG9ydFV0aWwuSXNWaXNpYmxlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIERvbVV0aWwucHJvdG90eXBlLnJlbW92ZUNsYXNzID0gZnVuY3Rpb24gKGNsYXNzbmFtZSkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzbmFtZSk7XHJcbiAgICB9O1xyXG4gICAgRG9tVXRpbC5wcm90b3R5cGUuYXBwZW5kQ2xhc3MgPSBmdW5jdGlvbiAoY2xhc3NuYW1lKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NuYW1lKTtcclxuICAgIH07XHJcbiAgICBEb21VdGlsLnByb3RvdHlwZS5kZWxldGVFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICB9O1xyXG4gICAgRG9tVXRpbC5wcm90b3R5cGUuc2V0Q2hpbGRFbGVtZW50QnlBdHRyTmFtZSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBmaXJzdExldHRlciA9IG5hbWUucmVwbGFjZSgvXlxcdy8sIGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRvVXBwZXJDYXNlKCk7IH0pO1xyXG4gICAgICAgIHZhciBTdWJFbGVtZW50ID0gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbbmFtZT1cXFwiXCIgKyBmaXJzdExldHRlciArIFwiXFxcIl1cIik7XHJcbiAgICAgICAgaWYgKFN1YkVsZW1lbnQpIHtcclxuICAgICAgICAgICAgU3ViRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBEb21VdGlsLnByb3RvdHlwZS5oYXNDbGFzcyA9IGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xyXG4gICAgfTtcclxuICAgIERvbVV0aWwucHJvdG90eXBlLmdldFN0eWxlID0gZnVuY3Rpb24gKHJ1bGVOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50KVtydWxlTmFtZV07XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIERvbVV0aWw7XHJcbn0oKSk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IERvbVV0aWw7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURvbVV0aWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIEFycmF5VXRpbF8xID0gcmVxdWlyZShcIi4vQXJyYXlVdGlsXCIpO1xyXG52YXIgRWxlbWVudFNjYWxlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gRWxlbWVudFNjYWxlKCkge1xyXG4gICAgfVxyXG4gICAgRWxlbWVudFNjYWxlLnByb3RvdHlwZS5FeGVjdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuc2NhbGVSaWdodEVsZW1lbnRzID0gQXJyYXlVdGlsXzEuZGVmYXVsdC5Gcm9tTm9kZUxpc3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltjbGFzcyo9J3NjYWxlLSddXCIpKTtcclxuICAgICAgICB0aGlzLkluaXQoKTtcclxuICAgICAgICB0aGlzLlNjYWxlUmlnaHQoKTtcclxuICAgIH07XHJcbiAgICBFbGVtZW50U2NhbGUucHJvdG90eXBlLkluaXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudFdkdGhPZmZzZXQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7XHJcbiAgICB9O1xyXG4gICAgRWxlbWVudFNjYWxlLnByb3RvdHlwZS5TY2FsZVJpZ2h0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5zY2FsZVJpZ2h0RWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICB2YXIgZWxlbWVudFJpZ2h0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDtcclxuICAgICAgICAgICAgdmFyIHNwYWNlVG9FZGdlID0gX3RoaXMuZG9jdW1lbnRXZHRoT2Zmc2V0IC0gZWxlbWVudFJpZ2h0O1xyXG4gICAgICAgICAgICB2YXIgcmF0aW8gPSAoc3BhY2VUb0VkZ2UgLyBlbGVtZW50Lm9mZnNldFdpZHRoKSArIDE7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gXCJzY2FsZVgoXCIgKyByYXRpbyArIFwiKVwiO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBFbGVtZW50U2NhbGU7XHJcbn0oKSk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IEVsZW1lbnRTY2FsZTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RWxlbWVudFNjYWxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBGb3JtVXRpbHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBGb3JtVXRpbHMoZWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICBGb3JtVXRpbHMucHJvdG90eXBlLmdldEZvcm1EYXRhT2plY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlcyA9IHt9O1xyXG4gICAgICAgIHZhciBpbnB1dHMgPSB0aGlzLmVsZW1lbnQuZWxlbWVudHM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlc1tpbnB1dHNbaV1bJ25hbWUnXV0gIT0gJycpXHJcbiAgICAgICAgICAgICAgICB2YWx1ZXNbaW5wdXRzW2ldWyduYW1lJ11dID0gaW5wdXRzW2ldWyd2YWx1ZSddO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWVzO1xyXG4gICAgfTtcclxuICAgIEZvcm1VdGlscy5wcm90b3R5cGUuZ2V0Rm9ybURhdGFTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlcyA9IFwiXCI7XHJcbiAgICAgICAgdmFyIGlucHV0cyA9IHRoaXMuZWxlbWVudC5lbGVtZW50cztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodmFsdWVzW2lucHV0c1tpXVsnbmFtZSddXSlcclxuICAgICAgICAgICAgICAgIHZhbHVlcyArPSBbaW5wdXRzW2ldWyduYW1lJ11dICsgXCI9XCIgKyBpbnB1dHNbaV1bJ3ZhbHVlJ10gKyBcIiZcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgIH07XHJcbiAgICBGb3JtVXRpbHMucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5yZXNldCgpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBGb3JtVXRpbHM7XHJcbn0oKSk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IEZvcm1VdGlscztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Rm9ybVV0aWxzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBHbG9iYWxEb21VdGlsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gR2xvYmFsRG9tVXRpbChlbGVtZW50cykge1xyXG4gICAgICAgIGlmIChlbGVtZW50cyA9PT0gdm9pZCAwKSB7IGVsZW1lbnRzID0gbnVsbDsgfVxyXG4gICAgICAgIGlmIChlbGVtZW50cylcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50cyA9IFtdLnNsaWNlLmNhbGwoZWxlbWVudHMpO1xyXG4gICAgfVxyXG4gICAgR2xvYmFsRG9tVXRpbC5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIChlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnJyk7IH0pO1xyXG4gICAgfTtcclxuICAgIEdsb2JhbERvbVV0aWwucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7IHJldHVybiAoZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnKTsgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEdsb2JhbERvbVV0aWw7XHJcbn0oKSk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IEdsb2JhbERvbVV0aWw7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUdsb2JhbERvbVV0aWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIEFycmF5VXRpbF8xID0gcmVxdWlyZShcIi4vQXJyYXlVdGlsXCIpO1xyXG52YXIgSFRNTEltcG9ydCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEhUTUxJbXBvcnQoKSB7XHJcbiAgICB9XHJcbiAgICBIVE1MSW1wb3J0LnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuaW5jbHVkZUhUTUwoKTtcclxuICAgIH07XHJcbiAgICBIVE1MSW1wb3J0LnByb3RvdHlwZS5pbmNsdWRlSFRNTCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciBlbGVtZW50cywgZWxlbWVudCwgZmlsZVBhdGgsIHhodHRwO1xyXG4gICAgICAgIGVsZW1lbnRzID0gQXJyYXlVdGlsXzEuZGVmYXVsdC5Gcm9tTm9kZUxpc3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltodG1sLWltcG9ydF1cIikpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xyXG4gICAgICAgICAgICAvKnNlYXJjaCBmb3IgZWxlbWVudHMgd2l0aCBhIGNlcnRhaW4gYXRycmlidXRlOiovXHJcbiAgICAgICAgICAgIGZpbGVQYXRoID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJodG1sLWltcG9ydFwiKTtcclxuICAgICAgICAgICAgaWYgKGZpbGVQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICB4aHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgICAgICAgICAgeGh0dHAub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHR0cC5yZWFkeVN0YXRlID09IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhodHRwLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYmVmb3JlYmVnaW5cIiwgeGh0dHAucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhodHRwLnN0YXR1cyA9PSA0MDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gXCJQYWdlIG5vdCBmb3VuZC5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcImh0bWwtaW1wb3J0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5pbmNsdWRlSFRNTCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB4aHR0cC5vcGVuKFwiR0VUXCIsIGZpbGVQYXRoLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHhodHRwLnNlbmQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gSFRNTEltcG9ydDtcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gSFRNTEltcG9ydDtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SFRNTEltcG9ydC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgQXJyYXlVdGlsXzEgPSByZXF1aXJlKFwiLi9BcnJheVV0aWxcIik7XHJcbnZhciBEb21VdGlsXzEgPSByZXF1aXJlKFwiLi9Eb21VdGlsXCIpO1xyXG52YXIgVmlld3BvcnRVdGlsXzEgPSByZXF1aXJlKFwiLi9WaWV3cG9ydFV0aWxcIik7XHJcbnZhciBIZWFkZXJBbmltYXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBIZWFkZXJBbmltYXRpb24oKSB7XHJcbiAgICAgICAgdGhpcy5taW5TY3JlZW5XaWR0aCA9IDc2ODtcclxuICAgICAgICB0aGlzLnNjcmVlbldpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVhZGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImhlYWRlclwiKTtcclxuICAgICAgICB0aGlzLmJyYW5kID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5uYXZiYXItYnJhbmRcIik7XHJcbiAgICAgICAgdGhpcy5kb21VdGlsID0gbmV3IERvbVV0aWxfMS5kZWZhdWx0KHRoaXMuaGVhZGVyKTtcclxuICAgICAgICB2YXIgYW5pbWF0aW9uQ29udGFpbmVycyA9IEFycmF5VXRpbF8xLmRlZmF1bHQuRnJvbU5vZGVMaXN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYW5pbWF0aW9uLWNvbnRhaW5lclwiKSk7XHJcbiAgICAgICAgdmFyIGRlbGF5ZWRFbGVtZW50cyA9IEFycmF5VXRpbF8xLmRlZmF1bHQuRnJvbU5vZGVMaXN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZGVsYXllZFwiKSk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxFdmVudCgpO1xyXG4gICAgICAgIC8vIGRpc3BsYXkgZWxlbWVudHMgYWZ0ZXIgcGFnZSBsb2FkIGFuZCBuZXcgcG9zaXRpb24gaXMgdGFrZW4uXHJcbiAgICAgICAgZGVsYXllZEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHsgZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gXCIxXCI7IH0pO1xyXG4gICAgICAgIC8vIGFkZCB0cmFuc2l0aW9uIGRlbGF5IGFmdGVyIGZpcnN0IHNjcm9sbCBFdmVudFxyXG4gICAgICAgIHRoaXMuc2V0QW5pbWF0aW9uRGVsYXkoYW5pbWF0aW9uQ29udGFpbmVycyk7XHJcbiAgICB9XHJcbiAgICBIZWFkZXJBbmltYXRpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFuaW1hdGlvbkV2ZW50ID0gdGhpcy5kb21VdGlsLmdldERhdGFBdHRyKFwiYW5pbWF0aW9uLWV2ZW50XCIpO1xyXG4gICAgICAgIGlmIChhbmltYXRpb25FdmVudCA9PT0gXCJsb2FkXCIpIHtcclxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHRoaXMubHlpbmdQb3NpdGlvbi5iaW5kKHRoaXMpLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYW5pbWF0aW9uRXZlbnQgPT09IFwic2Nyb2xsXCIgJiYgdGhpcy5zY3JlZW5XaWR0aCA+PSB0aGlzLm1pblNjcmVlbldpZHRoKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMuc2Nyb2xsRXZlbnQuYmluZCh0aGlzKSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFuaW1hdGlvbkV2ZW50ID09PSBcInNjcm9sbFwiICYmIHRoaXMuc2NyZWVuV2lkdGggPCB0aGlzLm1pblNjcmVlbldpZHRoKSB7XHJcbiAgICAgICAgICAgIHRoaXMubHlpbmdQb3NpdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBIZWFkZXJBbmltYXRpb24ucHJvdG90eXBlLmx5aW5nUG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyLmNsYXNzTGlzdC5hZGQoXCJhbmltYXRlZFwiKTtcclxuICAgICAgICAgICAgdGhpcy5icmFuZC5zdHlsZS5vcGFjaXR5ID0gXCIxXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEhlYWRlckFuaW1hdGlvbi5wcm90b3R5cGUuZGVmYXVsdFBvc2l0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhlYWRlciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRlci5jbGFzc0xpc3QucmVtb3ZlKFwiYW5pbWF0ZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuYnJhbmQuc3R5bGUub3BhY2l0eSA9IFwiMFwiO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBIZWFkZXJBbmltYXRpb24ucHJvdG90eXBlLnNjcm9sbEV2ZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmIChuZXcgVmlld3BvcnRVdGlsXzEuVmlld3BvcnRVdGlsKCkuV2luZG93VG9wKDQwKSkge1xyXG4gICAgICAgICAgICB0aGlzLmx5aW5nUG9zaXRpb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFBvc2l0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEhlYWRlckFuaW1hdGlvbi5wcm90b3R5cGUuc2V0QW5pbWF0aW9uRGVsYXkgPSBmdW5jdGlvbiAoYW5pbWF0aW9uQ29udGFpbmVycykge1xyXG4gICAgICAgIHZhciBhbmltYXRpb0RlbGF5ID0gdGhpcy5kb21VdGlsLmdldERhdGFBdHRyKFwiYW5pbWF0aW9uLWRlbGF5XCIpO1xyXG4gICAgICAgIHZhciBhZGR0cmFuc2l0aW9uZWRDbGFzcyA9IGZ1bmN0aW9uIChlbGVtZW50cykgeyByZXR1cm4gZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkgeyBlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJ0cmFuc2l0aW9uZWRcIik7IH0pOyB9O1xyXG4gICAgICAgIGlmIChhbmltYXRpb0RlbGF5ID09PSAwIHx8IGFuaW1hdGlvRGVsYXkgPT09IFwiMFwiKSB7XHJcbiAgICAgICAgICAgIGFkZHRyYW5zaXRpb25lZENsYXNzKGFuaW1hdGlvbkNvbnRhaW5lcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhZGR0cmFuc2l0aW9uZWRDbGFzcyhhbmltYXRpb25Db250YWluZXJzKTtcclxuICAgICAgICAgICAgfSwgYW5pbWF0aW9EZWxheSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBIZWFkZXJBbmltYXRpb247XHJcbn0oKSk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IEhlYWRlckFuaW1hdGlvbjtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SGVhZGVyQW5pbWF0aW9uLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBIdG1sTG9hZGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gSHRtbExvYWRlcihlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldEVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBIdG1sTG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKHVybCwgbWV0aG9kKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAobWV0aG9kID09PSB2b2lkIDApIHsgbWV0aG9kID0gXCJnZXRcIjsgfVxyXG4gICAgICAgIGlmICghdGhpcy50YXJnZXRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgdGFyZ2V0IGVsZW1lbnRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB4bWxIdHRwUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhtbEh0dHBSZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0LnJlYWR5U3RhdGUgPT0gNCAmJiB4bWxIdHRwUmVxdWVzdC5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy50YXJnZXRFbGVtZW50LmlubmVySFRNTCA9IHhtbEh0dHBSZXF1ZXN0LnJlc3BvbnNlVGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgeG1sSHR0cFJlcXVlc3Qub3BlbihtZXRob2QsIHVybCwgdHJ1ZSk7XHJcbiAgICAgICAgeG1sSHR0cFJlcXVlc3Quc2VuZCgpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBIdG1sTG9hZGVyO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBIdG1sTG9hZGVyO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1IdG1sTG9hZGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBBcnJheVV0aWxfMSA9IHJlcXVpcmUoXCIuL0FycmF5VXRpbFwiKTtcclxudmFyIEJyb3dzZXJUeXBlXzEgPSByZXF1aXJlKFwiLi9Ccm93c2VyVHlwZVwiKTtcclxudmFyIERvbVV0aWxfMSA9IHJlcXVpcmUoXCIuL0RvbVV0aWxcIik7XHJcbnZhciBWaWV3cG9ydFV0aWxfMSA9IHJlcXVpcmUoXCIuL1ZpZXdwb3J0VXRpbFwiKTtcclxudmFyIEltYWdlTGF6eUxvYWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEltYWdlTGF6eUxvYWRlcigpIHtcclxuICAgICAgICB0aGlzLmJyb3dzZXJUeXBlID0gbmV3IEJyb3dzZXJUeXBlXzEuZGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sYXp5SW1hZ2VzID0gQXJyYXlVdGlsXzEuZGVmYXVsdC5Gcm9tTm9kZUxpc3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcImltZy5sYXp5XCIpKTtcclxuICAgICAgICBpZiAoIUJvb2xlYW4odGhpcy5sYXp5SW1hZ2VzKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwibm8gbGF6eWxvYWQgaW1hZ2VzLi4uIGNvbnRpbnVlaW5nXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmxhenlJbWFnZXMgPSBbXTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEltYWdlTGF6eUxvYWRlci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmxhenlsb2FkKCk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxPYnNlcnZhYmxlKCk7XHJcbiAgICB9O1xyXG4gICAgSW1hZ2VMYXp5TG9hZGVyLnByb3RvdHlwZS5zY3JvbGxMYXp5TG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLmxhenlsb2FkLmJpbmQodGhpcyksIHRydWUpO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMubGF6eWxvYWQuYmluZCh0aGlzKSwgdHJ1ZSk7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCB0aGlzLmxhenlsb2FkLmJpbmQodGhpcyksIHRydWUpO1xyXG4gICAgfTtcclxuICAgIEltYWdlTGF6eUxvYWRlci5wcm90b3R5cGUuc2Nyb2xsT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGlmIChcIkludGVyc2VjdGlvbk9ic2VydmVyXCIgaW4gd2luZG93KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhenlPYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcywgb2JzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkSW1hZ2UoZW50cnkudGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXp5T2JzZXJ2ZXIudW5vYnNlcnZlKGVudHJ5LnRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmxhenlJbWFnZXMuZm9yRWFjaCgobGF6eUltYWdlKSA9PiB7IGxhenlPYnNlcnZlci5vYnNlcnZlKGxhenlJbWFnZSk7IH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGF6eUxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNjcm9sbExhenlMb2FkKCk7XHJcbiAgICB9O1xyXG4gICAgSW1hZ2VMYXp5TG9hZGVyLnByb3RvdHlwZS5sb2FkSW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2UpIHtcclxuICAgICAgICB2YXIgaW1hZ2VEb21VdGlsID0gbmV3IERvbVV0aWxfMS5kZWZhdWx0KGltYWdlKTtcclxuICAgICAgICB2YXIgdXJsID0gaW1hZ2VEb21VdGlsLmdldERhdGFBdHRyKFwic3JjXCIpO1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0RXh0ZW5zaW9uKHVybCkgIT09IFwic3ZnXCIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYnJvd3NlclR5cGUuaXNDaHJvbWUoKSB8fCB0aGlzLmJyb3dzZXJUeXBlLmlzT3BlcmEoKSkge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gdGhpcy5yZXBsYWNlRXh0ZW5zaW9uKHVybCwgXCJ3ZWJwXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuYnJvd3NlclR5cGUuaXNTYWZhcmkoKSkge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gdGhpcy5yZXBsYWNlRXh0ZW5zaW9uKHVybCwgXCJqcDJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5icm93c2VyVHlwZS5pc0VkZ2UoKSB8fCB0aGlzLmJyb3dzZXJUeXBlLmlzSUUoKSkge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gdGhpcy5yZXBsYWNlRXh0ZW5zaW9uKHVybCwgXCJqeHJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5icm93c2VyVHlwZS5pc0ZpcmVmb3goKSAmJiB0aGlzLmJyb3dzZXJUeXBlLm1ham9yVmVyc2lvbiA+PSA2NSkge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gdGhpcy5yZXBsYWNlRXh0ZW5zaW9uKHVybCwgXCJ3ZWJwXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGltYWdlRG9tVXRpbC5zZXRBdHRyKFwic3JjXCIsIHVybCk7XHJcbiAgICAgICAgaW1hZ2VEb21VdGlsLnJlbW92ZURhdGFBdHRyKFwic3JjXCIpO1xyXG4gICAgICAgIGlmIChpbWFnZURvbVV0aWwuaGFzQ2xhc3MoXCJsYXp5XCIpKSB7XHJcbiAgICAgICAgICAgIGltYWdlRG9tVXRpbC5yZW1vdmVDbGFzcyhcImxhenlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGltYWdlRG9tVXRpbC5hcHBlbmRDbGFzcyhcImltYWdlLS1sb2FkZWRcIik7XHJcbiAgICAgICAgdmFyIGltYWdlSW5kZXggPSB0aGlzLmxhenlJbWFnZXMuZmluZEluZGV4KGZ1bmN0aW9uIChpbWcpIHsgcmV0dXJuIGltZyA9PT0gaW1hZ2U7IH0pO1xyXG4gICAgICAgIHRoaXMubGF6eUltYWdlcy5zcGxpY2UoaW1hZ2VJbmRleCwgMSk7XHJcbiAgICB9O1xyXG4gICAgSW1hZ2VMYXp5TG9hZGVyLnByb3RvdHlwZS5sYXp5bG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubGF6eUltYWdlcylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmxhenlJbWFnZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgdmFyIGxhenlJbWFnZSA9IHRoaXMubGF6eUltYWdlc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB2YXIgaW1hZ2VWaWV3UG9ydCA9IG5ldyBWaWV3cG9ydFV0aWxfMS5WaWV3cG9ydFV0aWwobGF6eUltYWdlKTtcclxuICAgICAgICAgICAgaWYgKGltYWdlVmlld1BvcnQuSXNPZmZzZXRWaXNpYmxlKDMwMCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZEltYWdlKGxhenlJbWFnZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sYXp5SW1hZ2VzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMubGF6eWxvYWQuYmluZCh0aGlzKSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy5sYXp5bG9hZC5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIHRoaXMubGF6eWxvYWQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcclxuICAgIH07XHJcbiAgICBJbWFnZUxhenlMb2FkZXIucHJvdG90eXBlLmdldEV4dGVuc2lvbiA9IGZ1bmN0aW9uIChzcmMpIHtcclxuICAgICAgICByZXR1cm4gc3JjLnNwbGl0KFwiLlwiKS5wb3AoKTtcclxuICAgIH07XHJcbiAgICBJbWFnZUxhenlMb2FkZXIucHJvdG90eXBlLnJlcGxhY2VFeHRlbnNpb24gPSBmdW5jdGlvbiAoc3JjLCByZXBsYWNlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBzcmMuc3Vic3RyKDAsIHNyYy5sYXN0SW5kZXhPZihcIi5cIikpICsgXCIuXCIgKyByZXBsYWNlbWVudDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gSW1hZ2VMYXp5TG9hZGVyO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBJbWFnZUxhenlMb2FkZXI7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUltYWdlTGF6eUxvYWRlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgTWFrZVJlcXVlc3QgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBNYWtlUmVxdWVzdCh1cmwsIG1ldGhvZCwgaGVhZGVycykge1xyXG4gICAgICAgIGlmIChtZXRob2QgPT09IHZvaWQgMCkgeyBtZXRob2QgPSAnZ2V0JzsgfVxyXG4gICAgICAgIGlmIChoZWFkZXJzID09PSB2b2lkIDApIHsgaGVhZGVycyA9IHt9OyB9XHJcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XHJcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcclxuICAgIH1cclxuICAgIE1ha2VSZXF1ZXN0LnByb3RvdHlwZS5zZXRIZWFkZXJzID0gZnVuY3Rpb24gKGh0dHBSZXF1ZXN0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgaGVhZGVyIGluIHRoaXMuaGVhZGVycykge1xyXG4gICAgICAgICAgICBodHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgdGhpcy5oZWFkZXJzW2hlYWRlcl0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBNYWtlUmVxdWVzdC5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAoZGF0YSA9PT0gdm9pZCAwKSB7IGRhdGEgPSBudWxsOyB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgdmFyIHhtbEh0dHBSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0Lm9wZW4oX3RoaXMubWV0aG9kLCBfdGhpcy51cmwpO1xyXG4gICAgICAgICAgICBfdGhpcy5zZXRIZWFkZXJzKHhtbEh0dHBSZXF1ZXN0KTtcclxuICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3Qub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0LnN0YXR1cyA+PSAyMDAgJiZcclxuICAgICAgICAgICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC5zdGF0dXMgPCAzMDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHhtbEh0dHBSZXF1ZXN0LnJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogeG1sSHR0cFJlcXVlc3Quc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0OiB4bWxIdHRwUmVxdWVzdC5zdGF0dXNUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiB4bWxIdHRwUmVxdWVzdC5yZXNwb25zZSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiB4bWxIdHRwUmVxdWVzdC5zdGF0dXMsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dDogeG1sSHR0cFJlcXVlc3Quc3RhdHVzVGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBib2R5OiB4bWxIdHRwUmVxdWVzdC5yZXNwb25zZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC5zZW5kKGRhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBNYWtlUmVxdWVzdDtcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gTWFrZVJlcXVlc3Q7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1ha2VSZXF1ZXN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBBcnJheVV0aWxfMSA9IHJlcXVpcmUoXCIuL0FycmF5VXRpbFwiKTtcclxudmFyIERvbVV0aWxfMSA9IHJlcXVpcmUoXCIuL0RvbVV0aWxcIik7XHJcbnZhciBNb2RhbFV0aWwgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBNb2RhbFV0aWwoKSB7XHJcbiAgICB9XHJcbiAgICBNb2RhbFV0aWwucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLkVsZW1lbnRzID0gQXJyYXlVdGlsXzEuZGVmYXVsdC5Gcm9tTm9kZUxpc3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5tb2RhbFwiKSk7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpLm9uY2xpY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgICAgICAgaWYgKHRhcmdldC5oYXNBdHRyaWJ1dGUoXCJkYXRhLXRvZ2dsZVwiKSAmJiB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZGF0YS10b2dnbGVcIikgPT09IFwibW9kYWxcIikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRvbVV0aWwgPSBuZXcgRG9tVXRpbF8xLmRlZmF1bHQodGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIHZhciB0YXJnZXRTZWxlY3RvciA9IGRvbVV0aWwuZ2V0RGF0YUF0dHIoXCJ0YXJnZXRcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0TW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldFNlbGVjdG9yKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLnRvZ2dsZU1vZGFsKHRhcmdldE1vZGFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5Nb2RhbHMgPSB0aGlzLkVsZW1lbnRzLm1hcChmdW5jdGlvbiAobW9kYWwpIHsgcmV0dXJuIG5ldyBNb2RhbChtb2RhbCk7IH0pO1xyXG4gICAgfTtcclxuICAgIE1vZGFsVXRpbC5wcm90b3R5cGUudG9nZ2xlTW9kYWwgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHZhciBtb2RhbCA9IG5ldyBNb2RhbChlbGVtZW50KTtcclxuICAgICAgICBpZiAoZWxlbWVudC5zdHlsZS5kaXNwbGF5ID09PSBcImJsb2NrXCIpIHtcclxuICAgICAgICAgICAgbW9kYWwuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbW9kYWwuc2hvdygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gTW9kYWxVdGlsO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBNb2RhbFV0aWw7XHJcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWNsYXNzZXMtcGVyLWZpbGVcclxudmFyIE1vZGFsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gTW9kYWwoZWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMuTW9kYWwgPSBlbGVtZW50O1xyXG4gICAgICAgIHRoaXMuYmluZENsaWNrKCk7XHJcbiAgICAgICAgdGhpcy5iaW5kQ2xvc2UoKTtcclxuICAgICAgICB0aGlzLmJpbmRTdWJtaXQoKTtcclxuICAgICAgICB0aGlzLmJpbmRFc2NhcGUoKTtcclxuICAgICAgICB0aGlzLmJhY2tEcm9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgICB0aGlzLmJhY2tEcm9wLmNsYXNzTGlzdC5hZGQoXCJtb2RhbC1iYWNrZHJvcFwiLCBcImZhZGVcIiwgXCJzaG93XCIpO1xyXG4gICAgICAgIHRoaXMub25oaWRlID0gbmV3IEV2ZW50KCdoaWRlJyk7XHJcbiAgICB9XHJcbiAgICBNb2RhbC5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLk1vZGFsLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XHJcbiAgICAgICAgdGhpcy5Nb2RhbC5jbGFzc0xpc3QuYWRkKFwic2hvd1wiKTtcclxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kKHRoaXMuYmFja0Ryb3ApO1xyXG4gICAgfTtcclxuICAgIE1vZGFsLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuTW9kYWwuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIHRoaXMuTW9kYWwuY2xhc3NMaXN0LnJlbW92ZShcInNob3dcIik7XHJcbiAgICAgICAgdGhpcy5Nb2RhbC5kaXNwYXRjaEV2ZW50KHRoaXMub25oaWRlKTtcclxuICAgICAgICB2YXIgYmFja2Ryb3AgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLm1vZGFsLWJhY2tkcm9wLmZhZGUuc2hvd1wiKTtcclxuICAgICAgICBpZiAoYmFja2Ryb3ApIHtcclxuICAgICAgICAgICAgYmFja2Ryb3AucmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIE1vZGFsLnByb3RvdHlwZS5iaW5kQ2xpY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLk1vZGFsLm9uY2xpY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gX3RoaXMuTW9kYWwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5ldyBNb2RhbChfdGhpcy5Nb2RhbCkuaGlkZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICBNb2RhbC5wcm90b3R5cGUuYmluZENsb3NlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGRpc21pc3MgPSBBcnJheVV0aWxfMS5kZWZhdWx0LkZyb21Ob2RlTGlzdCh0aGlzLk1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1kaXNtaXNzXVwiKSk7XHJcbiAgICAgICAgZGlzbWlzcy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQub25jbGljayA9IF90aGlzLmhpZGUuYmluZChfdGhpcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgTW9kYWwucHJvdG90eXBlLmJpbmRTdWJtaXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICB2YXIgc3VibWl0ID0gQXJyYXlVdGlsXzEuZGVmYXVsdC5Gcm9tTm9kZUxpc3QodGhpcy5Nb2RhbC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtc3VibWl0XVwiKSk7XHJcbiAgICAgICAgc3VibWl0LmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdmFyIGRvbVV0aWwgPSBuZXcgRG9tVXRpbF8xLmRlZmF1bHQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRvbVV0aWwuZ2V0RGF0YUF0dHIoXCJzdWJtaXQtdmFsdWVcIik7XHJcbiAgICAgICAgICAgIHZhciB0YXJnZXRTZWxlY3RvciA9IGRvbVV0aWwuZ2V0RGF0YUF0dHIoXCJzdWJtaXRcIik7XHJcbiAgICAgICAgICAgIGVsZW1lbnQub25jbGljayA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0U2VsZWN0b3IpLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25JbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicG9zaXRpb25cIik7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbklucHV0LnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgTW9kYWwucHJvdG90eXBlLmJpbmRFc2NhcGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBkb2N1bWVudC5vbmtleWRvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuaGlkZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gTW9kYWw7XHJcbn0oKSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU1vZGFsVXRpbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgRG9tVXRpbF8xID0gcmVxdWlyZShcIi4vRG9tVXRpbFwiKTtcclxudmFyIFZpZXdwb3J0VXRpbF8xID0gcmVxdWlyZShcIi4vVmlld3BvcnRVdGlsXCIpO1xyXG52YXIgTmF2QmFyU2Nyb2xsZWQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBOYXZCYXJTY3JvbGxlZCgpIHtcclxuICAgICAgICB0aGlzLnNjcm9sbGVkQ2xhc3MgPSBcInNjcm9sbGVkXCI7XHJcbiAgICAgICAgdGhpcy5uYXZCYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibmF2XCIpO1xyXG4gICAgICAgIHRoaXMuZG9tVXRpbCA9IG5ldyBEb21VdGlsXzEuZGVmYXVsdCh0aGlzLm5hdkJhcik7XHJcbiAgICB9XHJcbiAgICBOYXZCYXJTY3JvbGxlZC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMuc2Nyb2xsRXZlbnQuYmluZCh0aGlzKSwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxFdmVudCgpO1xyXG4gICAgfTtcclxuICAgIE5hdkJhclNjcm9sbGVkLnByb3RvdHlwZS5zY3JvbGxFdmVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAobmV3IFZpZXdwb3J0VXRpbF8xLlZpZXdwb3J0VXRpbCgpLldpbmRvd1RvcCg0MCkpIHtcclxuICAgICAgICAgICAgdGhpcy5kb21VdGlsLmFwcGVuZENsYXNzKHRoaXMuc2Nyb2xsZWRDbGFzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRvbVV0aWwucmVtb3ZlQ2xhc3ModGhpcy5zY3JvbGxlZENsYXNzKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIE5hdkJhclNjcm9sbGVkO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBOYXZCYXJTY3JvbGxlZDtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TmF2QmFyU2Nyb2xsZWQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIHRocm90dGxlXzEgPSByZXF1aXJlKFwiLi90aHJvdHRsZVwiKTtcclxudmFyIERvbVV0aWxfMSA9IHJlcXVpcmUoXCIuL0RvbVV0aWxcIik7XHJcbnZhciBOYXZCYXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBOYXZCYXIoKSB7XHJcbiAgICAgICAgdmFyIG1haW5OYXZMaW5rcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJuYXYgdWwgbGkgYVwiKTtcclxuICAgICAgICB2YXIgbWFpblNlY3Rpb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIm1haW4gc2VjdGlvblwiKTtcclxuICAgICAgICB0aGlzLnRvZ2dsZXJCdXR0b24gPSBuZXcgRG9tVXRpbF8xLmRlZmF1bHQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm5hdiBidXR0b24ubmF2YmFyLXRvZ2dsZXJcIikpO1xyXG4gICAgICAgIHRoaXMubWFpbk5hdkxpbmtzID0gW10uc2xpY2VcclxuICAgICAgICAgICAgLmNhbGwobWFpbk5hdkxpbmtzKTtcclxuICAgICAgICB0aGlzLm1haW5TZWN0aW9ucyA9IFtdLnNsaWNlXHJcbiAgICAgICAgICAgIC5jYWxsKG1haW5TZWN0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBOYXZCYXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhyb3R0bGVfMS50aHJvdHRsZShfdGhpcy5zY3JvbGxFdmVudCwgMTAwKS5iaW5kKF90aGlzKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnRvZ2dsZXJCdXR0b24uZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKF90aGlzLnRvZ2dsZXJCdXR0b24uZ2V0RGF0YUF0dHIoXCJ0YXJnZXRcIikpLmNsYXNzTGlzdC50b2dnbGUoXCJjb2xsYXBzZVwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBOYXZCYXIucHJvdG90eXBlLnNjcm9sbEV2ZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBmcm9tVG9wID0gd2luZG93LnNjcm9sbFk7XHJcbiAgICAgICAgdGhpcy5tYWluTmF2TGlua3MuZm9yRWFjaChmdW5jdGlvbiAobGluaykge1xyXG4gICAgICAgICAgICB2YXIgc2VjdGlvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobGluay5ocmVmKTtcclxuICAgICAgICAgICAgaWYgKHNlY3Rpb24ub2Zmc2V0VG9wIDw9IGZyb21Ub3AgJiZcclxuICAgICAgICAgICAgICAgIHNlY3Rpb24ub2Zmc2V0VG9wICsgc2VjdGlvbi5vZmZzZXRIZWlnaHQgPiBmcm9tVG9wKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5rLmNsYXNzTGlzdC5hZGQoXCJjdXJyZW50XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGluay5jbGFzc0xpc3QucmVtb3ZlKFwiY3VycmVudFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBOYXZCYXI7XHJcbn0oKSk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IE5hdkJhcjtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TmF2YmFyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBPdmVybGF5cyA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIE92ZXJsYXlzKCkge1xyXG4gICAgfVxyXG4gICAgT3ZlcmxheXMuU3Bpbm5lciA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICB2YXIgZWxlbSA9IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcclxuICAgICAgICBlbGVtLmlubmVySFRNTCA9IFwiPGkgY2xhc3M9J2ZhcyBmYS1zcGlubmVyJz48L2k+XCI7XHJcbiAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKFwic3Bpbm5lclwiKTtcclxuICAgICAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoZWxlbSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW07XHJcbiAgICB9O1xyXG4gICAgT3ZlcmxheXMuQ2hlY2tNYXJrID0gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIHZhciBlbGVtID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xyXG4gICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChcInNwaW5uZXJcIik7XHJcbiAgICAgICAgZWxlbS5pbm5lckhUTUwgPSBcIjxpIGNsYXNzPSdmYXMgZmEtY2hlY2snPjwvaT5cIjtcclxuICAgICAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoZWxlbSk7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlKCk7XHJcbiAgICAgICAgfSwgdGhpcy5vdmVybGF5VGltZSk7XHJcbiAgICB9O1xyXG4gICAgT3ZlcmxheXMuQ3Jvc3NNYXJrID0gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICAgIHZhciBlbGVtID0gKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xyXG4gICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChcInNwaW5uZXJcIik7XHJcbiAgICAgICAgZWxlbS5pbm5lckhUTUwgPSBcIjxpIGNsYXNzPSdmYSBmYS10aW1lcycgYXJpYS1oaWRkZW49J3RydWUnPjwvaT5cIjtcclxuICAgICAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoZWxlbSk7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlKCk7XHJcbiAgICAgICAgfSwgdGhpcy5vdmVybGF5VGltZSk7XHJcbiAgICB9O1xyXG4gICAgT3ZlcmxheXMub3ZlcmxheVRpbWUgPSAzMDAwO1xyXG4gICAgcmV0dXJuIE92ZXJsYXlzO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBPdmVybGF5cztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T3ZlcmxheXMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIERvbVV0aWxfMSA9IHJlcXVpcmUoXCIuL0RvbVV0aWxcIik7XHJcbnZhciBIdG1sTG9hZGVyXzEgPSByZXF1aXJlKFwiLi9IdG1sTG9hZGVyXCIpO1xyXG52YXIgUmVwbGFjZU9uQ2xpY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBSZXBsYWNlT25DbGljayhzZWxlY3Rvcikge1xyXG4gICAgICAgIGlmIChzZWxlY3RvciA9PT0gdm9pZCAwKSB7IHNlbGVjdG9yID0gJy5jb250ZW50LXJlcGxhY2UnOyB9XHJcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XHJcbiAgICAgICAgaWYgKGVsZW1lbnRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMgPSBbXS5zbGljZVxyXG4gICAgICAgICAgICAgICAgLmNhbGwoZWxlbWVudHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFJlcGxhY2VPbkNsaWNrLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudHMuZm9yRWFjaCh0aGlzLnJlcGxhY2UpO1xyXG4gICAgfTtcclxuICAgIFJlcGxhY2VPbkNsaWNrLnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgZWxlbWVudFV0aWwgPSBuZXcgRG9tVXRpbF8xLmRlZmF1bHQoZWxlbWVudCk7XHJcbiAgICAgICAgdmFyIHRhcmdldFVybCA9IGVsZW1lbnRVdGlsLmdldERhdGFBdHRyKCd1cmwnKTtcclxuICAgICAgICBpZiAoIXRhcmdldFVybClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHZhciB0YXJnZXRTZWxlY3RvciA9IGVsZW1lbnRVdGlsLmdldERhdGFBdHRyKCd0YXJnZXQnKTtcclxuICAgICAgICBpZiAoIXRhcmdldFNlbGVjdG9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0U2VsZWN0b3IpO1xyXG4gICAgICAgIGlmICghdGFyZ2V0KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkgeyByZXR1cm4gbmV3IEh0bWxMb2FkZXJfMS5kZWZhdWx0KHRhcmdldCkubG9hZCh0YXJnZXRVcmwpOyB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gUmVwbGFjZU9uQ2xpY2s7XHJcbn0oKSk7XHJcbmV4cG9ydHMuUmVwbGFjZU9uQ2xpY2sgPSBSZXBsYWNlT25DbGljaztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVwbGFjZU9uQ2xpY2suanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIFNjcmlwdExvYWRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFNjcmlwdExvYWRlcihzY3JpcHQsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5zY3JpcHQgPSBzY3JpcHQ7XHJcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xyXG4gICAgfVxyXG4gICAgU2NyaXB0TG9hZGVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIEFkZGluZyB0PGhlIHNjcmlwdCB0YWcgdG8gdGhlIGhlYWQgYXMgc3VnZ2VzdGVkIGJlZm9yZVxyXG4gICAgICAgIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZDtcclxuICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcclxuICAgICAgICBzY3JpcHQudHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCI7XHJcbiAgICAgICAgc2NyaXB0LnNyYyA9IHRoaXMuc2NyaXB0O1xyXG4gICAgICAgIC8vIFRoZW4gYmluZCB0aGUgZXZlbnQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxyXG4gICAgICAgIC8vIFRoZXJlIGFyZSBzZXZlcmFsIGV2ZW50cyBmb3IgY3Jvc3MgYnJvd3NlciBjb21wYXRpYmlsaXR5LlxyXG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSB0aGlzLmNhbGxiYWNrKCk7XHJcbiAgICAgICAgLy8gRmlyZSB0aGUgbG9hZGluZ1xyXG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gU2NyaXB0TG9hZGVyO1xyXG59KCkpO1xyXG5leHBvcnRzLlNjcmlwdExvYWRlciA9IFNjcmlwdExvYWRlcjtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2NyaXB0TG9hZGVyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBTY3JvbGxQb3NpdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFNjcm9sbFBvc2l0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoZWxlbWVudCA9PT0gdm9pZCAwKSB7IGVsZW1lbnQgPSB3aW5kb3c7IH1cclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgfVxyXG4gICAgU2Nyb2xsUG9zaXRpb24ucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5lbGVtZW50IGluc3RhbmNlb2YgV2luZG93KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB4OiB0aGlzLmVsZW1lbnQucGFnZVhPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICB5OiB0aGlzLmVsZW1lbnQucGFnZVlPZmZzZXRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgeDogdGhpcy5lbGVtZW50LnNjcm9sbExlZnQsXHJcbiAgICAgICAgICAgIHk6IHRoaXMuZWxlbWVudC5zY3JvbGxUb3BcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBTY3JvbGxQb3NpdGlvbjtcclxufSgpKTtcclxuZXhwb3J0cy5TY3JvbGxQb3NpdGlvbiA9IFNjcm9sbFBvc2l0aW9uO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1TY3JvbGxQb3NpdGlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgU3RyaW5nVXRpbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFN0cmluZ1V0aWwoKSB7XHJcbiAgICB9XHJcbiAgICBTdHJpbmdVdGlsLlN0cmluZ0Zvcm1hdCA9IGZ1bmN0aW9uIChzdHIpIHtcclxuICAgICAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgveyhcXGQrKX0vZywgZnVuY3Rpb24gKG1hdGNoLCBpbmRleCkgeyByZXR1cm4gYXJnc1tpbmRleF0gfHwgJyc7IH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBTdHJpbmdVdGlsO1xyXG59KCkpO1xyXG5leHBvcnRzLlN0cmluZ1V0aWwgPSBTdHJpbmdVdGlsO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdHJpbmdVdGlsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBVcmxIZWxwZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBVcmxIZWxwZXIoKSB7XHJcbiAgICB9XHJcbiAgICBVcmxIZWxwZXIuZ2VuZXJhdGVOZXcgPSBmdW5jdGlvbiAocGFyYW1zKSB7XHJcbiAgICAgICAgdmFyIHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBwYXJhbXNba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgc2VhcmNoUGFyYW1zLnNldChrZXksIHBhcmFtc1trZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2VhcmNoUGFyYW1zLnRvU3RyaW5nKCk7XHJcbiAgICB9O1xyXG4gICAgVXJsSGVscGVyLnByb3RvdHlwZS5zZXRBbmRSZWRpcmVjdCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcclxuICAgICAgICB2YXIgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgc2VhcmNoUGFyYW1zLnNldChrZXksIHBhcmFtc1trZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uc2VhcmNoID0gc2VhcmNoUGFyYW1zLnRvU3RyaW5nKCk7XHJcbiAgICB9O1xyXG4gICAgVXJsSGVscGVyLnByb3RvdHlwZS5jb21wb3NlID0gZnVuY3Rpb24gKHBhcmFtcykge1xyXG4gICAgICAgIHZhciBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBwYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hQYXJhbXMuc2V0KGtleSwgcGFyYW1zW2tleV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzZWFyY2hQYXJhbXMudG9TdHJpbmcoKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gVXJsSGVscGVyO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBVcmxIZWxwZXI7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVSTEhlbHBlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgVXJsVXRpbCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFVybFV0aWwoKSB7XHJcbiAgICAgICAgdGhpcy5xdWVyeVZhbHVlID0gZnVuY3Rpb24gKGZpZWxkLCB1cmwpIHtcclxuICAgICAgICAgICAgdmFyIGhyZWYgPSB1cmwgPyB1cmwgOiB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgICAgICAgICAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoJ1s/Jl0nICsgZmllbGQgKyAnPShbXiYjXSopJywgJ2knKTtcclxuICAgICAgICAgICAgdmFyIHN0cmluZyA9IHJlZy5leGVjKGhyZWYpO1xyXG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nID8gc3RyaW5nWzFdLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VVJMID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhyZWY7IH07XHJcbiAgICAgICAgdGhpcy5nZXRVUkxQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKHVybCkge1xyXG4gICAgICAgICAgICByZXR1cm4gKHVybC5tYXRjaCgvKFtePz0mXSspKD0oW14mXSopKS9nKSB8fCBbXSkucmVkdWNlKGZ1bmN0aW9uIChhLCB2KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKChhW3Yuc2xpY2UoMCwgdi5pbmRleE9mKFwiPVwiKSldID0gdi5zbGljZSh2LmluZGV4T2YoXCI9XCIpICsgMSkpLCBhKTtcclxuICAgICAgICAgICAgfSwge30pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdCA9IGZ1bmN0aW9uICh1cmwsIGFzTGluaykge1xyXG4gICAgICAgICAgICBpZiAoYXNMaW5rID09PSB2b2lkIDApIHsgYXNMaW5rID0gdHJ1ZTsgfVxyXG4gICAgICAgICAgICByZXR1cm4gYXNMaW5rID8gKHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsKSA6IHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHVybCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmJhc2VVcmwgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3cubG9jYXRpb24ub3JpZ2luOyB9O1xyXG4gICAgICAgIHRoaXMuaG9zdCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ob3N0OyB9O1xyXG4gICAgICAgIHRoaXMucGF0aEFycmF5ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCcvJyk7IH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVXJsVXRpbDtcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gVXJsVXRpbDtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VXJsVXRpbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgVmlld3BvcnRVdGlsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVmlld3BvcnRVdGlsKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoZWxlbWVudCA9PT0gdm9pZCAwKSB7IGVsZW1lbnQgPSBudWxsOyB9XHJcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgIH1cclxuICAgIFZpZXdwb3J0VXRpbC5wcm90b3R5cGUuSXNWaXNpYmxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBib3VuZHMgPSB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgcmV0dXJuICgoKGJvdW5kcy50b3AgPiAwICYmIGJvdW5kcy50b3AgPCBpbm5lckhlaWdodCkgfHxcclxuICAgICAgICAgICAgKGJvdW5kcy5ib3R0b20gPiAwICYmIGJvdW5kcy5ib3R0b20gPCBpbm5lckhlaWdodCkpICYmXHJcbiAgICAgICAgICAgICgoYm91bmRzLmxlZnQgPiAwICYmIGJvdW5kcy5sZWZ0IDwgaW5uZXJXaWR0aCkgfHxcclxuICAgICAgICAgICAgICAgIChib3VuZHMucmlnaHQgPiAwICYmIGJvdW5kcy5yaWdodCA8IGlubmVyV2lkdGgpKSk7XHJcbiAgICB9O1xyXG4gICAgVmlld3BvcnRVdGlsLnByb3RvdHlwZS5Jc1BhcnRpYWxseVZpc2libGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICByZXR1cm4gKGJvdW5kcy50b3AgPj0gMCB8fFxyXG4gICAgICAgICAgICBib3VuZHMubGVmdCA+PSAwIHx8XHJcbiAgICAgICAgICAgIGJvdW5kcy5ib3R0b20gPD0gaW5uZXJIZWlnaHQgfHxcclxuICAgICAgICAgICAgYm91bmRzLnJpZ2h0IDw9IGlubmVyV2lkdGgpO1xyXG4gICAgfTtcclxuICAgIFZpZXdwb3J0VXRpbC5wcm90b3R5cGUuSXNPZmZzZXRWaXNpYmxlID0gZnVuY3Rpb24gKG9mZnNldCkge1xyXG4gICAgICAgIGlmIChvZmZzZXQgPT09IHZvaWQgMCkgeyBvZmZzZXQgPSAzMDA7IH1cclxuICAgICAgICB2YXIgYm91bmRzID0gdGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgICAgcmV0dXJuIChib3VuZHMudG9wICsgb2Zmc2V0ID49IDAgfHxcclxuICAgICAgICAgICAgYm91bmRzLmxlZnQgKyBvZmZzZXQgPj0gMCB8fFxyXG4gICAgICAgICAgICBib3VuZHMuYm90dG9tIC0gb2Zmc2V0IDw9IGlubmVySGVpZ2h0IHx8XHJcbiAgICAgICAgICAgIGJvdW5kcy5yaWdodCAtIG9mZnNldCA8PSBpbm5lcldpZHRoKTtcclxuICAgIH07XHJcbiAgICBWaWV3cG9ydFV0aWwucHJvdG90eXBlLldpbmRvd1RvcCA9IGZ1bmN0aW9uIChvZmZzZXQpIHtcclxuICAgICAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsgb2Zmc2V0ID0gMDsgfVxyXG4gICAgICAgIHZhciBZT2Zmc2V0ID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHxcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgfHxcclxuICAgICAgICAgICAgMDtcclxuICAgICAgICByZXR1cm4gb2Zmc2V0IDw9IFlPZmZzZXQ7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIFZpZXdwb3J0VXRpbDtcclxufSgpKTtcclxuZXhwb3J0cy5WaWV3cG9ydFV0aWwgPSBWaWV3cG9ydFV0aWw7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZpZXdwb3J0VXRpbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxudmFyIF9fc3ByZWFkQXJyYXlzID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5cykgfHwgZnVuY3Rpb24gKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn07XHJcbnZhciBfdGhpcyA9IHRoaXM7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIGRlYm91bmNlID0gZnVuY3Rpb24gKGZuLCBtcywgaW1tZWRpYXRlKSB7XHJcbiAgICBpZiAobXMgPT09IHZvaWQgMCkgeyBtcyA9IDA7IH1cclxuICAgIGlmIChpbW1lZGlhdGUgPT09IHZvaWQgMCkgeyBpbW1lZGlhdGUgPSBmYWxzZTsgfVxyXG4gICAgdmFyIHRpbWVvdXQ7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XHJcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcclxuICAgICAgICAgICAgICAgIGZuLmFwcGx5KF90aGlzLCBhcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIG1zKTtcclxuICAgICAgICBpZiAoaW1tZWRpYXRlICYmICF0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGZuLmFwcGx5KF90aGlzLCBfX3NwcmVhZEFycmF5cyhhcmdzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufTtcclxuZXhwb3J0cy5kZWJvdW5jZSA9IGRlYm91bmNlO1xyXG52YXIgdGhyb3R0bGUgPSBmdW5jdGlvbiAoZnVuYywgbXMpIHtcclxuICAgIHZhciBsYXN0RnVuYztcclxuICAgIHZhciBsYXN0UmFuO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XHJcbiAgICAgICAgaWYgKCFsYXN0UmFuKSB7XHJcbiAgICAgICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XHJcbiAgICAgICAgICAgIGxhc3RSYW4gPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGxhc3RGdW5jKTtcclxuICAgICAgICAgICAgbGFzdEZ1bmMgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoRGF0ZS5ub3coKSAtIGxhc3RSYW4pID49IG1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICBsYXN0UmFuID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgbXMgLSAoRGF0ZS5ub3coKSAtIGxhc3RSYW4pKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59O1xyXG5leHBvcnRzLnRocm90dGxlID0gdGhyb3R0bGU7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm90dGxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBBbmFseXRpY3NDbGlja0V2ZW50c18xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL0FuYWx5dGljc0NsaWNrRXZlbnRzXCIpO1xyXG5leHBvcnRzLkFuYWx5dGljc0NsaWNrRXZlbnRzID0gQW5hbHl0aWNzQ2xpY2tFdmVudHNfMS5kZWZhdWx0O1xyXG52YXIgQXJyYXlVdGlsXzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvQXJyYXlVdGlsXCIpO1xyXG5leHBvcnRzLkFycmF5VXRpbCA9IEFycmF5VXRpbF8xLmRlZmF1bHQ7XHJcbnZhciBCYWNrZ3JvdW5kTGF6eUxvYWRlcl8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL0JhY2tncm91bmRMYXp5TG9hZGVyXCIpO1xyXG5leHBvcnRzLkJhY2tncm91bmRMYXp5TG9hZGVyID0gQmFja2dyb3VuZExhenlMb2FkZXJfMS5kZWZhdWx0O1xyXG52YXIgQnJvd3NlclR5cGVfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9Ccm93c2VyVHlwZVwiKTtcclxuZXhwb3J0cy5Ccm93c2VyVHlwZSA9IEJyb3dzZXJUeXBlXzEuZGVmYXVsdDtcclxudmFyIFZpZXdwb3J0VXRpbF8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL1ZpZXdwb3J0VXRpbFwiKTtcclxuZXhwb3J0cy5WaWV3cG9ydFV0aWwgPSBWaWV3cG9ydFV0aWxfMS5WaWV3cG9ydFV0aWw7XHJcbnZhciBVcmxVdGlsXzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvVXJsVXRpbFwiKTtcclxuZXhwb3J0cy5VcmxVdGlsID0gVXJsVXRpbF8xLmRlZmF1bHQ7XHJcbnZhciB0aHJvdHRsZV8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL3Rocm90dGxlXCIpO1xyXG5leHBvcnRzLnRocm90dGxlID0gdGhyb3R0bGVfMS50aHJvdHRsZTtcclxuZXhwb3J0cy5kZWJvdW5jZSA9IHRocm90dGxlXzEuZGVib3VuY2U7XHJcbnZhciBTdHJpbmdVdGlsXzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvU3RyaW5nVXRpbFwiKTtcclxuZXhwb3J0cy5TdHJpbmdVdGlsID0gU3RyaW5nVXRpbF8xLlN0cmluZ1V0aWw7XHJcbnZhciBTY3JvbGxQb3NpdGlvbl8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL1Njcm9sbFBvc2l0aW9uXCIpO1xyXG5leHBvcnRzLlNjcm9sbFBvc2l0aW9uID0gU2Nyb2xsUG9zaXRpb25fMS5TY3JvbGxQb3NpdGlvbjtcclxudmFyIFNjcmlwdExvYWRlcl8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL1NjcmlwdExvYWRlclwiKTtcclxuZXhwb3J0cy5TY3JpcHRMb2FkZXIgPSBTY3JpcHRMb2FkZXJfMS5TY3JpcHRMb2FkZXI7XHJcbnZhciBSZXBsYWNlT25DbGlja18xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL1JlcGxhY2VPbkNsaWNrXCIpO1xyXG5leHBvcnRzLlJlcGxhY2VPbkNsaWNrID0gUmVwbGFjZU9uQ2xpY2tfMS5SZXBsYWNlT25DbGljaztcclxudmFyIE92ZXJsYXlzXzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvT3ZlcmxheXNcIik7XHJcbmV4cG9ydHMuT3ZlcmxheXMgPSBPdmVybGF5c18xLmRlZmF1bHQ7XHJcbnZhciBOYXZCYXJTY3JvbGxlZF8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL05hdkJhclNjcm9sbGVkXCIpO1xyXG5leHBvcnRzLk5hdkJhclNjcm9sbGVkID0gTmF2QmFyU2Nyb2xsZWRfMS5kZWZhdWx0O1xyXG52YXIgTmF2YmFyXzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvTmF2YmFyXCIpO1xyXG5leHBvcnRzLk5hdkJhciA9IE5hdmJhcl8xLmRlZmF1bHQ7XHJcbnZhciBNb2RhbFV0aWxfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9Nb2RhbFV0aWxcIik7XHJcbmV4cG9ydHMuTW9kYWxVdGlsID0gTW9kYWxVdGlsXzEuZGVmYXVsdDtcclxudmFyIE1ha2VSZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvTWFrZVJlcXVlc3RcIik7XHJcbmV4cG9ydHMuTWFrZVJlcXVlc3QgPSBNYWtlUmVxdWVzdF8xLmRlZmF1bHQ7XHJcbnZhciBJbWFnZUxhenlMb2FkZXJfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9JbWFnZUxhenlMb2FkZXJcIik7XHJcbmV4cG9ydHMuSW1hZ2VMYXp5TG9hZGVyID0gSW1hZ2VMYXp5TG9hZGVyXzEuZGVmYXVsdDtcclxudmFyIEh0bWxMb2FkZXJfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9IdG1sTG9hZGVyXCIpO1xyXG5leHBvcnRzLkh0bWxMb2FkZXIgPSBIdG1sTG9hZGVyXzEuZGVmYXVsdDtcclxudmFyIEhlYWRlckFuaW1hdGlvbl8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL0hlYWRlckFuaW1hdGlvblwiKTtcclxuZXhwb3J0cy5IZWFkZXJBbmltYXRpb24gPSBIZWFkZXJBbmltYXRpb25fMS5kZWZhdWx0O1xyXG52YXIgR2xvYmFsRG9tVXRpbF8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL0dsb2JhbERvbVV0aWxcIik7XHJcbmV4cG9ydHMuR2xvYmFsRG9tVXRpbCA9IEdsb2JhbERvbVV0aWxfMS5kZWZhdWx0O1xyXG52YXIgRm9ybVV0aWxzXzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvRm9ybVV0aWxzXCIpO1xyXG5leHBvcnRzLkZvcm1VdGlscyA9IEZvcm1VdGlsc18xLmRlZmF1bHQ7XHJcbnZhciBFbGVtZW50U2NhbGVfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9FbGVtZW50U2NhbGVcIik7XHJcbmV4cG9ydHMuRWxlbWVudFNjYWxlID0gRWxlbWVudFNjYWxlXzEuZGVmYXVsdDtcclxudmFyIERvbVV0aWxfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9Eb21VdGlsXCIpO1xyXG5leHBvcnRzLkRvbVV0aWwgPSBEb21VdGlsXzEuZGVmYXVsdDtcclxudmFyIEN1c3RvbUlucHV0c18xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL0N1c3RvbUlucHV0c1wiKTtcclxuZXhwb3J0cy5DdXN0b21JbnB1dHMgPSBDdXN0b21JbnB1dHNfMS5kZWZhdWx0O1xyXG52YXIgQ29weV9VdGlsaXR5XzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvQ29weSBVdGlsaXR5XCIpO1xyXG5leHBvcnRzLkNvcHlVdGlsaXR5ID0gQ29weV9VdGlsaXR5XzEuQ29weVV0aWxpdHk7XHJcbnZhciBDaGFuZ2VMYW5ndWFnZV8xID0gcmVxdWlyZShcIi4vVXRpbGl0aWVzL0NoYW5nZUxhbmd1YWdlXCIpO1xyXG5leHBvcnRzLkNoYW5nZUxhbmd1YWdlID0gQ2hhbmdlTGFuZ3VhZ2VfMS5kZWZhdWx0O1xyXG52YXIgRGVib3VuY2VyXzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvRGVib3VuY2VyXCIpO1xyXG5leHBvcnRzLmRlYm91bmNlciA9IERlYm91bmNlcl8xLmRlZmF1bHQ7XHJcbnZhciBVUkxIZWxwZXJfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9VUkxIZWxwZXJcIik7XHJcbmV4cG9ydHMuVXJsSGVscGVyID0gVVJMSGVscGVyXzEuZGVmYXVsdDtcclxudmFyIEhUTUxJbXBvcnRfMSA9IHJlcXVpcmUoXCIuL1V0aWxpdGllcy9IVE1MSW1wb3J0XCIpO1xyXG5leHBvcnRzLkhUTUxJbXBvcnQgPSBIVE1MSW1wb3J0XzEuZGVmYXVsdDtcclxudmFyIEN1c3RvbVZhbGlkYXRpb25VdGlsXzEgPSByZXF1aXJlKFwiLi9VdGlsaXRpZXMvQ3VzdG9tVmFsaWRhdGlvblV0aWxcIik7XHJcbmV4cG9ydHMuQ3VzdG9tVmFsaWRhdGlvblV0aWwgPSBDdXN0b21WYWxpZGF0aW9uVXRpbF8xLmRlZmF1bHQ7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qKlxuQGxpY2Vuc2UgQG5vY29tcGlsZVxuQ29weXJpZ2h0IChjKSAyMDE4IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcblRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG5UaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG5zdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuKi9cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgKGZ1bmN0aW9uKCl7aWYodm9pZCAwPT09d2luZG93LlJlZmxlY3R8fHZvaWQgMD09PXdpbmRvdy5jdXN0b21FbGVtZW50c3x8d2luZG93LmN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2spcmV0dXJuO2NvbnN0IGE9SFRNTEVsZW1lbnQ7d2luZG93LkhUTUxFbGVtZW50PXtIVE1MRWxlbWVudDpmdW5jdGlvbiBIVE1MRWxlbWVudCgpe3JldHVybiBSZWZsZWN0LmNvbnN0cnVjdChhLFtdLHRoaXMuY29uc3RydWN0b3IpfX0uSFRNTEVsZW1lbnQsSFRNTEVsZW1lbnQucHJvdG90eXBlPWEucHJvdG90eXBlLEhUTUxFbGVtZW50LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1IVE1MRWxlbWVudCxPYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEVsZW1lbnQsYSk7fSkoKTtcblxufSgpKTtcbiIsIi8qKlxuQGxpY2Vuc2UgQG5vY29tcGlsZVxuQ29weXJpZ2h0IChjKSAyMDE4IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcblRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG5UaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG5zdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuKi9cbihmdW5jdGlvbigpey8qXG5cbiBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdFxuIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kXG4gYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heVxuIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnlcbiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQXG4gcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuKi9cbid1c2Ugc3RyaWN0Jzt2YXIgdjtmdW5jdGlvbiBiYShhKXt2YXIgYj0wO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBiPGEubGVuZ3RoP3tkb25lOiExLHZhbHVlOmFbYisrXX06e2RvbmU6ITB9fX12YXIgY2E9XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGEsYixjKXtpZihhPT1BcnJheS5wcm90b3R5cGV8fGE9PU9iamVjdC5wcm90b3R5cGUpcmV0dXJuIGE7YVtiXT1jLnZhbHVlO3JldHVybiBhfTtcbmZ1bmN0aW9uIGRhKGEpe2E9W1wib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzLGEsXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93LFwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmLFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbF07Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDsrK2Ipe3ZhciBjPWFbYl07aWYoYyYmYy5NYXRoPT1NYXRoKXJldHVybiBjfXRocm93IEVycm9yKFwiQ2Fubm90IGZpbmQgZ2xvYmFsIG9iamVjdFwiKTt9dmFyIGVhPWRhKHRoaXMpO2Z1bmN0aW9uIGlhKGEsYil7aWYoYilhOnt2YXIgYz1lYTthPWEuc3BsaXQoXCIuXCIpO2Zvcih2YXIgZD0wO2Q8YS5sZW5ndGgtMTtkKyspe3ZhciBlPWFbZF07aWYoIShlIGluIGMpKWJyZWFrIGE7Yz1jW2VdfWE9YVthLmxlbmd0aC0xXTtkPWNbYV07Yj1iKGQpO2IhPWQmJm51bGwhPWImJmNhKGMsYSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmJ9KX19XG5pYShcIlN5bWJvbFwiLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoZSl7aWYodGhpcyBpbnN0YW5jZW9mIGIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvclwiKTtyZXR1cm4gbmV3IGMoXCJqc2NvbXBfc3ltYm9sX1wiKyhlfHxcIlwiKStcIl9cIitkKyssZSl9ZnVuY3Rpb24gYyhlLGYpe3RoaXMuZz1lO2NhKHRoaXMsXCJkZXNjcmlwdGlvblwiLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Zn0pfWlmKGEpcmV0dXJuIGE7Yy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nfTt2YXIgZD0wO3JldHVybiBifSk7XG5pYShcIlN5bWJvbC5pdGVyYXRvclwiLGZ1bmN0aW9uKGEpe2lmKGEpcmV0dXJuIGE7YT1TeW1ib2woXCJTeW1ib2wuaXRlcmF0b3JcIik7Zm9yKHZhciBiPVwiQXJyYXkgSW50OEFycmF5IFVpbnQ4QXJyYXkgVWludDhDbGFtcGVkQXJyYXkgSW50MTZBcnJheSBVaW50MTZBcnJheSBJbnQzMkFycmF5IFVpbnQzMkFycmF5IEZsb2F0MzJBcnJheSBGbG9hdDY0QXJyYXlcIi5zcGxpdChcIiBcIiksYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1lYVtiW2NdXTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgZCYmXCJmdW5jdGlvblwiIT10eXBlb2YgZC5wcm90b3R5cGVbYV0mJmNhKGQucHJvdG90eXBlLGEse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBqYShiYSh0aGlzKSl9fSl9cmV0dXJuIGF9KTtmdW5jdGlvbiBqYShhKXthPXtuZXh0OmF9O2FbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtyZXR1cm4gYX1cbmZ1bmN0aW9uIGthKGEpe3ZhciBiPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmYVtTeW1ib2wuaXRlcmF0b3JdO3JldHVybiBiP2IuY2FsbChhKTp7bmV4dDpiYShhKX19ZnVuY3Rpb24geChhKXtpZighKGEgaW5zdGFuY2VvZiBBcnJheSkpe2E9a2EoYSk7Zm9yKHZhciBiLGM9W107IShiPWEubmV4dCgpKS5kb25lOyljLnB1c2goYi52YWx1ZSk7YT1jfXJldHVybiBhfXZhciBtYTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3Quc2V0UHJvdG90eXBlT2YpbWE9T2JqZWN0LnNldFByb3RvdHlwZU9mO2Vsc2V7dmFyIG5hO2E6e3ZhciBvYT17YTohMH0scGE9e307dHJ5e3BhLl9fcHJvdG9fXz1vYTtuYT1wYS5hO2JyZWFrIGF9Y2F0Y2goYSl7fW5hPSExfW1hPW5hP2Z1bmN0aW9uKGEsYil7YS5fX3Byb3RvX189YjtpZihhLl9fcHJvdG9fXyE9PWIpdGhyb3cgbmV3IFR5cGVFcnJvcihhK1wiIGlzIG5vdCBleHRlbnNpYmxlXCIpO3JldHVybiBhfTpudWxsfVxudmFyIHFhPW1hO2Z1bmN0aW9uIHJhKCl7dGhpcy51PSExO3RoaXMuaD1udWxsO3RoaXMuS2E9dm9pZCAwO3RoaXMuZz0xO3RoaXMuZGE9MDt0aGlzLmk9bnVsbH1mdW5jdGlvbiB1YShhKXtpZihhLnUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7YS51PSEwfXJhLnByb3RvdHlwZS5PPWZ1bmN0aW9uKGEpe3RoaXMuS2E9YX07ZnVuY3Rpb24geGEoYSxiKXthLmk9e1dhOmIsJGE6ITB9O2EuZz1hLmRhfXJhLnByb3RvdHlwZS5yZXR1cm49ZnVuY3Rpb24oYSl7dGhpcy5pPXtyZXR1cm46YX07dGhpcy5nPXRoaXMuZGF9O2Z1bmN0aW9uIHlhKGEsYil7YS5nPTM7cmV0dXJue3ZhbHVlOmJ9fWZ1bmN0aW9uIHphKGEpe3RoaXMuZz1uZXcgcmE7dGhpcy5oPWF9XG5mdW5jdGlvbiBBYShhLGIpe3VhKGEuZyk7dmFyIGM9YS5nLmg7aWYoYylyZXR1cm4gQmEoYSxcInJldHVyblwiaW4gYz9jW1wicmV0dXJuXCJdOmZ1bmN0aW9uKGQpe3JldHVybnt2YWx1ZTpkLGRvbmU6ITB9fSxiLGEuZy5yZXR1cm4pO2EuZy5yZXR1cm4oYik7cmV0dXJuIENhKGEpfWZ1bmN0aW9uIEJhKGEsYixjLGQpe3RyeXt2YXIgZT1iLmNhbGwoYS5nLmgsYyk7aWYoIShlIGluc3RhbmNlb2YgT2JqZWN0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSXRlcmF0b3IgcmVzdWx0IFwiK2UrXCIgaXMgbm90IGFuIG9iamVjdFwiKTtpZighZS5kb25lKXJldHVybiBhLmcudT0hMSxlO3ZhciBmPWUudmFsdWV9Y2F0Y2goZyl7cmV0dXJuIGEuZy5oPW51bGwseGEoYS5nLGcpLENhKGEpfWEuZy5oPW51bGw7ZC5jYWxsKGEuZyxmKTtyZXR1cm4gQ2EoYSl9XG5mdW5jdGlvbiBDYShhKXtmb3IoO2EuZy5nOyl0cnl7dmFyIGI9YS5oKGEuZyk7aWYoYilyZXR1cm4gYS5nLnU9ITEse3ZhbHVlOmIudmFsdWUsZG9uZTohMX19Y2F0Y2goYyl7YS5nLkthPXZvaWQgMCx4YShhLmcsYyl9YS5nLnU9ITE7aWYoYS5nLmkpe2I9YS5nLmk7YS5nLmk9bnVsbDtpZihiLiRhKXRocm93IGIuV2E7cmV0dXJue3ZhbHVlOmIucmV0dXJuLGRvbmU6ITB9fXJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19XG5mdW5jdGlvbiBEYShhKXt0aGlzLm5leHQ9ZnVuY3Rpb24oYil7dWEoYS5nKTthLmcuaD9iPUJhKGEsYS5nLmgubmV4dCxiLGEuZy5PKTooYS5nLk8oYiksYj1DYShhKSk7cmV0dXJuIGJ9O3RoaXMudGhyb3c9ZnVuY3Rpb24oYil7dWEoYS5nKTthLmcuaD9iPUJhKGEsYS5nLmhbXCJ0aHJvd1wiXSxiLGEuZy5PKTooeGEoYS5nLGIpLGI9Q2EoYSkpO3JldHVybiBifTt0aGlzLnJldHVybj1mdW5jdGlvbihiKXtyZXR1cm4gQWEoYSxiKX07dGhpc1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fWZ1bmN0aW9uIEVhKGEsYil7Yj1uZXcgRGEobmV3IHphKGIpKTtxYSYmYS5wcm90b3R5cGUmJnFhKGIsYS5wcm90b3R5cGUpO3JldHVybiBifUFycmF5LmZyb218fChBcnJheS5mcm9tPWZ1bmN0aW9uKGEpe3JldHVybltdLnNsaWNlLmNhbGwoYSl9KTtcbk9iamVjdC5hc3NpZ258fChPYmplY3QuYXNzaWduPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxjPTAsZDtjPGIubGVuZ3RoO2MrKylpZihkPWJbY10pZm9yKHZhciBlPWEsZj1PYmplY3Qua2V5cyhkKSxnPTA7ZzxmLmxlbmd0aDtnKyspe3ZhciBoPWZbZ107ZVtoXT1kW2hdfXJldHVybiBhfSk7dmFyIEZhPXNldFRpbWVvdXQ7ZnVuY3Rpb24gR2EoKXt9ZnVuY3Rpb24gSGEoYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXthLmFwcGx5KGIsYXJndW1lbnRzKX19ZnVuY3Rpb24gQShhKXtpZighKHRoaXMgaW5zdGFuY2VvZiBBKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3XCIpO2lmKFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoXCJub3QgYSBmdW5jdGlvblwiKTt0aGlzLk49MDt0aGlzLkVhPSExO3RoaXMuST12b2lkIDA7dGhpcy5iYT1bXTtJYShhLHRoaXMpfVxuZnVuY3Rpb24gSmEoYSxiKXtmb3IoOzM9PT1hLk47KWE9YS5JOzA9PT1hLk4/YS5iYS5wdXNoKGIpOihhLkVhPSEwLEthKGZ1bmN0aW9uKCl7dmFyIGM9MT09PWEuTj9iLmJiOmIuY2I7aWYobnVsbD09PWMpKDE9PT1hLk4/TGE6TWEpKGIucHJvbWlzZSxhLkkpO2Vsc2V7dHJ5e3ZhciBkPWMoYS5JKX1jYXRjaChlKXtNYShiLnByb21pc2UsZSk7cmV0dXJufUxhKGIucHJvbWlzZSxkKX19KSl9XG5mdW5jdGlvbiBMYShhLGIpe3RyeXtpZihiPT09YSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQSBwcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0c2VsZi5cIik7aWYoYiYmKFwib2JqZWN0XCI9PT10eXBlb2YgYnx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGIpKXt2YXIgYz1iLnRoZW47aWYoYiBpbnN0YW5jZW9mIEEpe2EuTj0zO2EuST1iO05hKGEpO3JldHVybn1pZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYyl7SWEoSGEoYyxiKSxhKTtyZXR1cm59fWEuTj0xO2EuST1iO05hKGEpfWNhdGNoKGQpe01hKGEsZCl9fWZ1bmN0aW9uIE1hKGEsYil7YS5OPTI7YS5JPWI7TmEoYSl9XG5mdW5jdGlvbiBOYShhKXsyPT09YS5OJiYwPT09YS5iYS5sZW5ndGgmJkthKGZ1bmN0aW9uKCl7YS5FYXx8XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBjb25zb2xlJiZjb25zb2xlJiZjb25zb2xlLndhcm4oXCJQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb246XCIsYS5JKX0pO2Zvcih2YXIgYj0wLGM9YS5iYS5sZW5ndGg7YjxjO2IrKylKYShhLGEuYmFbYl0pO2EuYmE9bnVsbH1mdW5jdGlvbiBPYShhLGIsYyl7dGhpcy5iYj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgYT9hOm51bGw7dGhpcy5jYj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgYj9iOm51bGw7dGhpcy5wcm9taXNlPWN9ZnVuY3Rpb24gSWEoYSxiKXt2YXIgYz0hMTt0cnl7YShmdW5jdGlvbihkKXtjfHwoYz0hMCxMYShiLGQpKX0sZnVuY3Rpb24oZCl7Y3x8KGM9ITAsTWEoYixkKSl9KX1jYXRjaChkKXtjfHwoYz0hMCxNYShiLGQpKX19XG5BLnByb3RvdHlwZVtcImNhdGNoXCJdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnRoZW4obnVsbCxhKX07QS5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihhLGIpe3ZhciBjPW5ldyB0aGlzLmNvbnN0cnVjdG9yKEdhKTtKYSh0aGlzLG5ldyBPYShhLGIsYykpO3JldHVybiBjfTtBLnByb3RvdHlwZVtcImZpbmFsbHlcIl09ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jb25zdHJ1Y3RvcjtyZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKGMpe3JldHVybiBiLnJlc29sdmUoYSgpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGN9KX0sZnVuY3Rpb24oYyl7cmV0dXJuIGIucmVzb2x2ZShhKCkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gYi5yZWplY3QoYyl9KX0pfTtcbmZ1bmN0aW9uIFBhKGEpe3JldHVybiBuZXcgQShmdW5jdGlvbihiLGMpe2Z1bmN0aW9uIGQoaCxrKXt0cnl7aWYoayYmKFwib2JqZWN0XCI9PT10eXBlb2Yga3x8XCJmdW5jdGlvblwiPT09dHlwZW9mIGspKXt2YXIgbD1rLnRoZW47aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGwpe2wuY2FsbChrLGZ1bmN0aW9uKG0pe2QoaCxtKX0sYyk7cmV0dXJufX1lW2hdPWs7MD09PS0tZiYmYihlKX1jYXRjaChtKXtjKG0pfX1pZighYXx8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiBhLmxlbmd0aClyZXR1cm4gYyhuZXcgVHlwZUVycm9yKFwiUHJvbWlzZS5hbGwgYWNjZXB0cyBhbiBhcnJheVwiKSk7dmFyIGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYSk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBiKFtdKTtmb3IodmFyIGY9ZS5sZW5ndGgsZz0wO2c8ZS5sZW5ndGg7ZysrKWQoZyxlW2ddKX0pfVxuZnVuY3Rpb24gUWEoYSl7cmV0dXJuIGEmJlwib2JqZWN0XCI9PT10eXBlb2YgYSYmYS5jb25zdHJ1Y3Rvcj09PUE/YTpuZXcgQShmdW5jdGlvbihiKXtiKGEpfSl9ZnVuY3Rpb24gUmEoYSl7cmV0dXJuIG5ldyBBKGZ1bmN0aW9uKGIsYyl7YyhhKX0pfWZ1bmN0aW9uIFNhKGEpe3JldHVybiBuZXcgQShmdW5jdGlvbihiLGMpe2lmKCFhfHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIGEubGVuZ3RoKXJldHVybiBjKG5ldyBUeXBlRXJyb3IoXCJQcm9taXNlLnJhY2UgYWNjZXB0cyBhbiBhcnJheVwiKSk7Zm9yKHZhciBkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKVFhKGFbZF0pLnRoZW4oYixjKX0pfXZhciBLYT1cImZ1bmN0aW9uXCI9PT10eXBlb2Ygc2V0SW1tZWRpYXRlJiZmdW5jdGlvbihhKXtzZXRJbW1lZGlhdGUoYSl9fHxmdW5jdGlvbihhKXtGYShhLDApfTsvKlxuXG5Db3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0XG5odHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdFxuaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZVxuZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXNcbnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnRcbmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuKi9cbmlmKCF3aW5kb3cuUHJvbWlzZSl7d2luZG93LlByb21pc2U9QTtBLnByb3RvdHlwZS50aGVuPUEucHJvdG90eXBlLnRoZW47QS5hbGw9UGE7QS5yYWNlPVNhO0EucmVzb2x2ZT1RYTtBLnJlamVjdD1SYTt2YXIgVGE9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIiksVmE9W107KG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPVZhLmxlbmd0aCxiPTA7YjxhO2IrKylWYVtiXSgpO1ZhLnNwbGljZSgwLGEpfSkpLm9ic2VydmUoVGEse2NoYXJhY3RlckRhdGE6ITB9KTtLYT1mdW5jdGlvbihhKXtWYS5wdXNoKGEpO1RhLnRleHRDb250ZW50PTA8VGEudGV4dENvbnRlbnQubGVuZ3RoP1wiXCI6XCJhXCJ9fTsvKlxuIENvcHlyaWdodCAoQykgMjAxNSBieSBXZWJSZWZsZWN0aW9uXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cblRIRSBTT0ZUV0FSRS5cblxuKi9cbihmdW5jdGlvbihhLGIpe2lmKCEoYiBpbiBhKSl7dmFyIGM9dHlwZW9mIGdsb2JhbD09PXR5cGVvZiBjP3dpbmRvdzpnbG9iYWwsZD0wLGU9U3RyaW5nKE1hdGgucmFuZG9tKCkpLGY9XCJfX1xcdTAwMDFzeW1ib2xAQFwiK2UsZz1hLmdldE93blByb3BlcnR5TmFtZXMsaD1hLmdldE93blByb3BlcnR5RGVzY3JpcHRvcixrPWEuY3JlYXRlLGw9YS5rZXlzLG09YS5mcmVlemV8fGEscT1hLmRlZmluZVByb3BlcnR5LEg9YS5kZWZpbmVQcm9wZXJ0aWVzLEM9aChhLFwiZ2V0T3duUHJvcGVydHlOYW1lc1wiKSx0PWEucHJvdG90eXBlLEY9dC5oYXNPd25Qcm9wZXJ0eSxFPXQucHJvcGVydHlJc0VudW1lcmFibGUsTT10LnRvU3RyaW5nLHk9ZnVuY3Rpb24oSSx1LEcpe0YuY2FsbChJLGYpfHxxKEksZix7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6e319KTtJW2ZdW1wiQEBcIit1XT1HfSxXPWZ1bmN0aW9uKEksdSl7dmFyIEc9ayhJKTtnKHUpLmZvckVhY2goZnVuY3Rpb24ocCl7c2EuY2FsbCh1LFxucCkmJlVhKEcscCx1W3BdKX0pO3JldHVybiBHfSx3PWZ1bmN0aW9uKCl7fSx0YT1mdW5jdGlvbihJKXtyZXR1cm4gSSE9ZiYmIUYuY2FsbChmYSxJKX0saGE9ZnVuY3Rpb24oSSl7cmV0dXJuIEkhPWYmJkYuY2FsbChmYSxJKX0sc2E9ZnVuY3Rpb24oSSl7dmFyIHU9U3RyaW5nKEkpO3JldHVybiBoYSh1KT9GLmNhbGwodGhpcyx1KSYmISF0aGlzW2ZdJiZ0aGlzW2ZdW1wiQEBcIit1XTpFLmNhbGwodGhpcyxJKX0sbj1mdW5jdGlvbihJKXtxKHQsSSx7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsZ2V0Oncsc2V0OmZ1bmN0aW9uKHUpe3dhKHRoaXMsSSx7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dX0pO3kodGhpcyxJLCEwKX19KTtmYVtJXT1xKGEoSSksXCJjb25zdHJ1Y3RvclwiLGdjKTtyZXR1cm4gbShmYVtJXSl9LEo9ZnVuY3Rpb24gRyh1KXtpZih0aGlzIGluc3RhbmNlb2YgRyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yXCIpO1xucmV0dXJuIG4oXCJfX1xcdTAwMDFzeW1ib2w6XCIuY29uY2F0KHV8fFwiXCIsZSwrK2QpKX0sZmE9ayhudWxsKSxnYz17dmFsdWU6Sn0sZmI9ZnVuY3Rpb24odSl7cmV0dXJuIGZhW3VdfSxVYT1mdW5jdGlvbih1LEcscCl7dmFyIHI9U3RyaW5nKEcpO2lmKGhhKHIpKXtHPXdhO2lmKHAuZW51bWVyYWJsZSl7dmFyIEI9ayhwKTtCLmVudW1lcmFibGU9ITF9ZWxzZSBCPXA7Ryh1LHIsQik7eSh1LHIsISFwLmVudW1lcmFibGUpfWVsc2UgcSh1LEcscCk7cmV0dXJuIHV9LGdiPWZ1bmN0aW9uKHUpe3JldHVybiBnKHUpLmZpbHRlcihoYSkubWFwKGZiKX07Qy52YWx1ZT1VYTtxKGEsXCJkZWZpbmVQcm9wZXJ0eVwiLEMpO0MudmFsdWU9Z2I7cShhLGIsQyk7Qy52YWx1ZT1mdW5jdGlvbih1KXtyZXR1cm4gZyh1KS5maWx0ZXIodGEpfTtxKGEsXCJnZXRPd25Qcm9wZXJ0eU5hbWVzXCIsQyk7Qy52YWx1ZT1mdW5jdGlvbih1LEcpe3ZhciBwPWdiKEcpO3AubGVuZ3RoP2woRykuY29uY2F0KHApLmZvckVhY2goZnVuY3Rpb24ocil7c2EuY2FsbChHLFxucikmJlVhKHUscixHW3JdKX0pOkgodSxHKTtyZXR1cm4gdX07cShhLFwiZGVmaW5lUHJvcGVydGllc1wiLEMpO0MudmFsdWU9c2E7cSh0LFwicHJvcGVydHlJc0VudW1lcmFibGVcIixDKTtDLnZhbHVlPUo7cShjLFwiU3ltYm9sXCIsQyk7Qy52YWx1ZT1mdW5jdGlvbih1KXt1PVwiX19cXHUwMDAxc3ltYm9sOlwiLmNvbmNhdChcIl9fXFx1MDAwMXN5bWJvbDpcIix1LGUpO3JldHVybiB1IGluIHQ/ZmFbdV06bih1KX07cShKLFwiZm9yXCIsQyk7Qy52YWx1ZT1mdW5jdGlvbih1KXtpZih0YSh1KSl0aHJvdyBuZXcgVHlwZUVycm9yKHUrXCIgaXMgbm90IGEgc3ltYm9sXCIpO2lmKEYuY2FsbChmYSx1KSYmKHU9dS5zbGljZSgxMCksXCJfX1xcdTAwMDFzeW1ib2w6XCI9PT11LnNsaWNlKDAsMTApJiYodT11LnNsaWNlKDEwKSx1IT09ZSkpKXJldHVybiB1PXUuc2xpY2UoMCx1Lmxlbmd0aC1lLmxlbmd0aCksMDx1Lmxlbmd0aD91OnZvaWQgMH07cShKLFwia2V5Rm9yXCIsQyk7Qy52YWx1ZT1mdW5jdGlvbih1LEcpe3ZhciBwPVxuaCh1LEcpO3AmJmhhKEcpJiYocC5lbnVtZXJhYmxlPXNhLmNhbGwodSxHKSk7cmV0dXJuIHB9O3EoYSxcImdldE93blByb3BlcnR5RGVzY3JpcHRvclwiLEMpO0MudmFsdWU9ZnVuY3Rpb24odSxHKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGh8fFwidW5kZWZpbmVkXCI9PT10eXBlb2YgRz9rKHUpOlcodSxHKX07cShhLFwiY3JlYXRlXCIsQyk7Qy52YWx1ZT1mdW5jdGlvbigpe3ZhciB1PU0uY2FsbCh0aGlzKTtyZXR1cm5cIltvYmplY3QgU3RyaW5nXVwiPT09dSYmaGEodGhpcyk/XCJbb2JqZWN0IFN5bWJvbF1cIjp1fTtxKHQsXCJ0b1N0cmluZ1wiLEMpO3RyeXtpZighMD09PWsocSh7fSxcIl9fXFx1MDAwMXN5bWJvbDpcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHEodGhpcyxcIl9fXFx1MDAwMXN5bWJvbDpcIix7dmFsdWU6ITB9KVtcIl9fXFx1MDAwMXN5bWJvbDpcIl19fSkpW1wiX19cXHUwMDAxc3ltYm9sOlwiXSl2YXIgd2E9cTtlbHNlIHRocm93XCJJRTExXCI7fWNhdGNoKHUpe3dhPWZ1bmN0aW9uKEcscCxyKXt2YXIgQj1cbmgodCxwKTtkZWxldGUgdFtwXTtxKEcscCxyKTtxKHQscCxCKX19fX0pKE9iamVjdCxcImdldE93blByb3BlcnR5U3ltYm9sc1wiKTtcbihmdW5jdGlvbihhLGIpe3ZhciBjPWEuZGVmaW5lUHJvcGVydHksZD1hLnByb3RvdHlwZSxlPWQudG9TdHJpbmcsZjtcIml0ZXJhdG9yIG1hdGNoIHJlcGxhY2Ugc2VhcmNoIHNwbGl0IGhhc0luc3RhbmNlIGlzQ29uY2F0U3ByZWFkYWJsZSB1bnNjb3BhYmxlcyBzcGVjaWVzIHRvUHJpbWl0aXZlIHRvU3RyaW5nVGFnXCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oZyl7ZyBpbiBifHwoYyhiLGcse3ZhbHVlOmIoZyl9KSxcInRvU3RyaW5nVGFnXCI9PT1nJiYoZj1hLmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLFwidG9TdHJpbmdcIiksZi52YWx1ZT1mdW5jdGlvbigpe3ZhciBoPWUuY2FsbCh0aGlzKSxrPW51bGw9PXRoaXM/dGhpczp0aGlzW2IudG9TdHJpbmdUYWddO3JldHVybiBudWxsPT1rP2g6XCJbb2JqZWN0IFwiK2srXCJdXCJ9LGMoZCxcInRvU3RyaW5nXCIsZikpKX0pfSkoT2JqZWN0LFN5bWJvbCk7XG4oZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoKXtyZXR1cm4gdGhpc31iW2FdfHwoYlthXT1mdW5jdGlvbigpe3ZhciBlPTAsZj10aGlzLGc9e25leHQ6ZnVuY3Rpb24oKXt2YXIgaD1mLmxlbmd0aDw9ZTtyZXR1cm4gaD97ZG9uZTpofTp7ZG9uZTpoLHZhbHVlOmZbZSsrXX19fTtnW2FdPWQ7cmV0dXJuIGd9KTtjW2FdfHwoY1thXT1mdW5jdGlvbigpe3ZhciBlPVN0cmluZy5mcm9tQ29kZVBvaW50LGY9dGhpcyxnPTAsaD1mLmxlbmd0aCxrPXtuZXh0OmZ1bmN0aW9uKCl7dmFyIGw9aDw9ZyxtPWw/XCJcIjplKGYuY29kZVBvaW50QXQoZykpO2crPW0ubGVuZ3RoO3JldHVybiBsP3tkb25lOmx9Ontkb25lOmwsdmFsdWU6bX19fTtrW2FdPWQ7cmV0dXJuIGt9KX0pKFN5bWJvbC5pdGVyYXRvcixBcnJheS5wcm90b3R5cGUsU3RyaW5nLnByb3RvdHlwZSk7LypcblxuQ29weXJpZ2h0IChjKSAyMDE4IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdFxuaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXRcbmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmVcbmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzXG5wYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50XG5mb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiovXG52YXIgV2E9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXM/XCJbb2JqZWN0IFVuZGVmaW5lZF1cIjpudWxsPT09dGhpcz9cIltvYmplY3QgTnVsbF1cIjpXYS5jYWxsKHRoaXMpfTtPYmplY3Qua2V5cz1mdW5jdGlvbihhKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybihiPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxiKSkmJmIuZW51bWVyYWJsZX0pfTtcblN0cmluZy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSYmU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdHx8KFN0cmluZy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbiBYYSgpe3ZhciBiLGM9dGhpcztyZXR1cm4gRWEoWGEsZnVuY3Rpb24oZCl7MT09ZC5nJiYoYj0wKTtpZigzIT1kLmcpcmV0dXJuIGI8Yy5sZW5ndGg/ZD15YShkLGNbYl0pOihkLmc9MCxkPXZvaWQgMCksZDtiKys7ZC5nPTJ9KX0pO1NldC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXXx8KFNldC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbiBZYSgpe3ZhciBiLGM9dGhpcyxkO3JldHVybiBFYShZYSxmdW5jdGlvbihlKXsxPT1lLmcmJihiPVtdLGMuZm9yRWFjaChmdW5jdGlvbihmKXtiLnB1c2goZil9KSxkPTApO2lmKDMhPWUuZylyZXR1cm4gZDxiLmxlbmd0aD9lPXlhKGUsYltkXSk6KGUuZz0wLGU9dm9pZCAwKSxlO2QrKztlLmc9Mn0pfSk7XG5NYXAucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl18fChNYXAucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24gWmEoKXt2YXIgYixjPXRoaXMsZDtyZXR1cm4gRWEoWmEsZnVuY3Rpb24oZSl7MT09ZS5nJiYoYj1bXSxjLmZvckVhY2goZnVuY3Rpb24oZixnKXtiLnB1c2goW2csZl0pfSksZD0wKTtpZigzIT1lLmcpcmV0dXJuIGQ8Yi5sZW5ndGg/ZT15YShlLGJbZF0pOihlLmc9MCxlPXZvaWQgMCksZTtkKys7ZS5nPTJ9KX0pOy8qXG5cbkNvcHlyaWdodCAoYykgMjAyMCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5UaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG5UaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG5Db2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiovXG52YXIgJGE9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTskYS5pbml0RXZlbnQoXCJmb29cIiwhMCwhMCk7JGEucHJldmVudERlZmF1bHQoKTtpZighJGEuZGVmYXVsdFByZXZlbnRlZCl7dmFyIGFiPUV2ZW50LnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdDtFdmVudC5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGFibGUmJihhYi5jYWxsKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZGVmYXVsdFByZXZlbnRlZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sY29uZmlndXJhYmxlOiEwfSkpfX12YXIgYmI9L1RyaWRlbnQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5pZighd2luZG93LkV2ZW50fHxiYiYmXCJmdW5jdGlvblwiIT09dHlwZW9mIHdpbmRvdy5FdmVudCl7dmFyIGNiPXdpbmRvdy5FdmVudDt3aW5kb3cuRXZlbnQ9ZnVuY3Rpb24oYSxiKXtiPWJ8fHt9O3ZhciBjPWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7Yy5pbml0RXZlbnQoYSwhIWIuYnViYmxlcywhIWIuY2FuY2VsYWJsZSk7cmV0dXJuIGN9O2lmKGNiKXtmb3IodmFyIGRiIGluIGNiKXdpbmRvdy5FdmVudFtkYl09Y2JbZGJdO3dpbmRvdy5FdmVudC5wcm90b3R5cGU9Y2IucHJvdG90eXBlfX1cbmlmKCF3aW5kb3cuQ3VzdG9tRXZlbnR8fGJiJiZcImZ1bmN0aW9uXCIhPT10eXBlb2Ygd2luZG93LkN1c3RvbUV2ZW50KXdpbmRvdy5DdXN0b21FdmVudD1mdW5jdGlvbihhLGIpe2I9Ynx8e307dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJDdXN0b21FdmVudFwiKTtjLmluaXRDdXN0b21FdmVudChhLCEhYi5idWJibGVzLCEhYi5jYW5jZWxhYmxlLGIuZGV0YWlsKTtyZXR1cm4gY30sd2luZG93LkN1c3RvbUV2ZW50LnByb3RvdHlwZT13aW5kb3cuRXZlbnQucHJvdG90eXBlO1xuaWYoIXdpbmRvdy5Nb3VzZUV2ZW50fHxiYiYmXCJmdW5jdGlvblwiIT09dHlwZW9mIHdpbmRvdy5Nb3VzZUV2ZW50KXt2YXIgZWI9d2luZG93Lk1vdXNlRXZlbnQ7d2luZG93Lk1vdXNlRXZlbnQ9ZnVuY3Rpb24oYSxiKXtiPWJ8fHt9O3ZhciBjPWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiTW91c2VFdmVudFwiKTtjLmluaXRNb3VzZUV2ZW50KGEsISFiLmJ1YmJsZXMsISFiLmNhbmNlbGFibGUsYi52aWV3fHx3aW5kb3csYi5kZXRhaWwsYi5zY3JlZW5YLGIuc2NyZWVuWSxiLmNsaWVudFgsYi5jbGllbnRZLGIuY3RybEtleSxiLmFsdEtleSxiLnNoaWZ0S2V5LGIubWV0YUtleSxiLmJ1dHRvbixiLnJlbGF0ZWRUYXJnZXQpO3JldHVybiBjfTtpZihlYilmb3IodmFyIGhiIGluIGViKXdpbmRvdy5Nb3VzZUV2ZW50W2hiXT1lYltoYl07d2luZG93Lk1vdXNlRXZlbnQucHJvdG90eXBlPWViLnByb3RvdHlwZX07T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihOb2RlLnByb3RvdHlwZSxcImJhc2VVUklcIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSxcImJhc2VVUklcIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIGE9KHRoaXMub3duZXJEb2N1bWVudHx8dGhpcykucXVlcnlTZWxlY3RvcihcImJhc2VbaHJlZl1cIik7cmV0dXJuIGEmJmEuaHJlZnx8d2luZG93LmxvY2F0aW9uLmhyZWZ9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSk7LypcblxuQ29weXJpZ2h0IChjKSAyMDIwIFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdFxuaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXRcbmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmVcbmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzXG5wYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50XG5mb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiovXG52YXIgaWIsamIsa2I9RWxlbWVudC5wcm90b3R5cGUsbmI9bnVsbCE9PShpYj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGtiLFwiYXR0cmlidXRlc1wiKSkmJnZvaWQgMCE9PWliP2liOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTm9kZS5wcm90b3R5cGUsXCJhdHRyaWJ1dGVzXCIpLG9iPW51bGwhPT0oamI9bnVsbD09PW5ifHx2b2lkIDA9PT1uYj92b2lkIDA6bmIuZ2V0KSYmdm9pZCAwIT09amI/amI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzfSxwYj1BcnJheS5wcm90b3R5cGUubWFwO2tiLmhhc093blByb3BlcnR5KFwiZ2V0QXR0cmlidXRlTmFtZXNcIil8fChrYi5nZXRBdHRyaWJ1dGVOYW1lcz1mdW5jdGlvbigpe3JldHVybiBwYi5jYWxsKG9iLmNhbGwodGhpcyksZnVuY3Rpb24oYSl7cmV0dXJuIGEubmFtZX0pfSk7dmFyIHFiLHJiPUVsZW1lbnQucHJvdG90eXBlO3JiLmhhc093blByb3BlcnR5KFwibWF0Y2hlc1wiKXx8KHJiLm1hdGNoZXM9bnVsbCE9PShxYj1yYi53ZWJraXRNYXRjaGVzU2VsZWN0b3IpJiZ2b2lkIDAhPT1xYj9xYjpyYi5tc01hdGNoZXNTZWxlY3Rvcik7dmFyIHNiPU5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkO2Z1bmN0aW9uIHRiKGEpe2E9YS5wcm90b3R5cGU7YS5oYXNPd25Qcm9wZXJ0eShcImFwcGVuZFwiKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsXCJhcHBlbmRcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oYil7Zm9yKHZhciBjPVtdLGQ9MDtkPGFyZ3VtZW50cy5sZW5ndGg7KytkKWNbZF09YXJndW1lbnRzW2RdO2M9a2EoYyk7Zm9yKGQ9Yy5uZXh0KCk7IWQuZG9uZTtkPWMubmV4dCgpKWQ9ZC52YWx1ZSxzYi5jYWxsKHRoaXMsXCJzdHJpbmdcIj09PXR5cGVvZiBkP2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKGQpOmQpfX0pfXRiKERvY3VtZW50KTt0YihEb2N1bWVudEZyYWdtZW50KTt0YihFbGVtZW50KTt2YXIgdWIsdmIsd2I9Tm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlLHhiPW51bGwhPT0odmI9bnVsbD09PSh1Yj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE5vZGUucHJvdG90eXBlLFwiZmlyc3RDaGlsZFwiKSl8fHZvaWQgMD09PXViP3ZvaWQgMDp1Yi5nZXQpJiZ2b2lkIDAhPT12Yj92YjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0Q2hpbGR9O1xuZnVuY3Rpb24geWIoYSl7YT1hLnByb3RvdHlwZTthLmhhc093blByb3BlcnR5KFwicHJlcGVuZFwiKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsXCJwcmVwZW5kXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ1bmN0aW9uKGIpe2Zvcih2YXIgYz1bXSxkPTA7ZDxhcmd1bWVudHMubGVuZ3RoOysrZCljW2RdPWFyZ3VtZW50c1tkXTtkPXhiLmNhbGwodGhpcyk7Yz1rYShjKTtmb3IodmFyIGU9Yy5uZXh0KCk7IWUuZG9uZTtlPWMubmV4dCgpKWU9ZS52YWx1ZSx3Yi5jYWxsKHRoaXMsXCJzdHJpbmdcIj09PXR5cGVvZiBlP2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpOmUsZCl9fSl9eWIoRG9jdW1lbnQpO3liKERvY3VtZW50RnJhZ21lbnQpO3liKEVsZW1lbnQpO3ZhciB6YixBYixCYj1Ob2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZCxDYj1Ob2RlLnByb3RvdHlwZS5yZW1vdmVDaGlsZCxEYj1udWxsIT09KEFiPW51bGw9PT0oemI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihOb2RlLnByb3RvdHlwZSxcImZpcnN0Q2hpbGRcIikpfHx2b2lkIDA9PT16Yj92b2lkIDA6emIuZ2V0KSYmdm9pZCAwIT09QWI/QWI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maXJzdENoaWxkfTtcbmZ1bmN0aW9uIEViKGEpe2E9YS5wcm90b3R5cGU7YS5oYXNPd25Qcm9wZXJ0eShcInJlcGxhY2VDaGlsZHJlblwiKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsXCJyZXBsYWNlQ2hpbGRyZW5cIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oYil7Zm9yKHZhciBjPVtdLGQ9MDtkPGFyZ3VtZW50cy5sZW5ndGg7KytkKWNbZF09YXJndW1lbnRzW2RdO2Zvcig7bnVsbCE9PShkPURiLmNhbGwodGhpcykpOylDYi5jYWxsKHRoaXMsZCk7Yz1rYShjKTtmb3IoZD1jLm5leHQoKTshZC5kb25lO2Q9Yy5uZXh0KCkpZD1kLnZhbHVlLEJiLmNhbGwodGhpcyxcInN0cmluZ1wiPT09dHlwZW9mIGQ/ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZCk6ZCl9fSl9RWIoRG9jdW1lbnQpO0ViKERvY3VtZW50RnJhZ21lbnQpO0ViKEVsZW1lbnQpO3ZhciBGYixHYixIYixJYixKYj1Ob2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmUsS2I9bnVsbCE9PShHYj1udWxsPT09KEZiPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTm9kZS5wcm90b3R5cGUsXCJwYXJlbnROb2RlXCIpKXx8dm9pZCAwPT09RmI/dm9pZCAwOkZiLmdldCkmJnZvaWQgMCE9PUdiP0diOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX0sTGI9bnVsbCE9PShJYj1udWxsPT09KEhiPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTm9kZS5wcm90b3R5cGUsXCJuZXh0U2libGluZ1wiKSl8fHZvaWQgMD09PUhiP3ZvaWQgMDpIYi5nZXQpJiZ2b2lkIDAhPT1JYj9JYjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHRTaWJsaW5nfTtcbmZ1bmN0aW9uIE1iKGEpe2E9YS5wcm90b3R5cGU7YS5oYXNPd25Qcm9wZXJ0eShcImFmdGVyXCIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcImFmdGVyXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ1bmN0aW9uKGIpe2Zvcih2YXIgYz1bXSxkPTA7ZDxhcmd1bWVudHMubGVuZ3RoOysrZCljW2RdPWFyZ3VtZW50c1tkXTtkPUtiLmNhbGwodGhpcyk7aWYobnVsbCE9PWQpe3ZhciBlPUxiLmNhbGwodGhpcyk7Yz1rYShjKTtmb3IodmFyIGY9Yy5uZXh0KCk7IWYuZG9uZTtmPWMubmV4dCgpKWY9Zi52YWx1ZSxKYi5jYWxsKGQsXCJzdHJpbmdcIj09PXR5cGVvZiBmP2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKGYpOmYsZSl9fX0pfU1iKENoYXJhY3RlckRhdGEpO01iKEVsZW1lbnQpO3ZhciBOYixPYixQYj1Ob2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmUsUWI9bnVsbCE9PShPYj1udWxsPT09KE5iPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTm9kZS5wcm90b3R5cGUsXCJwYXJlbnROb2RlXCIpKXx8dm9pZCAwPT09TmI/dm9pZCAwOk5iLmdldCkmJnZvaWQgMCE9PU9iP09iOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX07XG5mdW5jdGlvbiBSYihhKXthPWEucHJvdG90eXBlO2EuaGFzT3duUHJvcGVydHkoXCJiZWZvcmVcIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwiYmVmb3JlXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ1bmN0aW9uKGIpe2Zvcih2YXIgYz1bXSxkPTA7ZDxhcmd1bWVudHMubGVuZ3RoOysrZCljW2RdPWFyZ3VtZW50c1tkXTtkPVFiLmNhbGwodGhpcyk7aWYobnVsbCE9PWQpe2M9a2EoYyk7Zm9yKHZhciBlPWMubmV4dCgpOyFlLmRvbmU7ZT1jLm5leHQoKSllPWUudmFsdWUsUGIuY2FsbChkLFwic3RyaW5nXCI9PT10eXBlb2YgZT9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKTplLHRoaXMpfX19KX1SYihDaGFyYWN0ZXJEYXRhKTtSYihFbGVtZW50KTt2YXIgU2IsVGIsVWI9Tm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQsVmI9bnVsbCE9PShUYj1udWxsPT09KFNiPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTm9kZS5wcm90b3R5cGUsXCJwYXJlbnROb2RlXCIpKXx8dm9pZCAwPT09U2I/dm9pZCAwOlNiLmdldCkmJnZvaWQgMCE9PVRiP1RiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX07ZnVuY3Rpb24gV2IoYSl7YT1hLnByb3RvdHlwZTthLmhhc093blByb3BlcnR5KFwicmVtb3ZlXCIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcInJlbW92ZVwiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpmdW5jdGlvbigpe3ZhciBiPVZiLmNhbGwodGhpcyk7YiYmVWIuY2FsbChiLHRoaXMpfX0pfVdiKENoYXJhY3RlckRhdGEpO1diKEVsZW1lbnQpO3ZhciBYYixZYixaYj1Ob2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmUsJGI9Tm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQsYWM9bnVsbCE9PShZYj1udWxsPT09KFhiPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTm9kZS5wcm90b3R5cGUsXCJwYXJlbnROb2RlXCIpKXx8dm9pZCAwPT09WGI/dm9pZCAwOlhiLmdldCkmJnZvaWQgMCE9PVliP1liOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX07XG5mdW5jdGlvbiBiYyhhKXthPWEucHJvdG90eXBlO2EuaGFzT3duUHJvcGVydHkoXCJyZXBsYWNlV2l0aFwiKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsXCJyZXBsYWNlV2l0aFwiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpmdW5jdGlvbihiKXtmb3IodmFyIGM9W10sZD0wO2Q8YXJndW1lbnRzLmxlbmd0aDsrK2QpY1tkXT1hcmd1bWVudHNbZF07ZD1hYy5jYWxsKHRoaXMpO2lmKG51bGwhPT1kKXtjPWthKGMpO2Zvcih2YXIgZT1jLm5leHQoKTshZS5kb25lO2U9Yy5uZXh0KCkpZT1lLnZhbHVlLFpiLmNhbGwoZCxcInN0cmluZ1wiPT09dHlwZW9mIGU/ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSk6ZSx0aGlzKTskYi5jYWxsKGQsdGhpcyl9fX0pfWJjKENoYXJhY3RlckRhdGEpO2JjKEVsZW1lbnQpO3ZhciBjYz13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUsZGM9d2luZG93LkhUTUxFbGVtZW50LnByb3RvdHlwZSxlYz13aW5kb3cuU1ZHRWxlbWVudC5wcm90b3R5cGU7IWRjLmhhc093blByb3BlcnR5KFwiY2xhc3NMaXN0XCIpfHxjYy5oYXNPd25Qcm9wZXJ0eShcImNsYXNzTGlzdFwiKXx8ZWMuaGFzT3duUHJvcGVydHkoXCJjbGFzc0xpc3RcIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjYyxcImNsYXNzTGlzdFwiLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZGMsXCJjbGFzc0xpc3RcIikpOy8qXG5cbiBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdFxuIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kXG4gYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heVxuIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnlcbiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQXG4gcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuKi9cbnZhciBmYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7ZmMudGV4dENvbnRlbnQ9XCJib2R5IHt0cmFuc2l0aW9uOiBvcGFjaXR5IGVhc2UtaW4gMC4yczsgfSBcXG5ib2R5W3VucmVzb2x2ZWRdIHtvcGFjaXR5OiAwOyBkaXNwbGF5OiBibG9jazsgb3ZlcmZsb3c6IGhpZGRlbjsgcG9zaXRpb246IHJlbGF0aXZlOyB9IFxcblwiO3ZhciBoYz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaGVhZFwiKTtoYy5pbnNlcnRCZWZvcmUoZmMsaGMuZmlyc3RDaGlsZCk7dmFyIGljPXdpbmRvdztpYy5XZWJDb21wb25lbnRzPWljLldlYkNvbXBvbmVudHN8fHtmbGFnczp7fX07dmFyIGpjPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NjcmlwdFtzcmMqPVwid2ViY29tcG9uZW50cy1idW5kbGVcIl0nKSxrYz0vd2MtKC4rKS8sbGM9e307aWYoIWxjLm5vT3B0cyl7bG9jYXRpb24uc2VhcmNoLnNsaWNlKDEpLnNwbGl0KFwiJlwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2E9YS5zcGxpdChcIj1cIik7dmFyIGI7YVswXSYmKGI9YVswXS5tYXRjaChrYykpJiYobGNbYlsxXV09YVsxXXx8ITApfSk7aWYoamMpZm9yKHZhciBtYz0wLG5jPXZvaWQgMDtuYz1qYy5hdHRyaWJ1dGVzW21jXTttYysrKVwic3JjXCIhPT1uYy5uYW1lJiYobGNbbmMubmFtZV09bmMudmFsdWV8fCEwKTt2YXIgb2M9e307bGMubG9nJiZsYy5sb2cuc3BsaXQmJmxjLmxvZy5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbihhKXtvY1thXT0hMH0pO2xjLmxvZz1vY31cbmljLldlYkNvbXBvbmVudHMuZmxhZ3M9bGM7dmFyIHBjPWxjLnNoYWR5ZG9tO2lmKHBjKXtpYy5TaGFkeURPTT1pYy5TaGFkeURPTXx8e307aWMuU2hhZHlET00uZm9yY2U9cGM7dmFyIHFjPWxjLm5vUGF0Y2g7aWMuU2hhZHlET00ubm9QYXRjaD1cInRydWVcIj09PXFjPyEwOnFjfXZhciByYz1sYy5yZWdpc3Rlcnx8bGMuY2U7cmMmJndpbmRvdy5jdXN0b21FbGVtZW50cyYmKGljLmN1c3RvbUVsZW1lbnRzLmZvcmNlUG9seWZpbGw9cmMpOy8qXG5cbiBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiovXG4oZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7fWZ1bmN0aW9uIGIocCxyKXtpZighcC5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm5bXTtzd2l0Y2gocC5ub2RlVHlwZSl7Y2FzZSBOb2RlLkRPQ1VNRU5UX05PREU6cmV0dXJuIEYuY2FsbChwLHIpO2Nhc2UgTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFOnJldHVybiBFLmNhbGwocCxyKTtkZWZhdWx0OnJldHVybiB0LmNhbGwocCxyKX19dmFyIGM9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiBIVE1MVGVtcGxhdGVFbGVtZW50LGQ9IShkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuY2xvbmVOb2RlKClpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpLGU9ITE7L1RyaWRlbnQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJmZ1bmN0aW9uKCl7ZnVuY3Rpb24gcCh6LFIpe2lmKHogaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KWZvcih2YXIgbGI7bGI9ei5maXJzdENoaWxkOylCLmNhbGwodGhpcyxsYixSKTtlbHNlIEIuY2FsbCh0aGlzLFxueixSKTtyZXR1cm4gen1lPSEwO3ZhciByPU5vZGUucHJvdG90eXBlLmNsb25lTm9kZTtOb2RlLnByb3RvdHlwZS5jbG9uZU5vZGU9ZnVuY3Rpb24oeil7ej1yLmNhbGwodGhpcyx6KTt0aGlzIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCYmKHouX19wcm90b19fPURvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlKTtyZXR1cm4gen07RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbD1IVE1MRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbDtEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yPUhUTUxFbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLHtub2RlVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERX0sY29uZmlndXJhYmxlOiEwfSxsb2NhbE5hbWU6e2dldDpmdW5jdGlvbigpe30sXG5jb25maWd1cmFibGU6ITB9LG5vZGVOYW1lOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5cIiNkb2N1bWVudC1mcmFnbWVudFwifSxjb25maWd1cmFibGU6ITB9fSk7dmFyIEI9Tm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlO05vZGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1wO3ZhciBLPU5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkO05vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKHope3ogaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50P3AuY2FsbCh0aGlzLHosbnVsbCk6Sy5jYWxsKHRoaXMseik7cmV0dXJuIHp9O3ZhciBhYT1Ob2RlLnByb3RvdHlwZS5yZW1vdmVDaGlsZCxsYT1Ob2RlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQ7Tm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkPWZ1bmN0aW9uKHosUil7eiBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQ/KHAuY2FsbCh0aGlzLHosUiksYWEuY2FsbCh0aGlzLFIpKTpsYS5jYWxsKHRoaXMseixSKTtyZXR1cm4gUn07RG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ9XG5mdW5jdGlvbigpe3ZhciB6PXRoaXMuY3JlYXRlRWxlbWVudChcImRmXCIpO3ouX19wcm90b19fPURvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlO3JldHVybiB6fTt2YXIgdmE9RG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGU7RG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGU9ZnVuY3Rpb24oeixSKXtSPXZhLmNhbGwodGhpcyx6LFJ8fCExKTt6IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCYmKFIuX19wcm90b19fPURvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlKTtyZXR1cm4gUn19KCk7dmFyIGY9Tm9kZS5wcm90b3R5cGUuY2xvbmVOb2RlLGc9RG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQsaD1Eb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZSxrPU5vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkLGw9Tm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQsbT1Ob2RlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQscT1ET01QYXJzZXIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZyxcbkg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3cuSFRNTEVsZW1lbnQucHJvdG90eXBlLFwiaW5uZXJIVE1MXCIpfHx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5uZXJIVE1MfSxzZXQ6ZnVuY3Rpb24ocCl7dGhpcy5pbm5lckhUTUw9cH19LEM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3cuTm9kZS5wcm90b3R5cGUsXCJjaGlsZE5vZGVzXCIpfHx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlc319LHQ9RWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbCxGPURvY3VtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsLEU9RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbCxNPWZ1bmN0aW9uKCl7aWYoIWMpe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG5wLmNvbnRlbnQuYXBwZW5kQ2hpbGQocik7cD1wLmNsb25lTm9kZSghMCk7cmV0dXJuIDA9PT1wLmNvbnRlbnQuY2hpbGROb2Rlcy5sZW5ndGh8fDA9PT1wLmNvbnRlbnQuZmlyc3RDaGlsZC5jb250ZW50LmNoaWxkTm9kZXMubGVuZ3RofHxkfX0oKTtpZihjKXt2YXIgeT1kb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoXCJ0ZW1wbGF0ZVwiKSxXPSEwLHc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO3cudGV4dENvbnRlbnQ9XCJ0ZW1wbGF0ZXtkaXNwbGF5Om5vbmU7fVwiO3ZhciB0YT1kb2N1bWVudC5oZWFkO3RhLmluc2VydEJlZm9yZSh3LHRhLmZpcnN0RWxlbWVudENoaWxkKTthLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSk7dmFyIGhhPSFkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLmhhc093blByb3BlcnR5KFwiaW5uZXJIVE1MXCIpO2EuWj1mdW5jdGlvbihwKXtpZighcC5jb250ZW50JiZwLm5hbWVzcGFjZVVSST09PVxuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSSl7cC5jb250ZW50PXkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2Zvcih2YXIgcjtyPXAuZmlyc3RDaGlsZDspbC5jYWxsKHAuY29udGVudCxyKTtpZihoYSlwLl9fcHJvdG9fXz1hLnByb3RvdHlwZTtlbHNlIGlmKHAuY2xvbmVOb2RlPWZ1bmN0aW9uKEIpe3JldHVybiBhLnNhKHRoaXMsQil9LFcpdHJ5e24ocCksSihwKX1jYXRjaChCKXtXPSExfWEuYm9vdHN0cmFwKHAuY29udGVudCl9fTt2YXIgc2E9e29wdGlvbjpbXCJzZWxlY3RcIl0sdGhlYWQ6W1widGFibGVcIl0sY29sOltcImNvbGdyb3VwXCIsXCJ0YWJsZVwiXSx0cjpbXCJ0Ym9keVwiLFwidGFibGVcIl0sdGg6W1widHJcIixcInRib2R5XCIsXCJ0YWJsZVwiXSx0ZDpbXCJ0clwiLFwidGJvZHlcIixcInRhYmxlXCJdfSxuPWZ1bmN0aW9uKHApe09iamVjdC5kZWZpbmVQcm9wZXJ0eShwLFwiaW5uZXJIVE1MXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB3YSh0aGlzKX0sc2V0OmZ1bmN0aW9uKHIpe3ZhciBCPVxuc2FbKC88KFthLXpdW14vXFwwPlxceDIwXFx0XFxyXFxuXFxmXSspL2kuZXhlYyhyKXx8W1wiXCIsXCJcIl0pWzFdLnRvTG93ZXJDYXNlKCldO2lmKEIpZm9yKHZhciBLPTA7SzxCLmxlbmd0aDtLKyspcj1cIjxcIitCW0tdK1wiPlwiK3IrXCI8L1wiK0JbS10rXCI+XCI7eS5ib2R5LmlubmVySFRNTD1yO2ZvcihhLmJvb3RzdHJhcCh5KTt0aGlzLmNvbnRlbnQuZmlyc3RDaGlsZDspay5jYWxsKHRoaXMuY29udGVudCx0aGlzLmNvbnRlbnQuZmlyc3RDaGlsZCk7cj15LmJvZHk7aWYoQilmb3IoSz0wO0s8Qi5sZW5ndGg7SysrKXI9ci5sYXN0Q2hpbGQ7Zm9yKDtyLmZpcnN0Q2hpbGQ7KWwuY2FsbCh0aGlzLmNvbnRlbnQsci5maXJzdENoaWxkKX0sY29uZmlndXJhYmxlOiEwfSl9LEo9ZnVuY3Rpb24ocCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHAsXCJvdXRlckhUTUxcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuXCI8dGVtcGxhdGU+XCIrdGhpcy5pbm5lckhUTUwrXCI8L3RlbXBsYXRlPlwifSxzZXQ6ZnVuY3Rpb24ocil7aWYodGhpcy5wYXJlbnROb2RlKXt5LmJvZHkuaW5uZXJIVE1MPVxucjtmb3Iocj10aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3kuYm9keS5maXJzdENoaWxkOylsLmNhbGwocix5LmJvZHkuZmlyc3RDaGlsZCk7bS5jYWxsKHRoaXMucGFyZW50Tm9kZSxyLHRoaXMpfWVsc2UgdGhyb3cgRXJyb3IoXCJGYWlsZWQgdG8gc2V0IHRoZSAnb3V0ZXJIVE1MJyBwcm9wZXJ0eSBvbiAnRWxlbWVudCc6IFRoaXMgZWxlbWVudCBoYXMgbm8gcGFyZW50IG5vZGUuXCIpO30sY29uZmlndXJhYmxlOiEwfSl9O24oYS5wcm90b3R5cGUpO0ooYS5wcm90b3R5cGUpO2EuYm9vdHN0cmFwPWZ1bmN0aW9uKHApe3A9YihwLFwidGVtcGxhdGVcIik7Zm9yKHZhciByPTAsQj1wLmxlbmd0aCxLO3I8QiYmKEs9cFtyXSk7cisrKWEuWihLKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIixmdW5jdGlvbigpe2EuYm9vdHN0cmFwKGRvY3VtZW50KX0pO0RvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHA9XG5nLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtcInRlbXBsYXRlXCI9PT1wLmxvY2FsTmFtZSYmYS5aKHApO3JldHVybiBwfTtET01QYXJzZXIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZz1mdW5jdGlvbigpe3ZhciBwPXEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2EuYm9vdHN0cmFwKHApO3JldHVybiBwfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEVsZW1lbnQucHJvdG90eXBlLFwiaW5uZXJIVE1MXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB3YSh0aGlzKX0sc2V0OmZ1bmN0aW9uKHApe0guc2V0LmNhbGwodGhpcyxwKTthLmJvb3RzdHJhcCh0aGlzKX0sY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9KTt2YXIgZmE9L1smXFx1MDBBMFwiXS9nLGdjPS9bJlxcdTAwQTA8Pl0vZyxmYj1mdW5jdGlvbihwKXtzd2l0Y2gocCl7Y2FzZSBcIiZcIjpyZXR1cm5cIiZhbXA7XCI7Y2FzZSBcIjxcIjpyZXR1cm5cIiZsdDtcIjtjYXNlIFwiPlwiOnJldHVyblwiJmd0O1wiO2Nhc2UgJ1wiJzpyZXR1cm5cIiZxdW90O1wiO2Nhc2UgXCJcXHUwMGEwXCI6cmV0dXJuXCImbmJzcDtcIn19O1xudz1mdW5jdGlvbihwKXtmb3IodmFyIHI9e30sQj0wO0I8cC5sZW5ndGg7QisrKXJbcFtCXV09ITA7cmV0dXJuIHJ9O3ZhciBVYT13KFwiYXJlYSBiYXNlIGJyIGNvbCBjb21tYW5kIGVtYmVkIGhyIGltZyBpbnB1dCBrZXlnZW4gbGluayBtZXRhIHBhcmFtIHNvdXJjZSB0cmFjayB3YnJcIi5zcGxpdChcIiBcIikpLGdiPXcoXCJzdHlsZSBzY3JpcHQgeG1wIGlmcmFtZSBub2VtYmVkIG5vZnJhbWVzIHBsYWludGV4dCBub3NjcmlwdFwiLnNwbGl0KFwiIFwiKSksd2E9ZnVuY3Rpb24ocCxyKXtcInRlbXBsYXRlXCI9PT1wLmxvY2FsTmFtZSYmKHA9cC5jb250ZW50KTtmb3IodmFyIEI9XCJcIixLPXI/cihwKTpDLmdldC5jYWxsKHApLGFhPTAsbGE9Sy5sZW5ndGgsdmE7YWE8bGEmJih2YT1LW2FhXSk7YWErKyl7YTp7dmFyIHo9dmE7dmFyIFI9cDt2YXIgbGI9cjtzd2l0Y2goei5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpmb3IodmFyIEZjPXoubG9jYWxOYW1lLG1iPVwiPFwiK0ZjLEJoPXouYXR0cmlidXRlcyxcbm9lPTA7Uj1CaFtvZV07b2UrKyltYis9XCIgXCIrUi5uYW1lKyc9XCInK1IudmFsdWUucmVwbGFjZShmYSxmYikrJ1wiJzttYis9XCI+XCI7ej1VYVtGY10/bWI6bWIrd2EoeixsYikrXCI8L1wiK0ZjK1wiPlwiO2JyZWFrIGE7Y2FzZSBOb2RlLlRFWFRfTk9ERTp6PXouZGF0YTt6PVImJmdiW1IubG9jYWxOYW1lXT96OnoucmVwbGFjZShnYyxmYik7YnJlYWsgYTtjYXNlIE5vZGUuQ09NTUVOVF9OT0RFOno9XCJcXHgzYyEtLVwiK3ouZGF0YStcIi0tXFx4M2VcIjticmVhayBhO2RlZmF1bHQ6dGhyb3cgd2luZG93LmNvbnNvbGUuZXJyb3IoeiksRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7fX1CKz16fXJldHVybiBCfX1pZihjfHxNKXthLnNhPWZ1bmN0aW9uKHAscil7dmFyIEI9Zi5jYWxsKHAsITEpO3RoaXMuWiYmdGhpcy5aKEIpO3ImJihsLmNhbGwoQi5jb250ZW50LGYuY2FsbChwLmNvbnRlbnQsITApKSxJKEIuY29udGVudCxwLmNvbnRlbnQpKTtyZXR1cm4gQn07dmFyIEk9ZnVuY3Rpb24ocCxyKXtpZihyLnF1ZXJ5U2VsZWN0b3JBbGwmJlxuKHI9YihyLFwidGVtcGxhdGVcIiksMCE9PXIubGVuZ3RoKSl7cD1iKHAsXCJ0ZW1wbGF0ZVwiKTtmb3IodmFyIEI9MCxLPXAubGVuZ3RoLGFhLGxhO0I8SztCKyspbGE9cltCXSxhYT1wW0JdLGEmJmEuWiYmYS5aKGxhKSxtLmNhbGwoYWEucGFyZW50Tm9kZSx1LmNhbGwobGEsITApLGFhKX19LHU9Tm9kZS5wcm90b3R5cGUuY2xvbmVOb2RlPWZ1bmN0aW9uKHApe2lmKCFlJiZkJiZ0aGlzIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudClpZihwKXZhciByPUcuY2FsbCh0aGlzLm93bmVyRG9jdW1lbnQsdGhpcywhMCk7ZWxzZSByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtlbHNlIHRoaXMubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmXCJ0ZW1wbGF0ZVwiPT09dGhpcy5sb2NhbE5hbWUmJnRoaXMubmFtZXNwYWNlVVJJPT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJP3I9YS5zYSh0aGlzLHApOnI9Zi5jYWxsKHRoaXMsXG5wKTtwJiZJKHIsdGhpcyk7cmV0dXJuIHJ9LEc9RG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGU9ZnVuY3Rpb24ocCxyKXtyPXJ8fCExO2lmKFwidGVtcGxhdGVcIj09PXAubG9jYWxOYW1lKXJldHVybiBhLnNhKHAscik7dmFyIEI9aC5jYWxsKHRoaXMscCxyKTtpZihyKXtJKEIscCk7cD1iKEIsJ3NjcmlwdDpub3QoW3R5cGVdKSxzY3JpcHRbdHlwZT1cImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIl0sc2NyaXB0W3R5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIl0nKTtmb3IodmFyIEssYWE9MDthYTxwLmxlbmd0aDthYSsrKXtLPXBbYWFdO3I9Zy5jYWxsKGRvY3VtZW50LFwic2NyaXB0XCIpO3IudGV4dENvbnRlbnQ9Sy50ZXh0Q29udGVudDtmb3IodmFyIGxhPUsuYXR0cmlidXRlcyx2YT0wLHo7dmE8bGEubGVuZ3RoO3ZhKyspej1sYVt2YV0sci5zZXRBdHRyaWJ1dGUoei5uYW1lLHoudmFsdWUpO20uY2FsbChLLnBhcmVudE5vZGUscixLKX19cmV0dXJuIEJ9fWMmJih3aW5kb3cuSFRNTFRlbXBsYXRlRWxlbWVudD1cbmEpfSkoKTsvKlxuXG5Db3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcblRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4qL1xuZnVuY3Rpb24gc2MoKXt9c2MucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt9fTtmdW5jdGlvbiBEKGEpe2EuX19zaGFkeXx8KGEuX19zaGFkeT1uZXcgc2MpO3JldHVybiBhLl9fc2hhZHl9ZnVuY3Rpb24gTChhKXtyZXR1cm4gYSYmYS5fX3NoYWR5fTt2YXIgTj13aW5kb3cuU2hhZHlET018fHt9O04uWWE9ISghRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoU2hhZG93fHwhTm9kZS5wcm90b3R5cGUuZ2V0Um9vdE5vZGUpO3ZhciB0Yz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE5vZGUucHJvdG90eXBlLFwiZmlyc3RDaGlsZFwiKTtOLkg9ISEodGMmJnRjLmNvbmZpZ3VyYWJsZSYmdGMuZ2V0KTtOLnlhPU4uZm9yY2V8fCFOLllhO04uSj1OLm5vUGF0Y2h8fCExO04uZmE9Ti5wcmVmZXJQZXJmb3JtYW5jZTtOLkFhPVwib24tZGVtYW5kXCI9PT1OLko7Ti5OYT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKFwiVHJpZGVudFwiKTtmdW5jdGlvbiB1Yygpe3JldHVybiBEb2N1bWVudC5wcm90b3R5cGUubXNFbGVtZW50c0Zyb21Qb2ludD9cIm1zRWxlbWVudHNGcm9tUG9pbnRcIjpcImVsZW1lbnRzRnJvbVBvaW50XCJ9ZnVuY3Rpb24gdmMoYSl7cmV0dXJuKGE9TChhKSkmJnZvaWQgMCE9PWEuZmlyc3RDaGlsZH1cbmZ1bmN0aW9uIE8oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBTaGFkb3dSb290fWZ1bmN0aW9uIHdjKGEpe3JldHVybihhPShhPUwoYSkpJiZhLnJvb3QpJiZ4YyhhKX12YXIgeWM9RWxlbWVudC5wcm90b3R5cGUsemM9eWMubWF0Y2hlc3x8eWMubWF0Y2hlc1NlbGVjdG9yfHx5Yy5tb3pNYXRjaGVzU2VsZWN0b3J8fHljLm1zTWF0Y2hlc1NlbGVjdG9yfHx5Yy5vTWF0Y2hlc1NlbGVjdG9yfHx5Yy53ZWJraXRNYXRjaGVzU2VsZWN0b3IsQWM9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIiksQmM9MCxDYz1bXTsobmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXtmb3IoO0NjLmxlbmd0aDspdHJ5e0NjLnNoaWZ0KCkoKX1jYXRjaChhKXt0aHJvdyBBYy50ZXh0Q29udGVudD1CYysrLGE7fX0pKS5vYnNlcnZlKEFjLHtjaGFyYWN0ZXJEYXRhOiEwfSk7ZnVuY3Rpb24gRGMoYSl7Q2MucHVzaChhKTtBYy50ZXh0Q29udGVudD1CYysrfVxudmFyIEVjPWRvY3VtZW50LmNvbnRhaW5zP2Z1bmN0aW9uKGEsYil7cmV0dXJuIGEuX19zaGFkeV9uYXRpdmVfY29udGFpbnMoYil9OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9PT1ifHxhLmRvY3VtZW50RWxlbWVudCYmYS5kb2N1bWVudEVsZW1lbnQuX19zaGFkeV9uYXRpdmVfY29udGFpbnMoYil9O2Z1bmN0aW9uIEdjKGEsYil7Zm9yKDtiOyl7aWYoYj09YSlyZXR1cm4hMDtiPWIuX19zaGFkeV9wYXJlbnROb2RlfXJldHVybiExfVxuZnVuY3Rpb24gSGMoYSl7Zm9yKHZhciBiPWEubGVuZ3RoLTE7MDw9YjtiLS0pe3ZhciBjPWFbYl0sZD1jLmdldEF0dHJpYnV0ZShcImlkXCIpfHxjLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7ZCYmXCJsZW5ndGhcIiE9PWQmJmlzTmFOKGQpJiYoYVtkXT1jKX1hLml0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIGFbZV19O2EubmFtZWRJdGVtPWZ1bmN0aW9uKGUpe2lmKFwibGVuZ3RoXCIhPT1lJiZpc05hTihlKSYmYVtlXSlyZXR1cm4gYVtlXTtmb3IodmFyIGY9a2EoYSksZz1mLm5leHQoKTshZy5kb25lO2c9Zi5uZXh0KCkpaWYoZz1nLnZhbHVlLChnLmdldEF0dHJpYnV0ZShcImlkXCIpfHxnLmdldEF0dHJpYnV0ZShcIm5hbWVcIikpPT1lKXJldHVybiBnO3JldHVybiBudWxsfTtyZXR1cm4gYX1mdW5jdGlvbiBJYyhhKXt2YXIgYj1bXTtmb3IoYT1hLl9fc2hhZHlfbmF0aXZlX2ZpcnN0Q2hpbGQ7YTthPWEuX19zaGFkeV9uYXRpdmVfbmV4dFNpYmxpbmcpYi5wdXNoKGEpO3JldHVybiBifVxuZnVuY3Rpb24gSmMoYSl7dmFyIGI9W107Zm9yKGE9YS5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YTthPWEuX19zaGFkeV9uZXh0U2libGluZyliLnB1c2goYSk7cmV0dXJuIGJ9ZnVuY3Rpb24gS2MoYSxiLGMpe2MuY29uZmlndXJhYmxlPSEwO2lmKGMudmFsdWUpYVtiXT1jLnZhbHVlO2Vsc2UgdHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIsYyl9Y2F0Y2goZCl7fX1mdW5jdGlvbiBQKGEsYixjLGQpe2M9dm9pZCAwPT09Yz9cIlwiOmM7Zm9yKHZhciBlIGluIGIpZCYmMDw9ZC5pbmRleE9mKGUpfHxLYyhhLGMrZSxiW2VdKX1mdW5jdGlvbiBMYyhhLGIpe2Zvcih2YXIgYyBpbiBiKWMgaW4gYSYmS2MoYSxjLGJbY10pfWZ1bmN0aW9uIFEoYSl7dmFyIGI9e307T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZm9yRWFjaChmdW5jdGlvbihjKXtiW2NdPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxjKX0pO3JldHVybiBifVxuZnVuY3Rpb24gTWMoYSxiKXtmb3IodmFyIGM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYiksZD0wLGU7ZDxjLmxlbmd0aDtkKyspZT1jW2RdLGFbZV09YltlXX1mdW5jdGlvbiBOYyhhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIE5vZGU/YTpkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiK2EpfWZ1bmN0aW9uIE9jKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPWFyZ3VtZW50c1tjXTtpZigxPT09Yi5sZW5ndGgpcmV0dXJuIE5jKGJbMF0pO2M9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2I9a2EoYik7Zm9yKHZhciBkPWIubmV4dCgpOyFkLmRvbmU7ZD1iLm5leHQoKSljLmFwcGVuZENoaWxkKE5jKGQudmFsdWUpKTtyZXR1cm4gY307dmFyIFBjPVtdLFFjO2Z1bmN0aW9uIFJjKGEpe1FjfHwoUWM9ITAsRGMoU2MpKTtQYy5wdXNoKGEpfWZ1bmN0aW9uIFNjKCl7UWM9ITE7Zm9yKHZhciBhPSEhUGMubGVuZ3RoO1BjLmxlbmd0aDspUGMuc2hpZnQoKSgpO3JldHVybiBhfVNjLmxpc3Q9UGM7ZnVuY3Rpb24gVGMoKXt0aGlzLmc9ITE7dGhpcy5hZGRlZE5vZGVzPVtdO3RoaXMucmVtb3ZlZE5vZGVzPVtdO3RoaXMub2E9bmV3IFNldH1mdW5jdGlvbiBVYyhhKXthLmd8fChhLmc9ITAsRGMoZnVuY3Rpb24oKXthLmZsdXNoKCl9KSl9VGMucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5nKXt0aGlzLmc9ITE7dmFyIGE9dGhpcy50YWtlUmVjb3JkcygpO2EubGVuZ3RoJiZ0aGlzLm9hLmZvckVhY2goZnVuY3Rpb24oYil7YihhKX0pfX07VGMucHJvdG90eXBlLnRha2VSZWNvcmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5hZGRlZE5vZGVzLmxlbmd0aHx8dGhpcy5yZW1vdmVkTm9kZXMubGVuZ3RoKXt2YXIgYT1be2FkZGVkTm9kZXM6dGhpcy5hZGRlZE5vZGVzLHJlbW92ZWROb2Rlczp0aGlzLnJlbW92ZWROb2Rlc31dO3RoaXMuYWRkZWROb2Rlcz1bXTt0aGlzLnJlbW92ZWROb2Rlcz1bXTtyZXR1cm4gYX1yZXR1cm5bXX07XG5mdW5jdGlvbiBWYyhhLGIpe3ZhciBjPUQoYSk7Yy5lYXx8KGMuZWE9bmV3IFRjKTtjLmVhLm9hLmFkZChiKTt2YXIgZD1jLmVhO3JldHVybntSYTpiLFg6ZCxTYTphLHRha2VSZWNvcmRzOmZ1bmN0aW9uKCl7cmV0dXJuIGQudGFrZVJlY29yZHMoKX19fWZ1bmN0aW9uIFdjKGEpe3ZhciBiPWEmJmEuWDtiJiYoYi5vYS5kZWxldGUoYS5SYSksYi5vYS5zaXplfHwoRChhLlNhKS5lYT1udWxsKSl9XG5mdW5jdGlvbiBYYyhhLGIpe3ZhciBjPWIuZ2V0Um9vdE5vZGUoKTtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oZCl7dmFyIGU9Yz09PWQudGFyZ2V0LmdldFJvb3ROb2RlKCk7aWYoZSYmZC5hZGRlZE5vZGVzKXtpZihlPVtdLnNsaWNlLmNhbGwoZC5hZGRlZE5vZGVzKS5maWx0ZXIoZnVuY3Rpb24oZil7cmV0dXJuIGM9PT1mLmdldFJvb3ROb2RlKCl9KSxlLmxlbmd0aClyZXR1cm4gZD1PYmplY3QuY3JlYXRlKGQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLFwiYWRkZWROb2Rlc1wiLHt2YWx1ZTplLGNvbmZpZ3VyYWJsZTohMH0pLGR9ZWxzZSBpZihlKXJldHVybiBkfSkuZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybiBkfSl9O3ZhciBZYz0vWyZcXHUwMEEwXCJdL2csWmM9L1smXFx1MDBBMDw+XS9nO2Z1bmN0aW9uICRjKGEpe3N3aXRjaChhKXtjYXNlIFwiJlwiOnJldHVyblwiJmFtcDtcIjtjYXNlIFwiPFwiOnJldHVyblwiJmx0O1wiO2Nhc2UgXCI+XCI6cmV0dXJuXCImZ3Q7XCI7Y2FzZSAnXCInOnJldHVyblwiJnF1b3Q7XCI7Y2FzZSBcIlxcdTAwYTBcIjpyZXR1cm5cIiZuYnNwO1wifX1mdW5jdGlvbiBhZChhKXtmb3IodmFyIGI9e30sYz0wO2M8YS5sZW5ndGg7YysrKWJbYVtjXV09ITA7cmV0dXJuIGJ9dmFyIGJkPWFkKFwiYXJlYSBiYXNlIGJyIGNvbCBjb21tYW5kIGVtYmVkIGhyIGltZyBpbnB1dCBrZXlnZW4gbGluayBtZXRhIHBhcmFtIHNvdXJjZSB0cmFjayB3YnJcIi5zcGxpdChcIiBcIikpLGNkPWFkKFwic3R5bGUgc2NyaXB0IHhtcCBpZnJhbWUgbm9lbWJlZCBub2ZyYW1lcyBwbGFpbnRleHQgbm9zY3JpcHRcIi5zcGxpdChcIiBcIikpO1xuZnVuY3Rpb24gZGQoYSxiKXtcInRlbXBsYXRlXCI9PT1hLmxvY2FsTmFtZSYmKGE9YS5jb250ZW50KTtmb3IodmFyIGM9XCJcIixkPWI/YihhKTphLmNoaWxkTm9kZXMsZT0wLGY9ZC5sZW5ndGgsZz12b2lkIDA7ZTxmJiYoZz1kW2VdKTtlKyspe2E6e3ZhciBoPWc7dmFyIGs9YSxsPWI7c3dpdGNoKGgubm9kZVR5cGUpe2Nhc2UgTm9kZS5FTEVNRU5UX05PREU6az1oLmxvY2FsTmFtZTtmb3IodmFyIG09XCI8XCIrayxxPWguYXR0cmlidXRlcyxIPTAsQztDPXFbSF07SCsrKW0rPVwiIFwiK0MubmFtZSsnPVwiJytDLnZhbHVlLnJlcGxhY2UoWWMsJGMpKydcIic7bSs9XCI+XCI7aD1iZFtrXT9tOm0rZGQoaCxsKStcIjwvXCIraytcIj5cIjticmVhayBhO2Nhc2UgTm9kZS5URVhUX05PREU6aD1oLmRhdGE7aD1rJiZjZFtrLmxvY2FsTmFtZV0/aDpoLnJlcGxhY2UoWmMsJGMpO2JyZWFrIGE7Y2FzZSBOb2RlLkNPTU1FTlRfTk9ERTpoPVwiXFx4M2MhLS1cIitoLmRhdGErXCItLVxceDNlXCI7YnJlYWsgYTtkZWZhdWx0OnRocm93IHdpbmRvdy5jb25zb2xlLmVycm9yKGgpLFxuRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7fX1jKz1ofXJldHVybiBjfTt2YXIgZWQ9Ti5ILGZkPXtxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3F1ZXJ5U2VsZWN0b3IoYSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfcXVlcnlTZWxlY3RvckFsbChhKX19LGdkPXt9O2Z1bmN0aW9uIGhkKGEpe2dkW2FdPWZ1bmN0aW9uKGIpe3JldHVybiBiW1wiX19zaGFkeV9uYXRpdmVfXCIrYV19fWZ1bmN0aW9uIGlkKGEsYil7UChhLGIsXCJfX3NoYWR5X25hdGl2ZV9cIik7Zm9yKHZhciBjIGluIGIpaGQoYyl9ZnVuY3Rpb24gUyhhLGIpe2I9dm9pZCAwPT09Yj9bXTpiO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdLGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGQpO2UmJihPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcIl9fc2hhZHlfbmF0aXZlX1wiK2QsZSksZS52YWx1ZT9mZFtkXXx8KGZkW2RdPWUudmFsdWUpOmhkKGQpKX19XG52YXIgamQ9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihkb2N1bWVudCxOb2RlRmlsdGVyLlNIT1dfQUxMLG51bGwsITEpLGtkPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZG9jdW1lbnQsTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsbnVsbCwhMSksbGQ9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KFwiaW5lcnRcIik7ZnVuY3Rpb24gbWQoYSl7Zm9yKHZhciBiO2I9YS5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkOylhLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGIpfXZhciBuZD1bXCJmaXJzdEVsZW1lbnRDaGlsZFwiLFwibGFzdEVsZW1lbnRDaGlsZFwiLFwiY2hpbGRyZW5cIixcImNoaWxkRWxlbWVudENvdW50XCJdLG9kPVtcInF1ZXJ5U2VsZWN0b3JcIixcInF1ZXJ5U2VsZWN0b3JBbGxcIixcImFwcGVuZFwiLFwicHJlcGVuZFwiLFwicmVwbGFjZUNoaWxkcmVuXCJdO1xuZnVuY3Rpb24gcGQoKXt2YXIgYT1bXCJkaXNwYXRjaEV2ZW50XCIsXCJhZGRFdmVudExpc3RlbmVyXCIsXCJyZW1vdmVFdmVudExpc3RlbmVyXCJdO3dpbmRvdy5FdmVudFRhcmdldD8oUyh3aW5kb3cuRXZlbnRUYXJnZXQucHJvdG90eXBlLGEpLHZvaWQgMD09PXdpbmRvdy5fX3NoYWR5X25hdGl2ZV9hZGRFdmVudExpc3RlbmVyJiZTKFdpbmRvdy5wcm90b3R5cGUsYSkpOihTKE5vZGUucHJvdG90eXBlLGEpLFMoV2luZG93LnByb3RvdHlwZSxhKSk7ZWQ/UyhOb2RlLnByb3RvdHlwZSxcInBhcmVudE5vZGUgZmlyc3RDaGlsZCBsYXN0Q2hpbGQgcHJldmlvdXNTaWJsaW5nIG5leHRTaWJsaW5nIGNoaWxkTm9kZXMgcGFyZW50RWxlbWVudCB0ZXh0Q29udGVudFwiLnNwbGl0KFwiIFwiKSk6aWQoTm9kZS5wcm90b3R5cGUse3BhcmVudE5vZGU6e2dldDpmdW5jdGlvbigpe2pkLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIGpkLnBhcmVudE5vZGUoKX19LGZpcnN0Q2hpbGQ6e2dldDpmdW5jdGlvbigpe2pkLmN1cnJlbnROb2RlPVxudGhpcztyZXR1cm4gamQuZmlyc3RDaGlsZCgpfX0sbGFzdENoaWxkOntnZXQ6ZnVuY3Rpb24oKXtqZC5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBqZC5sYXN0Q2hpbGQoKX19LHByZXZpb3VzU2libGluZzp7Z2V0OmZ1bmN0aW9uKCl7amQuY3VycmVudE5vZGU9dGhpcztyZXR1cm4gamQucHJldmlvdXNTaWJsaW5nKCl9fSxuZXh0U2libGluZzp7Z2V0OmZ1bmN0aW9uKCl7amQuY3VycmVudE5vZGU9dGhpcztyZXR1cm4gamQubmV4dFNpYmxpbmcoKX19LGNoaWxkTm9kZXM6e2dldDpmdW5jdGlvbigpe3ZhciBiPVtdO2pkLmN1cnJlbnROb2RlPXRoaXM7Zm9yKHZhciBjPWpkLmZpcnN0Q2hpbGQoKTtjOyliLnB1c2goYyksYz1qZC5uZXh0U2libGluZygpO3JldHVybiBifX0scGFyZW50RWxlbWVudDp7Z2V0OmZ1bmN0aW9uKCl7a2QuY3VycmVudE5vZGU9dGhpcztyZXR1cm4ga2QucGFyZW50Tm9kZSgpfX0sdGV4dENvbnRlbnQ6e2dldDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOmNhc2UgTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFOmZvcih2YXIgYj1cbmRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIodGhpcyxOb2RlRmlsdGVyLlNIT1dfVEVYVCxudWxsLCExKSxjPVwiXCIsZDtkPWIubmV4dE5vZGUoKTspYys9ZC5ub2RlVmFsdWU7cmV0dXJuIGM7ZGVmYXVsdDpyZXR1cm4gdGhpcy5ub2RlVmFsdWV9fSxzZXQ6ZnVuY3Rpb24oYil7aWYoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiBifHxudWxsPT09YiliPVwiXCI7c3dpdGNoKHRoaXMubm9kZVR5cGUpe2Nhc2UgTm9kZS5FTEVNRU5UX05PREU6Y2FzZSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6bWQodGhpcyk7KDA8Yi5sZW5ndGh8fHRoaXMubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSkmJnRoaXMuX19zaGFkeV9uYXRpdmVfaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGIpLHZvaWQgMCk7YnJlYWs7ZGVmYXVsdDp0aGlzLm5vZGVWYWx1ZT1ifX19fSk7UyhOb2RlLnByb3RvdHlwZSxcImFwcGVuZENoaWxkIGluc2VydEJlZm9yZSByZW1vdmVDaGlsZCByZXBsYWNlQ2hpbGQgY2xvbmVOb2RlIGNvbnRhaW5zXCIuc3BsaXQoXCIgXCIpKTtcblMoSFRNTEVsZW1lbnQucHJvdG90eXBlLFtcInBhcmVudEVsZW1lbnRcIixcImNvbnRhaW5zXCJdKTthPXtmaXJzdEVsZW1lbnRDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7a2QuY3VycmVudE5vZGU9dGhpcztyZXR1cm4ga2QuZmlyc3RDaGlsZCgpfX0sbGFzdEVsZW1lbnRDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7a2QuY3VycmVudE5vZGU9dGhpcztyZXR1cm4ga2QubGFzdENoaWxkKCl9fSxjaGlsZHJlbjp7Z2V0OmZ1bmN0aW9uKCl7dmFyIGI9W107a2QuY3VycmVudE5vZGU9dGhpcztmb3IodmFyIGM9a2QuZmlyc3RDaGlsZCgpO2M7KWIucHVzaChjKSxjPWtkLm5leHRTaWJsaW5nKCk7cmV0dXJuIEhjKGIpfX0sY2hpbGRFbGVtZW50Q291bnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuP3RoaXMuY2hpbGRyZW4ubGVuZ3RoOjB9fX07ZWQ/KFMoRWxlbWVudC5wcm90b3R5cGUsbmQpLFMoRWxlbWVudC5wcm90b3R5cGUsW1wicHJldmlvdXNFbGVtZW50U2libGluZ1wiLFwibmV4dEVsZW1lbnRTaWJsaW5nXCIsXG5cImlubmVySFRNTFwiLFwiY2xhc3NOYW1lXCJdKSxTKEhUTUxFbGVtZW50LnByb3RvdHlwZSxbXCJjaGlsZHJlblwiLFwiaW5uZXJIVE1MXCIsXCJjbGFzc05hbWVcIl0pKTooaWQoRWxlbWVudC5wcm90b3R5cGUsYSksaWQoRWxlbWVudC5wcm90b3R5cGUse3ByZXZpb3VzRWxlbWVudFNpYmxpbmc6e2dldDpmdW5jdGlvbigpe2tkLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIGtkLnByZXZpb3VzU2libGluZygpfX0sbmV4dEVsZW1lbnRTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtrZC5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBrZC5uZXh0U2libGluZygpfX0saW5uZXJIVE1MOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZGQodGhpcyxJYyl9LHNldDpmdW5jdGlvbihiKXt2YXIgYz1cInRlbXBsYXRlXCI9PT10aGlzLmxvY2FsTmFtZT90aGlzLmNvbnRlbnQ6dGhpczttZChjKTt2YXIgZD10aGlzLmxvY2FsTmFtZXx8XCJkaXZcIjtkPXRoaXMubmFtZXNwYWNlVVJJJiZ0aGlzLm5hbWVzcGFjZVVSSSE9PWxkLm5hbWVzcGFjZVVSST9cbmxkLmNyZWF0ZUVsZW1lbnROUyh0aGlzLm5hbWVzcGFjZVVSSSxkKTpsZC5jcmVhdGVFbGVtZW50KGQpO2QuaW5uZXJIVE1MPWI7Zm9yKGI9XCJ0ZW1wbGF0ZVwiPT09dGhpcy5sb2NhbE5hbWU/ZC5jb250ZW50OmQ7ZD1iLl9fc2hhZHlfbmF0aXZlX2ZpcnN0Q2hpbGQ7KWMuX19zaGFkeV9uYXRpdmVfaW5zZXJ0QmVmb3JlKGQsdm9pZCAwKX19LGNsYXNzTmFtZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCJ9LHNldDpmdW5jdGlvbihiKXt0aGlzLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsYil9fX0pKTtTKEVsZW1lbnQucHJvdG90eXBlLFwic2V0QXR0cmlidXRlIGdldEF0dHJpYnV0ZSBoYXNBdHRyaWJ1dGUgcmVtb3ZlQXR0cmlidXRlIGZvY3VzIGJsdXJcIi5zcGxpdChcIiBcIikpO1MoRWxlbWVudC5wcm90b3R5cGUsb2QpO1MoSFRNTEVsZW1lbnQucHJvdG90eXBlLFtcImZvY3VzXCIsXCJibHVyXCJdKTt3aW5kb3cuSFRNTFRlbXBsYXRlRWxlbWVudCYmXG5TKHdpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50LnByb3RvdHlwZSxbXCJpbm5lckhUTUxcIl0pO2VkP1MoRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUsbmQpOmlkKERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLGEpO1MoRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUsb2QpO2VkPyhTKERvY3VtZW50LnByb3RvdHlwZSxuZCksUyhEb2N1bWVudC5wcm90b3R5cGUsW1wiYWN0aXZlRWxlbWVudFwiXSkpOmlkKERvY3VtZW50LnByb3RvdHlwZSxhKTtTKERvY3VtZW50LnByb3RvdHlwZSxbXCJpbXBvcnROb2RlXCIsXCJnZXRFbGVtZW50QnlJZFwiLFwiZWxlbWVudEZyb21Qb2ludFwiLHVjKCldKTtTKERvY3VtZW50LnByb3RvdHlwZSxvZCl9O3ZhciBxZD1RKHtnZXQgY2hpbGROb2Rlcygpe3JldHVybiB0aGlzLl9fc2hhZHlfY2hpbGROb2Rlc30sZ2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2ZpcnN0Q2hpbGR9LGdldCBsYXN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2xhc3RDaGlsZH0sZ2V0IGNoaWxkRWxlbWVudENvdW50KCl7cmV0dXJuIHRoaXMuX19zaGFkeV9jaGlsZEVsZW1lbnRDb3VudH0sZ2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9jaGlsZHJlbn0sZ2V0IGZpcnN0RWxlbWVudENoaWxkKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9maXJzdEVsZW1lbnRDaGlsZH0sZ2V0IGxhc3RFbGVtZW50Q2hpbGQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2xhc3RFbGVtZW50Q2hpbGR9LGdldCBzaGFkb3dSb290KCl7cmV0dXJuIHRoaXMuX19zaGFkeV9zaGFkb3dSb290fX0pLHJkPVEoe2dldCB0ZXh0Q29udGVudCgpe3JldHVybiB0aGlzLl9fc2hhZHlfdGV4dENvbnRlbnR9LHNldCB0ZXh0Q29udGVudChhKXt0aGlzLl9fc2hhZHlfdGV4dENvbnRlbnQ9XG5hfSxnZXQgaW5uZXJIVE1MKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9pbm5lckhUTUx9LHNldCBpbm5lckhUTUwoYSl7dGhpcy5fX3NoYWR5X2lubmVySFRNTD1hfX0pLHNkPVEoe2dldCBwYXJlbnRFbGVtZW50KCl7cmV0dXJuIHRoaXMuX19zaGFkeV9wYXJlbnRFbGVtZW50fSxnZXQgcGFyZW50Tm9kZSgpe3JldHVybiB0aGlzLl9fc2hhZHlfcGFyZW50Tm9kZX0sZ2V0IG5leHRTaWJsaW5nKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9uZXh0U2libGluZ30sZ2V0IHByZXZpb3VzU2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfcHJldmlvdXNTaWJsaW5nfSxnZXQgbmV4dEVsZW1lbnRTaWJsaW5nKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9uZXh0RWxlbWVudFNpYmxpbmd9LGdldCBwcmV2aW91c0VsZW1lbnRTaWJsaW5nKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9wcmV2aW91c0VsZW1lbnRTaWJsaW5nfSxnZXQgY2xhc3NOYW1lKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9jbGFzc05hbWV9LHNldCBjbGFzc05hbWUoYSl7dGhpcy5fX3NoYWR5X2NsYXNzTmFtZT1cbmF9fSk7ZnVuY3Rpb24gdGQoYSl7Zm9yKHZhciBiIGluIGEpe3ZhciBjPWFbYl07YyYmKGMuZW51bWVyYWJsZT0hMSl9fXRkKHFkKTt0ZChyZCk7dGQoc2QpO3ZhciB1ZD1OLkh8fCEwPT09Ti5KLHZkPXVkP2Z1bmN0aW9uKCl7fTpmdW5jdGlvbihhKXt2YXIgYj1EKGEpO2IuUGF8fChiLlBhPSEwLExjKGEsc2QpKX0sd2Q9dWQ/ZnVuY3Rpb24oKXt9OmZ1bmN0aW9uKGEpe3ZhciBiPUQoYSk7Yi5PYXx8KGIuT2E9ITAsTGMoYSxxZCksd2luZG93LmN1c3RvbUVsZW1lbnRzJiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayYmIU4uSnx8TGMoYSxyZCkpfTt2YXIgeGQ9XCJfX2V2ZW50V3JhcHBlcnNcIitEYXRlLm5vdygpLHlkPWZ1bmN0aW9uKCl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFdmVudC5wcm90b3R5cGUsXCJjb21wb3NlZFwiKTtyZXR1cm4gYT9mdW5jdGlvbihiKXtyZXR1cm4gYS5nZXQuY2FsbChiKX06bnVsbH0oKSx6ZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt9dmFyIGI9ITEsYz17Z2V0IGNhcHR1cmUoKXtiPSEwO3JldHVybiExfX07d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsYSxjKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRlc3RcIixhLGMpO3JldHVybiBifSgpO2Z1bmN0aW9uIEFkKGEpe2lmKGEmJlwib2JqZWN0XCI9PT10eXBlb2YgYSl7dmFyIGI9ISFhLmNhcHR1cmU7dmFyIGM9ISFhLm9uY2U7dmFyIGQ9ISFhLnBhc3NpdmU7dmFyIGU9YS5VfWVsc2UgYj0hIWEsZD1jPSExO3JldHVybntMYTplLGNhcHR1cmU6YixvbmNlOmMscGFzc2l2ZTpkLEphOnpkP2E6Yn19XG52YXIgQmQ9e2JsdXI6ITAsZm9jdXM6ITAsZm9jdXNpbjohMCxmb2N1c291dDohMCxjbGljazohMCxkYmxjbGljazohMCxtb3VzZWRvd246ITAsbW91c2VlbnRlcjohMCxtb3VzZWxlYXZlOiEwLG1vdXNlbW92ZTohMCxtb3VzZW91dDohMCxtb3VzZW92ZXI6ITAsbW91c2V1cDohMCx3aGVlbDohMCxiZWZvcmVpbnB1dDohMCxpbnB1dDohMCxrZXlkb3duOiEwLGtleXVwOiEwLGNvbXBvc2l0aW9uc3RhcnQ6ITAsY29tcG9zaXRpb251cGRhdGU6ITAsY29tcG9zaXRpb25lbmQ6ITAsdG91Y2hzdGFydDohMCx0b3VjaGVuZDohMCx0b3VjaG1vdmU6ITAsdG91Y2hjYW5jZWw6ITAscG9pbnRlcm92ZXI6ITAscG9pbnRlcmVudGVyOiEwLHBvaW50ZXJkb3duOiEwLHBvaW50ZXJtb3ZlOiEwLHBvaW50ZXJ1cDohMCxwb2ludGVyY2FuY2VsOiEwLHBvaW50ZXJvdXQ6ITAscG9pbnRlcmxlYXZlOiEwLGdvdHBvaW50ZXJjYXB0dXJlOiEwLGxvc3Rwb2ludGVyY2FwdHVyZTohMCxkcmFnc3RhcnQ6ITAsXG5kcmFnOiEwLGRyYWdlbnRlcjohMCxkcmFnbGVhdmU6ITAsZHJhZ292ZXI6ITAsZHJvcDohMCxkcmFnZW5kOiEwLERPTUFjdGl2YXRlOiEwLERPTUZvY3VzSW46ITAsRE9NRm9jdXNPdXQ6ITAsa2V5cHJlc3M6ITB9LENkPXtET01BdHRyTW9kaWZpZWQ6ITAsRE9NQXR0cmlidXRlTmFtZUNoYW5nZWQ6ITAsRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkOiEwLERPTUVsZW1lbnROYW1lQ2hhbmdlZDohMCxET01Ob2RlSW5zZXJ0ZWQ6ITAsRE9NTm9kZUluc2VydGVkSW50b0RvY3VtZW50OiEwLERPTU5vZGVSZW1vdmVkOiEwLERPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50OiEwLERPTVN1YnRyZWVNb2RpZmllZDohMH07ZnVuY3Rpb24gRGQoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBOb2RlP2EuX19zaGFkeV9nZXRSb290Tm9kZSgpOmF9XG5mdW5jdGlvbiBFZChhLGIpe3ZhciBjPVtdLGQ9YTtmb3IoYT1EZChhKTtkOyljLnB1c2goZCksZD1kLl9fc2hhZHlfYXNzaWduZWRTbG90P2QuX19zaGFkeV9hc3NpZ25lZFNsb3Q6ZC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmZC5ob3N0JiYoYnx8ZCE9PWEpP2QuaG9zdDpkLl9fc2hhZHlfcGFyZW50Tm9kZTtjW2MubGVuZ3RoLTFdPT09ZG9jdW1lbnQmJmMucHVzaCh3aW5kb3cpO3JldHVybiBjfWZ1bmN0aW9uIEZkKGEpe2EuX19jb21wb3NlZFBhdGh8fChhLl9fY29tcG9zZWRQYXRoPUVkKGEudGFyZ2V0LCEwKSk7cmV0dXJuIGEuX19jb21wb3NlZFBhdGh9ZnVuY3Rpb24gR2QoYSxiKXtpZighTylyZXR1cm4gYTthPUVkKGEsITApO2Zvcih2YXIgYz0wLGQsZT12b2lkIDAsZixnPXZvaWQgMDtjPGIubGVuZ3RoO2MrKylpZihkPWJbY10sZj1EZChkKSxmIT09ZSYmKGc9YS5pbmRleE9mKGYpLGU9ZiksIU8oZil8fC0xPGcpcmV0dXJuIGR9XG5mdW5jdGlvbiBIZChhKXtmdW5jdGlvbiBiKGMsZCl7Yz1uZXcgYShjLGQpO2MuX19jb21wb3NlZD1kJiYhIWQuY29tcG9zZWQ7cmV0dXJuIGN9Yi5fX3Byb3RvX189YTtiLnByb3RvdHlwZT1hLnByb3RvdHlwZTtyZXR1cm4gYn12YXIgSWQ9e2ZvY3VzOiEwLGJsdXI6ITB9O2Z1bmN0aW9uIEpkKGEpe3JldHVybiBhLl9fdGFyZ2V0IT09YS50YXJnZXR8fGEuX19yZWxhdGVkVGFyZ2V0IT09YS5yZWxhdGVkVGFyZ2V0fWZ1bmN0aW9uIEtkKGEsYixjKXtpZihjPWIuX19oYW5kbGVycyYmYi5fX2hhbmRsZXJzW2EudHlwZV0mJmIuX19oYW5kbGVyc1thLnR5cGVdW2NdKWZvcih2YXIgZD0wLGU7KGU9Y1tkXSkmJighSmQoYSl8fGEudGFyZ2V0IT09YS5yZWxhdGVkVGFyZ2V0KSYmKGUuY2FsbChiLGEpLCFhLl9faW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKTtkKyspO31cbmZ1bmN0aW9uIExkKGEpe3ZhciBiPWEuY29tcG9zZWRQYXRoKCksYz1iLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gR2QoayxiKX0pLGQ9YS5idWJibGVzO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwiY3VycmVudFRhcmdldFwiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ319KTt2YXIgZT1FdmVudC5DQVBUVVJJTkdfUEhBU0U7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsXCJldmVudFBoYXNlXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlfX0pO2Zvcih2YXIgZj1iLmxlbmd0aC0xOzA8PWY7Zi0tKXt2YXIgZz1iW2ZdO2U9Zz09PWNbZl0/RXZlbnQuQVRfVEFSR0VUOkV2ZW50LkNBUFRVUklOR19QSEFTRTtLZChhLGcsXCJjYXB0dXJlXCIpO2lmKGEucmEpcmV0dXJufWZvcihmPTA7ZjxiLmxlbmd0aDtmKyspe2c9YltmXTt2YXIgaD1nPT09Y1tmXTtpZihofHxkKWlmKGU9aD9FdmVudC5BVF9UQVJHRVQ6XG5FdmVudC5CVUJCTElOR19QSEFTRSxLZChhLGcsXCJidWJibGVcIiksYS5yYSlyZXR1cm59ZT0wO2c9bnVsbH1mdW5jdGlvbiBNZChhLGIsYyxkLGUsZil7Zm9yKHZhciBnPTA7ZzxhLmxlbmd0aDtnKyspe3ZhciBoPWFbZ10saz1oLnR5cGUsbD1oLmNhcHR1cmUsbT1oLm9uY2UscT1oLnBhc3NpdmU7aWYoYj09PWgubm9kZSYmYz09PWsmJmQ9PT1sJiZlPT09bSYmZj09PXEpcmV0dXJuIGd9cmV0dXJuLTF9ZnVuY3Rpb24gTmQoYSl7U2MoKTtyZXR1cm4hTi5mYSYmdGhpcyBpbnN0YW5jZW9mIE5vZGUmJiFFYyhkb2N1bWVudCx0aGlzKT8oYS5fX3RhcmdldHx8T2QoYSx0aGlzKSxMZChhKSk6dGhpcy5fX3NoYWR5X25hdGl2ZV9kaXNwYXRjaEV2ZW50KGEpfVxuZnVuY3Rpb24gUGQoYSxiLGMpe3ZhciBkPUFkKGMpLGU9ZC5jYXB0dXJlLGY9ZC5vbmNlLGc9ZC5wYXNzaXZlLGg9ZC5MYTtkPWQuSmE7aWYoYil7dmFyIGs9dHlwZW9mIGI7aWYoXCJmdW5jdGlvblwiPT09a3x8XCJvYmplY3RcIj09PWspaWYoXCJvYmplY3RcIiE9PWt8fGIuaGFuZGxlRXZlbnQmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBiLmhhbmRsZUV2ZW50KXtpZihDZFthXSlyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9hZGRFdmVudExpc3RlbmVyKGEsYixkKTt2YXIgbD1ofHx0aGlzO2lmKGg9Ylt4ZF0pe2lmKC0xPE1kKGgsbCxhLGUsZixnKSlyZXR1cm59ZWxzZSBiW3hkXT1bXTtoPWZ1bmN0aW9uKG0pe2YmJnRoaXMuX19zaGFkeV9yZW1vdmVFdmVudExpc3RlbmVyKGEsYixjKTttLl9fdGFyZ2V0fHxPZChtKTtpZihsIT09dGhpcyl7dmFyIHE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLFwiY3VycmVudFRhcmdldFwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobSxcImN1cnJlbnRUYXJnZXRcIixcbntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sY29uZmlndXJhYmxlOiEwfSk7dmFyIEg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLFwiZXZlbnRQaGFzZVwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobSxcImV2ZW50UGhhc2VcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGU/RXZlbnQuQ0FQVFVSSU5HX1BIQVNFOkV2ZW50LkJVQkJMSU5HX1BIQVNFfX0pfW0uX19wcmV2aW91c0N1cnJlbnRUYXJnZXQ9bS5jdXJyZW50VGFyZ2V0O2lmKCFPKGwpJiZcInNsb3RcIiE9PWwubG9jYWxOYW1lfHwtMSE9bS5jb21wb3NlZFBhdGgoKS5pbmRleE9mKGwpKWlmKG0uY29tcG9zZWR8fC0xPG0uY29tcG9zZWRQYXRoKCkuaW5kZXhPZihsKSlpZihKZChtKSYmbS50YXJnZXQ9PT1tLnJlbGF0ZWRUYXJnZXQpbS5ldmVudFBoYXNlPT09RXZlbnQuQlVCQkxJTkdfUEhBU0UmJm0uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7ZWxzZSBpZihtLmV2ZW50UGhhc2U9PT1cbkV2ZW50LkNBUFRVUklOR19QSEFTRXx8bS5idWJibGVzfHxtLnRhcmdldD09PWx8fGwgaW5zdGFuY2VvZiBXaW5kb3cpe3ZhciBDPVwiZnVuY3Rpb25cIj09PWs/Yi5jYWxsKGwsbSk6Yi5oYW5kbGVFdmVudCYmYi5oYW5kbGVFdmVudChtKTtsIT09dGhpcyYmKHE/KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLFwiY3VycmVudFRhcmdldFwiLHEpLHE9bnVsbCk6ZGVsZXRlIG0uY3VycmVudFRhcmdldCxIPyhPYmplY3QuZGVmaW5lUHJvcGVydHkobSxcImV2ZW50UGhhc2VcIixIKSxIPW51bGwpOmRlbGV0ZSBtLmV2ZW50UGhhc2UpO3JldHVybiBDfX07Ylt4ZF0ucHVzaCh7bm9kZTpsLHR5cGU6YSxjYXB0dXJlOmUsb25jZTpmLHBhc3NpdmU6ZyxwYjpofSk7dGhpcy5fX2hhbmRsZXJzPXRoaXMuX19oYW5kbGVyc3x8e307dGhpcy5fX2hhbmRsZXJzW2FdPXRoaXMuX19oYW5kbGVyc1thXXx8e2NhcHR1cmU6W10sYnViYmxlOltdfTt0aGlzLl9faGFuZGxlcnNbYV1bZT9cImNhcHR1cmVcIjpcImJ1YmJsZVwiXS5wdXNoKGgpO1xuSWRbYV18fHRoaXMuX19zaGFkeV9uYXRpdmVfYWRkRXZlbnRMaXN0ZW5lcihhLGgsZCl9fX1cbmZ1bmN0aW9uIFFkKGEsYixjKXtpZihiKXt2YXIgZD1BZChjKTtjPWQuY2FwdHVyZTt2YXIgZT1kLm9uY2UsZj1kLnBhc3NpdmUsZz1kLkxhO2Q9ZC5KYTtpZihDZFthXSlyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9yZW1vdmVFdmVudExpc3RlbmVyKGEsYixkKTt2YXIgaD1nfHx0aGlzO2c9dm9pZCAwO3ZhciBrPW51bGw7dHJ5e2s9Ylt4ZF19Y2F0Y2gobCl7fWsmJihlPU1kKGssaCxhLGMsZSxmKSwtMTxlJiYoZz1rLnNwbGljZShlLDEpWzBdLnBiLGsubGVuZ3RofHwoYlt4ZF09dm9pZCAwKSkpO3RoaXMuX19zaGFkeV9uYXRpdmVfcmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGd8fGIsZCk7ZyYmdGhpcy5fX2hhbmRsZXJzJiZ0aGlzLl9faGFuZGxlcnNbYV0mJihhPXRoaXMuX19oYW5kbGVyc1thXVtjP1wiY2FwdHVyZVwiOlwiYnViYmxlXCJdLGI9YS5pbmRleE9mKGcpLC0xPGImJmEuc3BsaWNlKGIsMSkpfX1cbmZ1bmN0aW9uIFJkKCl7Zm9yKHZhciBhIGluIElkKXdpbmRvdy5fX3NoYWR5X25hdGl2ZV9hZGRFdmVudExpc3RlbmVyKGEsZnVuY3Rpb24oYil7Yi5fX3RhcmdldHx8KE9kKGIpLExkKGIpKX0sITApfVxudmFyIFNkPVEoe2dldCBjb21wb3NlZCgpe3ZvaWQgMD09PXRoaXMuX19jb21wb3NlZCYmKHlkP3RoaXMuX19jb21wb3NlZD1cImZvY3VzaW5cIj09PXRoaXMudHlwZXx8XCJmb2N1c291dFwiPT09dGhpcy50eXBlfHx5ZCh0aGlzKTohMSE9PXRoaXMuaXNUcnVzdGVkJiYodGhpcy5fX2NvbXBvc2VkPUJkW3RoaXMudHlwZV0pKTtyZXR1cm4gdGhpcy5fX2NvbXBvc2VkfHwhMX0sY29tcG9zZWRQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fX2NvbXBvc2VkUGF0aHx8KHRoaXMuX19jb21wb3NlZFBhdGg9RWQodGhpcy5fX3RhcmdldCx0aGlzLmNvbXBvc2VkKSk7cmV0dXJuIHRoaXMuX19jb21wb3NlZFBhdGh9LGdldCB0YXJnZXQoKXtyZXR1cm4gR2QodGhpcy5jdXJyZW50VGFyZ2V0fHx0aGlzLl9fcHJldmlvdXNDdXJyZW50VGFyZ2V0LHRoaXMuY29tcG9zZWRQYXRoKCkpfSxnZXQgcmVsYXRlZFRhcmdldCgpe2lmKCF0aGlzLl9fcmVsYXRlZFRhcmdldClyZXR1cm4gbnVsbDt0aGlzLl9fcmVsYXRlZFRhcmdldENvbXBvc2VkUGF0aHx8XG4odGhpcy5fX3JlbGF0ZWRUYXJnZXRDb21wb3NlZFBhdGg9RWQodGhpcy5fX3JlbGF0ZWRUYXJnZXQsITApKTtyZXR1cm4gR2QodGhpcy5jdXJyZW50VGFyZ2V0fHx0aGlzLl9fcHJldmlvdXNDdXJyZW50VGFyZ2V0LHRoaXMuX19yZWxhdGVkVGFyZ2V0Q29tcG9zZWRQYXRoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7RXZlbnQucHJvdG90eXBlLnN0b3BQcm9wYWdhdGlvbi5jYWxsKHRoaXMpO3RoaXMucmE9ITB9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe0V2ZW50LnByb3RvdHlwZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24uY2FsbCh0aGlzKTt0aGlzLnJhPXRoaXMuX19pbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9ITB9fSk7XG5mdW5jdGlvbiBPZChhLGIpe2I9dm9pZCAwPT09Yj9hLnRhcmdldDpiO2EuX190YXJnZXQ9YjthLl9fcmVsYXRlZFRhcmdldD1hLnJlbGF0ZWRUYXJnZXQ7aWYoTi5IKXtiPU9iamVjdC5nZXRQcm90b3R5cGVPZihhKTtpZighYi5oYXNPd25Qcm9wZXJ0eShcIl9fc2hhZHlfcGF0Y2hlZFByb3RvXCIpKXt2YXIgYz1PYmplY3QuY3JlYXRlKGIpO2MuX19zaGFkeV9zb3VyY2VQcm90bz1iO1AoYyxTZCk7Yi5fX3NoYWR5X3BhdGNoZWRQcm90bz1jfWEuX19wcm90b19fPWIuX19zaGFkeV9wYXRjaGVkUHJvdG99ZWxzZSBQKGEsU2QpfXZhciBUZD1IZChFdmVudCksVWQ9SGQoQ3VzdG9tRXZlbnQpLFZkPUhkKE1vdXNlRXZlbnQpO1xuZnVuY3Rpb24gV2QoKXtpZigheWQmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXZlbnQucHJvdG90eXBlLFwiaXNUcnVzdGVkXCIpKXt2YXIgYT1mdW5jdGlvbigpe3ZhciBiPW5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNvbXBvc2VkOiEwfSk7dGhpcy5fX3NoYWR5X2Rpc3BhdGNoRXZlbnQoYil9O0VsZW1lbnQucHJvdG90eXBlLmNsaWNrP0VsZW1lbnQucHJvdG90eXBlLmNsaWNrPWE6SFRNTEVsZW1lbnQucHJvdG90eXBlLmNsaWNrJiYoSFRNTEVsZW1lbnQucHJvdG90eXBlLmNsaWNrPWEpfX1cbnZhciBYZD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhFbGVtZW50LnByb3RvdHlwZSkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVyblwib25cIj09PWEuc3Vic3RyaW5nKDAsMil9KSxZZD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhIVE1MRWxlbWVudC5wcm90b3R5cGUpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm5cIm9uXCI9PT1hLnN1YnN0cmluZygwLDIpfSk7ZnVuY3Rpb24gWmQoYSl7cmV0dXJue3NldDpmdW5jdGlvbihiKXt2YXIgYz1EKHRoaXMpLGQ9YS5zdWJzdHJpbmcoMik7Yy5UfHwoYy5UPXt9KTtjLlRbYV0mJnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLGMuVFthXSk7dGhpcy5fX3NoYWR5X2FkZEV2ZW50TGlzdGVuZXIoZCxiKTtjLlRbYV09Yn0sZ2V0OmZ1bmN0aW9uKCl7dmFyIGI9TCh0aGlzKTtyZXR1cm4gYiYmYi5UJiZiLlRbYV19LGNvbmZpZ3VyYWJsZTohMH19O2Z1bmN0aW9uICRkKGEsYil7cmV0dXJue2luZGV4OmEsZ2E6W10sbmE6Yn19XG5mdW5jdGlvbiBhZShhLGIsYyxkKXt2YXIgZT0wLGY9MCxnPTAsaD0wLGs9TWF0aC5taW4oYi1lLGQtZik7aWYoMD09ZSYmMD09ZilhOntmb3IoZz0wO2c8aztnKyspaWYoYVtnXSE9PWNbZ10pYnJlYWsgYTtnPWt9aWYoYj09YS5sZW5ndGgmJmQ9PWMubGVuZ3RoKXtoPWEubGVuZ3RoO2Zvcih2YXIgbD1jLmxlbmd0aCxtPTA7bTxrLWcmJmJlKGFbLS1oXSxjWy0tbF0pOyltKys7aD1tfWUrPWc7Zis9ZztiLT1oO2QtPWg7aWYoMD09Yi1lJiYwPT1kLWYpcmV0dXJuW107aWYoZT09Yil7Zm9yKGI9JGQoZSwwKTtmPGQ7KWIuZ2EucHVzaChjW2YrK10pO3JldHVybltiXX1pZihmPT1kKXJldHVyblskZChlLGItZSldO2s9ZTtnPWY7ZD1kLWcrMTtoPWItaysxO2I9QXJyYXkoZCk7Zm9yKGw9MDtsPGQ7bCsrKWJbbF09QXJyYXkoaCksYltsXVswXT1sO2ZvcihsPTA7bDxoO2wrKyliWzBdW2xdPWw7Zm9yKGw9MTtsPGQ7bCsrKWZvcihtPTE7bTxoO20rKylpZihhW2srbS0xXT09PWNbZytsLTFdKWJbbF1bbV09XG5iW2wtMV1bbS0xXTtlbHNle3ZhciBxPWJbbC0xXVttXSsxLEg9YltsXVttLTFdKzE7YltsXVttXT1xPEg/cTpIfWs9Yi5sZW5ndGgtMTtnPWJbMF0ubGVuZ3RoLTE7ZD1iW2tdW2ddO2ZvcihhPVtdOzA8a3x8MDxnOykwPT1rPyhhLnB1c2goMiksZy0tKTowPT1nPyhhLnB1c2goMyksay0tKTooaD1iW2stMV1bZy0xXSxsPWJbay0xXVtnXSxtPWJba11bZy0xXSxxPWw8bT9sPGg/bDpoOm08aD9tOmgscT09aD8oaD09ZD9hLnB1c2goMCk6KGEucHVzaCgxKSxkPWgpLGstLSxnLS0pOnE9PWw/KGEucHVzaCgzKSxrLS0sZD1sKTooYS5wdXNoKDIpLGctLSxkPW0pKTthLnJldmVyc2UoKTtiPXZvaWQgMDtrPVtdO2ZvcihnPTA7ZzxhLmxlbmd0aDtnKyspc3dpdGNoKGFbZ10pe2Nhc2UgMDpiJiYoay5wdXNoKGIpLGI9dm9pZCAwKTtlKys7ZisrO2JyZWFrO2Nhc2UgMTpifHwoYj0kZChlLDApKTtiLm5hKys7ZSsrO2IuZ2EucHVzaChjW2ZdKTtmKys7YnJlYWs7Y2FzZSAyOmJ8fChiPSRkKGUsXG4wKSk7Yi5uYSsrO2UrKzticmVhaztjYXNlIDM6Ynx8KGI9JGQoZSwwKSksYi5nYS5wdXNoKGNbZl0pLGYrK31iJiZrLnB1c2goYik7cmV0dXJuIGt9ZnVuY3Rpb24gYmUoYSxiKXtyZXR1cm4gYT09PWJ9O3ZhciBjZT1RKHtkaXNwYXRjaEV2ZW50Ok5kLGFkZEV2ZW50TGlzdGVuZXI6UGQscmVtb3ZlRXZlbnRMaXN0ZW5lcjpRZH0pO3ZhciBkZT1udWxsO2Z1bmN0aW9uIGVlKCl7ZGV8fChkZT13aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbSk7cmV0dXJuIGRlfHxudWxsfWZ1bmN0aW9uIGZlKGEsYixjKXt2YXIgZD1lZSgpO3JldHVybiBkJiZcImNsYXNzXCI9PT1iPyhkLnNldEVsZW1lbnRDbGFzcyhhLGMpLCEwKTohMX1mdW5jdGlvbiBnZShhLGIpe3ZhciBjPWVlKCk7YyYmYy51bnNjb3BlTm9kZShhLGIpfWZ1bmN0aW9uIGhlKGEsYil7dmFyIGM9ZWUoKTtpZighYylyZXR1cm4hMDtpZihhLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXtjPSEwO2ZvcihhPWEuX19zaGFkeV9maXJzdENoaWxkO2E7YT1hLl9fc2hhZHlfbmV4dFNpYmxpbmcpYz1jJiZoZShhLGIpO3JldHVybiBjfXJldHVybiBhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU/ITA6Yy5jdXJyZW50U2NvcGVGb3JOb2RlKGEpPT09Yn1cbmZ1bmN0aW9uIGllKGEpe2lmKGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm5cIlwiO3ZhciBiPWVlKCk7cmV0dXJuIGI/Yi5jdXJyZW50U2NvcGVGb3JOb2RlKGEpOlwiXCJ9ZnVuY3Rpb24gamUoYSxiKXtpZihhKWZvcihhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJmIoYSksYT1hLl9fc2hhZHlfZmlyc3RDaGlsZDthO2E9YS5fX3NoYWR5X25leHRTaWJsaW5nKWEubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmamUoYSxiKX07dmFyIGtlPXdpbmRvdy5kb2N1bWVudCxsZT1OLmZhLG1lPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTm9kZS5wcm90b3R5cGUsXCJpc0Nvbm5lY3RlZFwiKSxuZT1tZSYmbWUuZ2V0O2Z1bmN0aW9uIHBlKGEpe2Zvcih2YXIgYjtiPWEuX19zaGFkeV9maXJzdENoaWxkOylhLl9fc2hhZHlfcmVtb3ZlQ2hpbGQoYil9ZnVuY3Rpb24gcWUoYSl7dmFyIGI9TChhKTtpZihiJiZ2b2lkIDAhPT1iLnFhKWZvcihiPWEuX19zaGFkeV9maXJzdENoaWxkO2I7Yj1iLl9fc2hhZHlfbmV4dFNpYmxpbmcpcWUoYik7aWYoYT1MKGEpKWEucWE9dm9pZCAwfWZ1bmN0aW9uIHJlKGEpe3ZhciBiPWE7aWYoYSYmXCJzbG90XCI9PT1hLmxvY2FsTmFtZSl7dmFyIGM9TChhKTsoYz1jJiZjLmFhKSYmKGI9Yy5sZW5ndGg/Y1swXTpyZShhLl9fc2hhZHlfbmV4dFNpYmxpbmcpKX1yZXR1cm4gYn1cbmZ1bmN0aW9uIHNlKGEsYixjKXtpZihhPShhPUwoYSkpJiZhLmVhKXtpZihiKWlmKGIubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpZm9yKHZhciBkPTAsZT1iLmNoaWxkTm9kZXMubGVuZ3RoO2Q8ZTtkKyspYS5hZGRlZE5vZGVzLnB1c2goYi5jaGlsZE5vZGVzW2RdKTtlbHNlIGEuYWRkZWROb2Rlcy5wdXNoKGIpO2MmJmEucmVtb3ZlZE5vZGVzLnB1c2goYyk7VWMoYSl9fVxudmFyIHplPVEoe2dldCBwYXJlbnROb2RlKCl7dmFyIGE9TCh0aGlzKTthPWEmJmEucGFyZW50Tm9kZTtyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfcGFyZW50Tm9kZX0sZ2V0IGZpcnN0Q2hpbGQoKXt2YXIgYT1MKHRoaXMpO2E9YSYmYS5maXJzdENoaWxkO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkfSxnZXQgbGFzdENoaWxkKCl7dmFyIGE9TCh0aGlzKTthPWEmJmEubGFzdENoaWxkO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9sYXN0Q2hpbGR9LGdldCBuZXh0U2libGluZygpe3ZhciBhPUwodGhpcyk7YT1hJiZhLm5leHRTaWJsaW5nO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZ30sZ2V0IHByZXZpb3VzU2libGluZygpe3ZhciBhPUwodGhpcyk7YT1hJiZhLnByZXZpb3VzU2libGluZztyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfcHJldmlvdXNTaWJsaW5nfSxcbmdldCBjaGlsZE5vZGVzKCl7aWYodmModGhpcykpe3ZhciBhPUwodGhpcyk7aWYoIWEuY2hpbGROb2Rlcyl7YS5jaGlsZE5vZGVzPVtdO2Zvcih2YXIgYj10aGlzLl9fc2hhZHlfZmlyc3RDaGlsZDtiO2I9Yi5fX3NoYWR5X25leHRTaWJsaW5nKWEuY2hpbGROb2Rlcy5wdXNoKGIpfXZhciBjPWEuY2hpbGROb2Rlc31lbHNlIGM9dGhpcy5fX3NoYWR5X25hdGl2ZV9jaGlsZE5vZGVzO2MuaXRlbT1mdW5jdGlvbihkKXtyZXR1cm4gY1tkXX07cmV0dXJuIGN9LGdldCBwYXJlbnRFbGVtZW50KCl7dmFyIGE9TCh0aGlzKTsoYT1hJiZhLnBhcmVudE5vZGUpJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUmJihhPW51bGwpO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9wYXJlbnRFbGVtZW50fSxnZXQgaXNDb25uZWN0ZWQoKXtpZihuZSYmbmUuY2FsbCh0aGlzKSlyZXR1cm4hMDtpZih0aGlzLm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpcmV0dXJuITE7XG52YXIgYT10aGlzLm93bmVyRG9jdW1lbnQ7aWYobnVsbD09PWF8fEVjKGEsdGhpcykpcmV0dXJuITA7Zm9yKGE9dGhpczthJiYhKGEgaW5zdGFuY2VvZiBEb2N1bWVudCk7KWE9YS5fX3NoYWR5X3BhcmVudE5vZGV8fChPKGEpP2EuaG9zdDp2b2lkIDApO3JldHVybiEhKGEmJmEgaW5zdGFuY2VvZiBEb2N1bWVudCl9LGdldCB0ZXh0Q29udGVudCgpe2lmKHZjKHRoaXMpKXtmb3IodmFyIGE9W10sYj10aGlzLl9fc2hhZHlfZmlyc3RDaGlsZDtiO2I9Yi5fX3NoYWR5X25leHRTaWJsaW5nKWIubm9kZVR5cGUhPT1Ob2RlLkNPTU1FTlRfTk9ERSYmYS5wdXNoKGIuX19zaGFkeV90ZXh0Q29udGVudCk7cmV0dXJuIGEuam9pbihcIlwiKX1yZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV90ZXh0Q29udGVudH0sc2V0IHRleHRDb250ZW50KGEpe2lmKFwidW5kZWZpbmVkXCI9PT10eXBlb2YgYXx8bnVsbD09PWEpYT1cIlwiO3N3aXRjaCh0aGlzLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOmNhc2UgTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFOmlmKCF2Yyh0aGlzKSYmXG5OLkgpe3ZhciBiPXRoaXMuX19zaGFkeV9maXJzdENoaWxkOyhiIT10aGlzLl9fc2hhZHlfbGFzdENoaWxkfHxiJiZiLm5vZGVUeXBlIT1Ob2RlLlRFWFRfTk9ERSkmJnBlKHRoaXMpO3RoaXMuX19zaGFkeV9uYXRpdmVfdGV4dENvbnRlbnQ9YX1lbHNlIHBlKHRoaXMpLCgwPGEubGVuZ3RofHx0aGlzLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpJiZ0aGlzLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGEpKTticmVhaztkZWZhdWx0OnRoaXMubm9kZVZhbHVlPWF9fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYSxiKXtpZih0aGlzLm93bmVyRG9jdW1lbnQhPT1rZSYmYS5vd25lckRvY3VtZW50IT09a2UpcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfaW5zZXJ0QmVmb3JlKGEsYiksYTtpZihhPT09dGhpcyl0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmRDaGlsZCcgb24gJ05vZGUnOiBUaGUgbmV3IGNoaWxkIGVsZW1lbnQgY29udGFpbnMgdGhlIHBhcmVudC5cIik7XG5pZihiKXt2YXIgYz1MKGIpO2M9YyYmYy5wYXJlbnROb2RlO2lmKHZvaWQgMCE9PWMmJmMhPT10aGlzfHx2b2lkIDA9PT1jJiZiLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGUhPT10aGlzKXRocm93IEVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luc2VydEJlZm9yZScgb24gJ05vZGUnOiBUaGUgbm9kZSBiZWZvcmUgd2hpY2ggdGhlIG5ldyBub2RlIGlzIHRvIGJlIGluc2VydGVkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZS5cIik7fWlmKGI9PT1hKXJldHVybiBhO3NlKHRoaXMsYSk7dmFyIGQ9W10sZT0oYz10ZSh0aGlzKSk/Yy5ob3N0LmxvY2FsTmFtZTppZSh0aGlzKSxmPWEuX19zaGFkeV9wYXJlbnROb2RlO2lmKGYpe3ZhciBnPWllKGEpO3ZhciBoPSEhY3x8IXRlKGEpfHxsZSYmdm9pZCAwIT09dGhpcy5fX25vSW5zZXJ0aW9uUG9pbnQ7Zi5fX3NoYWR5X3JlbW92ZUNoaWxkKGEsaCl9Zj0hMDt2YXIgaz0oIWxlfHx2b2lkIDA9PT1hLl9fbm9JbnNlcnRpb25Qb2ludCYmdm9pZCAwPT09XG50aGlzLl9fbm9JbnNlcnRpb25Qb2ludCkmJiFoZShhLGUpLGw9YyYmIWEuX19ub0luc2VydGlvblBvaW50JiYoIWxlfHxhLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKTtpZihsfHxrKWsmJihnPWd8fGllKGEpKSxqZShhLGZ1bmN0aW9uKG0pe2wmJlwic2xvdFwiPT09bS5sb2NhbE5hbWUmJmQucHVzaChtKTtpZihrKXt2YXIgcT1nO2VlKCkmJihxJiZnZShtLHEpLChxPWVlKCkpJiZxLnNjb3BlTm9kZShtLGUpKX19KTtkLmxlbmd0aCYmKHVlKGMpLGMuaS5wdXNoLmFwcGx5KGMuaSx4KGQpKSx2ZShjKSk7dmModGhpcykmJih3ZShhLHRoaXMsYiksaD1MKHRoaXMpLGgucm9vdD8oZj0hMSx3Yyh0aGlzKSYmdmUoaC5yb290KSk6YyYmXCJzbG90XCI9PT10aGlzLmxvY2FsTmFtZSYmKGY9ITEsdmUoYykpKTtmPyhjPU8odGhpcyk/dGhpcy5ob3N0OnRoaXMsYj8oYj1yZShiKSxjLl9fc2hhZHlfbmF0aXZlX2luc2VydEJlZm9yZShhLGIpKTpjLl9fc2hhZHlfbmF0aXZlX2FwcGVuZENoaWxkKGEpKTpcbmEub3duZXJEb2N1bWVudCE9PXRoaXMub3duZXJEb2N1bWVudCYmdGhpcy5vd25lckRvY3VtZW50LmFkb3B0Tm9kZShhKTtyZXR1cm4gYX0sYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oYSl7aWYodGhpcyE9YXx8IU8oYSkpcmV0dXJuIHRoaXMuX19zaGFkeV9pbnNlcnRCZWZvcmUoYSl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKGEsYil7Yj12b2lkIDA9PT1iPyExOmI7aWYodGhpcy5vd25lckRvY3VtZW50IT09a2UpcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQ2hpbGQoYSk7aWYoYS5fX3NoYWR5X3BhcmVudE5vZGUhPT10aGlzKXRocm93IEVycm9yKFwiVGhlIG5vZGUgdG8gYmUgcmVtb3ZlZCBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIG5vZGU6IFwiK2EpO3NlKHRoaXMsbnVsbCxhKTt2YXIgYz10ZShhKSxkPWMmJnhlKGMsYSksZT1MKHRoaXMpO2lmKHZjKHRoaXMpJiYoeWUoYSx0aGlzKSx3Yyh0aGlzKSkpe3ZlKGUucm9vdCk7dmFyIGY9ITB9aWYoZWUoKSYmIWImJmMmJmEubm9kZVR5cGUhPT1cbk5vZGUuVEVYVF9OT0RFKXt2YXIgZz1pZShhKTtqZShhLGZ1bmN0aW9uKGgpe2dlKGgsZyl9KX1xZShhKTtjJiYoKGI9XCJzbG90XCI9PT10aGlzLmxvY2FsTmFtZSkmJihmPSEwKSwoZHx8YikmJnZlKGMpKTtmfHwoZj1PKHRoaXMpP3RoaXMuaG9zdDp0aGlzLCghZS5yb290JiZcInNsb3RcIiE9PWEubG9jYWxOYW1lfHxmPT09YS5fX3NoYWR5X25hdGl2ZV9wYXJlbnROb2RlKSYmZi5fX3NoYWR5X25hdGl2ZV9yZW1vdmVDaGlsZChhKSk7cmV0dXJuIGF9LHJlcGxhY2VDaGlsZDpmdW5jdGlvbihhLGIpe3RoaXMuX19zaGFkeV9pbnNlcnRCZWZvcmUoYSxiKTt0aGlzLl9fc2hhZHlfcmVtb3ZlQ2hpbGQoYik7cmV0dXJuIGF9LGNsb25lTm9kZTpmdW5jdGlvbihhKXtpZihcInRlbXBsYXRlXCI9PXRoaXMubG9jYWxOYW1lKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX2Nsb25lTm9kZShhKTt2YXIgYj10aGlzLl9fc2hhZHlfbmF0aXZlX2Nsb25lTm9kZSghMSk7aWYoYSYmYi5ub2RlVHlwZSE9PVxuTm9kZS5BVFRSSUJVVEVfTk9ERSl7YT10aGlzLl9fc2hhZHlfZmlyc3RDaGlsZDtmb3IodmFyIGM7YTthPWEuX19zaGFkeV9uZXh0U2libGluZyljPWEuX19zaGFkeV9jbG9uZU5vZGUoITApLGIuX19zaGFkeV9hcHBlbmRDaGlsZChjKX1yZXR1cm4gYn0sZ2V0Um9vdE5vZGU6ZnVuY3Rpb24oYSl7aWYodGhpcyYmdGhpcy5ub2RlVHlwZSl7dmFyIGI9RCh0aGlzKSxjPWIucWE7dm9pZCAwPT09YyYmKE8odGhpcyk/KGM9dGhpcyxiLnFhPWMpOihjPShjPXRoaXMuX19zaGFkeV9wYXJlbnROb2RlKT9jLl9fc2hhZHlfZ2V0Um9vdE5vZGUoYSk6dGhpcyxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuX19zaGFkeV9uYXRpdmVfY29udGFpbnModGhpcykmJihiLnFhPWMpKSk7cmV0dXJuIGN9fSxjb250YWluczpmdW5jdGlvbihhKXtyZXR1cm4gR2ModGhpcyxhKX19KTt2YXIgQmU9USh7Z2V0IGFzc2lnbmVkU2xvdCgpe3ZhciBhPXRoaXMuX19zaGFkeV9wYXJlbnROb2RlOyhhPWEmJmEuX19zaGFkeV9zaGFkb3dSb290KSYmQWUoYSk7cmV0dXJuKGE9TCh0aGlzKSkmJmEuYXNzaWduZWRTbG90fHxudWxsfX0pO2Z1bmN0aW9uIENlKGEsYixjKXt2YXIgZD1bXTtEZShhLGIsYyxkKTtyZXR1cm4gZH1mdW5jdGlvbiBEZShhLGIsYyxkKXtmb3IoYT1hLl9fc2hhZHlfZmlyc3RDaGlsZDthO2E9YS5fX3NoYWR5X25leHRTaWJsaW5nKXt2YXIgZTtpZihlPWEubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSl7ZT1hO3ZhciBmPWIsZz1jLGg9ZCxrPWYoZSk7ayYmaC5wdXNoKGUpO2cmJmcoayk/ZT1rOihEZShlLGYsZyxoKSxlPXZvaWQgMCl9aWYoZSlicmVha319XG52YXIgRWU9e2dldCBmaXJzdEVsZW1lbnRDaGlsZCgpe3ZhciBhPUwodGhpcyk7aWYoYSYmdm9pZCAwIT09YS5maXJzdENoaWxkKXtmb3IoYT10aGlzLl9fc2hhZHlfZmlyc3RDaGlsZDthJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWE9YS5fX3NoYWR5X25leHRTaWJsaW5nO3JldHVybiBhfXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX2ZpcnN0RWxlbWVudENoaWxkfSxnZXQgbGFzdEVsZW1lbnRDaGlsZCgpe3ZhciBhPUwodGhpcyk7aWYoYSYmdm9pZCAwIT09YS5sYXN0Q2hpbGQpe2ZvcihhPXRoaXMuX19zaGFkeV9sYXN0Q2hpbGQ7YSYmYS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFOylhPWEuX19zaGFkeV9wcmV2aW91c1NpYmxpbmc7cmV0dXJuIGF9cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfbGFzdEVsZW1lbnRDaGlsZH0sZ2V0IGNoaWxkcmVuKCl7cmV0dXJuIHZjKHRoaXMpP0hjKEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChKYyh0aGlzKSxcbmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9KSk6dGhpcy5fX3NoYWR5X25hdGl2ZV9jaGlsZHJlbn0sZ2V0IGNoaWxkRWxlbWVudENvdW50KCl7dmFyIGE9dGhpcy5fX3NoYWR5X2NoaWxkcmVuO3JldHVybiBhP2EubGVuZ3RoOjB9fSxGZT1RKChFZS5hcHBlbmQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO3RoaXMuX19zaGFkeV9pbnNlcnRCZWZvcmUoT2MuYXBwbHkobnVsbCx4KGIpKSxudWxsKX0sRWUucHJlcGVuZD1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107dGhpcy5fX3NoYWR5X2luc2VydEJlZm9yZShPYy5hcHBseShudWxsLHgoYikpLHRoaXMuX19zaGFkeV9maXJzdENoaWxkKX0sRWUucmVwbGFjZUNoaWxkcmVuPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPVxuYXJndW1lbnRzW2NdO2Zvcig7bnVsbCE9PShjPXRoaXMuX19zaGFkeV9maXJzdENoaWxkKTspdGhpcy5fX3NoYWR5X3JlbW92ZUNoaWxkKGMpO3RoaXMuX19zaGFkeV9pbnNlcnRCZWZvcmUoT2MuYXBwbHkobnVsbCx4KGIpKSxudWxsKX0sRWUpKSxHZT1RKHtxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGEpe3JldHVybiBDZSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVybiB6Yy5jYWxsKGIsYSl9LGZ1bmN0aW9uKGIpe3JldHVybiEhYn0pWzBdfHxudWxsfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGEsYil7aWYoYil7Yj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9fc2hhZHlfbmF0aXZlX3F1ZXJ5U2VsZWN0b3JBbGwoYSkpO3ZhciBjPXRoaXMuX19zaGFkeV9nZXRSb290Tm9kZSgpO3JldHVybiBIYyhiLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4gZC5fX3NoYWR5X2dldFJvb3ROb2RlKCk9PWN9KSl9cmV0dXJuIEhjKENlKHRoaXMsZnVuY3Rpb24oZCl7cmV0dXJuIHpjLmNhbGwoZCxcbmEpfSkpfX0pLEhlPU4uZmEmJiFOLko/TWMoe30sRmUpOkZlO01jKEZlLEdlKTt2YXIgSWU9USh7YWZ0ZXI6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO2M9dGhpcy5fX3NoYWR5X3BhcmVudE5vZGU7aWYobnVsbCE9PWMpe3ZhciBkPXRoaXMuX19zaGFkeV9uZXh0U2libGluZztjLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKE9jLmFwcGx5KG51bGwseChiKSksZCl9fSxiZWZvcmU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO2M9dGhpcy5fX3NoYWR5X3BhcmVudE5vZGU7bnVsbCE9PWMmJmMuX19zaGFkeV9pbnNlcnRCZWZvcmUoT2MuYXBwbHkobnVsbCx4KGIpKSx0aGlzKX0scmVtb3ZlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fX3NoYWR5X3BhcmVudE5vZGU7bnVsbCE9PWEmJmEuX19zaGFkeV9yZW1vdmVDaGlsZCh0aGlzKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109XG5hcmd1bWVudHNbY107Yz10aGlzLl9fc2hhZHlfcGFyZW50Tm9kZTtpZihudWxsIT09Yyl7dmFyIGQ9dGhpcy5fX3NoYWR5X25leHRTaWJsaW5nO2MuX19zaGFkeV9yZW1vdmVDaGlsZCh0aGlzKTtjLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKE9jLmFwcGx5KG51bGwseChiKSksZCl9fX0pO3ZhciBKZT13aW5kb3cuZG9jdW1lbnQ7ZnVuY3Rpb24gS2UoYSxiKXtpZihcInNsb3RcIj09PWIpYT1hLl9fc2hhZHlfcGFyZW50Tm9kZSx3YyhhKSYmdmUoTChhKS5yb290KTtlbHNlIGlmKFwic2xvdFwiPT09YS5sb2NhbE5hbWUmJlwibmFtZVwiPT09YiYmKGI9dGUoYSkpKXtpZihiLmcpe0xlKGIpO3ZhciBjPWEuUWEsZD1NZShhKTtpZihkIT09Yyl7Yz1iLmhbY107dmFyIGU9Yy5pbmRleE9mKGEpOzA8PWUmJmMuc3BsaWNlKGUsMSk7Yz1iLmhbZF18fChiLmhbZF09W10pO2MucHVzaChhKTsxPGMubGVuZ3RoJiYoYi5oW2RdPU5lKGMpKX19dmUoYil9fVxudmFyIE9lPVEoe2dldCBwcmV2aW91c0VsZW1lbnRTaWJsaW5nKCl7dmFyIGE9TCh0aGlzKTtpZihhJiZ2b2lkIDAhPT1hLnByZXZpb3VzU2libGluZyl7Zm9yKGE9dGhpcy5fX3NoYWR5X3ByZXZpb3VzU2libGluZzthJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWE9YS5fX3NoYWR5X3ByZXZpb3VzU2libGluZztyZXR1cm4gYX1yZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9wcmV2aW91c0VsZW1lbnRTaWJsaW5nfSxnZXQgbmV4dEVsZW1lbnRTaWJsaW5nKCl7dmFyIGE9TCh0aGlzKTtpZihhJiZ2b2lkIDAhPT1hLm5leHRTaWJsaW5nKXtmb3IoYT10aGlzLl9fc2hhZHlfbmV4dFNpYmxpbmc7YSYmYS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFOylhPWEuX19zaGFkeV9uZXh0U2libGluZztyZXR1cm4gYX1yZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9uZXh0RWxlbWVudFNpYmxpbmd9LGdldCBzbG90KCl7cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKFwic2xvdFwiKX0sXG5zZXQgc2xvdChhKXt0aGlzLl9fc2hhZHlfc2V0QXR0cmlidXRlKFwic2xvdFwiLGEpfSxnZXQgY2xhc3NOYW1lKCl7cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCJ9LHNldCBjbGFzc05hbWUoYSl7dGhpcy5fX3NoYWR5X3NldEF0dHJpYnV0ZShcImNsYXNzXCIsYSl9LHNldEF0dHJpYnV0ZTpmdW5jdGlvbihhLGIpe3RoaXMub3duZXJEb2N1bWVudCE9PUplP3RoaXMuX19zaGFkeV9uYXRpdmVfc2V0QXR0cmlidXRlKGEsYik6ZmUodGhpcyxhLGIpfHwodGhpcy5fX3NoYWR5X25hdGl2ZV9zZXRBdHRyaWJ1dGUoYSxiKSxLZSh0aGlzLGEpKX0scmVtb3ZlQXR0cmlidXRlOmZ1bmN0aW9uKGEpe3RoaXMub3duZXJEb2N1bWVudCE9PUplP3RoaXMuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQXR0cmlidXRlKGEpOmZlKHRoaXMsYSxcIlwiKT9cIlwiPT09dGhpcy5nZXRBdHRyaWJ1dGUoYSkmJnRoaXMuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQXR0cmlidXRlKGEpOih0aGlzLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUF0dHJpYnV0ZShhKSxcbktlKHRoaXMsYSkpfX0pO04uZmF8fFhkLmZvckVhY2goZnVuY3Rpb24oYSl7T2VbYV09WmQoYSl9KTtcbnZhciBUZT1RKHthdHRhY2hTaGFkb3c6ZnVuY3Rpb24oYSl7aWYoIXRoaXMpdGhyb3cgRXJyb3IoXCJNdXN0IHByb3ZpZGUgYSBob3N0LlwiKTtpZighYSl0aHJvdyBFcnJvcihcIk5vdCBlbm91Z2ggYXJndW1lbnRzLlwiKTtpZihhLnNoYWR5VXBncmFkZUZyYWdtZW50JiYhTi5OYSl7dmFyIGI9YS5zaGFkeVVwZ3JhZGVGcmFnbWVudDtiLl9fcHJvdG9fXz1TaGFkb3dSb290LnByb3RvdHlwZTtQZShiLHRoaXMsYSk7UWUoYixiKTthPWIuX19ub0luc2VydGlvblBvaW50P251bGw6Yi5xdWVyeVNlbGVjdG9yQWxsKFwic2xvdFwiKTtiLl9fbm9JbnNlcnRpb25Qb2ludD12b2lkIDA7aWYoYSYmYS5sZW5ndGgpe3ZhciBjPWI7dWUoYyk7Yy5pLnB1c2guYXBwbHkoYy5pLHgoYSkpO3ZlKGIpfWIuaG9zdC5fX3NoYWR5X25hdGl2ZV9hcHBlbmRDaGlsZChiKX1lbHNlIGI9bmV3IFJlKFNlLHRoaXMsYSk7cmV0dXJuIHRoaXMuX19DRV9zaGFkb3dSb290PWJ9LGdldCBzaGFkb3dSb290KCl7dmFyIGE9TCh0aGlzKTtcbnJldHVybiBhJiZhLmdifHxudWxsfX0pO01jKE9lLFRlKTt2YXIgVWU9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KFwiaW5lcnRcIiksVmU9USh7Z2V0IGlubmVySFRNTCgpe3JldHVybiB2Yyh0aGlzKT9kZChcInRlbXBsYXRlXCI9PT10aGlzLmxvY2FsTmFtZT90aGlzLmNvbnRlbnQ6dGhpcyxKYyk6dGhpcy5fX3NoYWR5X25hdGl2ZV9pbm5lckhUTUx9LHNldCBpbm5lckhUTUwoYSl7aWYoXCJ0ZW1wbGF0ZVwiPT09dGhpcy5sb2NhbE5hbWUpdGhpcy5fX3NoYWR5X25hdGl2ZV9pbm5lckhUTUw9YTtlbHNle3BlKHRoaXMpO3ZhciBiPXRoaXMubG9jYWxOYW1lfHxcImRpdlwiO2I9dGhpcy5uYW1lc3BhY2VVUkkmJnRoaXMubmFtZXNwYWNlVVJJIT09VWUubmFtZXNwYWNlVVJJP1VlLmNyZWF0ZUVsZW1lbnROUyh0aGlzLm5hbWVzcGFjZVVSSSxiKTpVZS5jcmVhdGVFbGVtZW50KGIpO2ZvcihOLkg/Yi5fX3NoYWR5X25hdGl2ZV9pbm5lckhUTUw9YTpiLmlubmVySFRNTD1hO2E9Yi5fX3NoYWR5X2ZpcnN0Q2hpbGQ7KXRoaXMuX19zaGFkeV9pbnNlcnRCZWZvcmUoYSl9fX0pO3ZhciBXZT1RKHtibHVyOmZ1bmN0aW9uKCl7dmFyIGE9TCh0aGlzKTsoYT0oYT1hJiZhLnJvb3QpJiZhLmFjdGl2ZUVsZW1lbnQpP2EuX19zaGFkeV9ibHVyKCk6dGhpcy5fX3NoYWR5X25hdGl2ZV9ibHVyKCl9fSk7Ti5mYXx8WWQuZm9yRWFjaChmdW5jdGlvbihhKXtXZVthXT1aZChhKX0pO3ZhciBYZT1RKHthc3NpZ25lZE5vZGVzOmZ1bmN0aW9uKGEpe2lmKFwic2xvdFwiPT09dGhpcy5sb2NhbE5hbWUpe3ZhciBiPXRoaXMuX19zaGFkeV9nZXRSb290Tm9kZSgpO2ImJk8oYikmJkFlKGIpO3JldHVybihiPUwodGhpcykpPyhhJiZhLmZsYXR0ZW4/Yi5hYTpiLmFzc2lnbmVkTm9kZXMpfHxbXTpbXX19LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiLGMpe2lmKFwic2xvdFwiIT09dGhpcy5sb2NhbE5hbWV8fFwic2xvdGNoYW5nZVwiPT09YSlQZC5jYWxsKHRoaXMsYSxiLGMpO2Vsc2V7XCJvYmplY3RcIiE9PXR5cGVvZiBjJiYoYz17Y2FwdHVyZTohIWN9KTt2YXIgZD10aGlzLl9fc2hhZHlfcGFyZW50Tm9kZTtpZighZCl0aHJvdyBFcnJvcihcIlNoYWR5RE9NIGNhbm5vdCBhdHRhY2ggZXZlbnQgdG8gc2xvdCB1bmxlc3MgaXQgaGFzIGEgYHBhcmVudE5vZGVgXCIpO2MuVT10aGlzO2QuX19zaGFkeV9hZGRFdmVudExpc3RlbmVyKGEsYixjKX19LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxcbmIsYyl7aWYoXCJzbG90XCIhPT10aGlzLmxvY2FsTmFtZXx8XCJzbG90Y2hhbmdlXCI9PT1hKVFkLmNhbGwodGhpcyxhLGIsYyk7ZWxzZXtcIm9iamVjdFwiIT09dHlwZW9mIGMmJihjPXtjYXB0dXJlOiEhY30pO3ZhciBkPXRoaXMuX19zaGFkeV9wYXJlbnROb2RlO2lmKCFkKXRocm93IEVycm9yKFwiU2hhZHlET00gY2Fubm90IGF0dGFjaCBldmVudCB0byBzbG90IHVubGVzcyBpdCBoYXMgYSBgcGFyZW50Tm9kZWBcIik7Yy5VPXRoaXM7ZC5fX3NoYWR5X3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxiLGMpfX19KTt2YXIgWWU9USh7Z2V0RWxlbWVudEJ5SWQ6ZnVuY3Rpb24oYSl7cmV0dXJuXCJcIj09PWE/bnVsbDpDZSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVybiBiLmlkPT1hfSxmdW5jdGlvbihiKXtyZXR1cm4hIWJ9KVswXXx8bnVsbH19KTtmdW5jdGlvbiBaZShhLGIpe2Zvcih2YXIgYztiJiYhYS5oYXMoYz1iLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKSk7KWI9Yy5ob3N0O3JldHVybiBifWZ1bmN0aW9uICRlKGEpe3ZhciBiPW5ldyBTZXQ7Zm9yKGIuYWRkKGEpO08oYSkmJmEuaG9zdDspYT1hLmhvc3QuX19zaGFkeV9nZXRSb290Tm9kZSgpLGIuYWRkKGEpO3JldHVybiBifVxudmFyIGFmPVwiX19zaGFkeV9uYXRpdmVfXCIrdWMoKSxiZj1RKHtnZXQgYWN0aXZlRWxlbWVudCgpe3ZhciBhPU4uSD9kb2N1bWVudC5fX3NoYWR5X25hdGl2ZV9hY3RpdmVFbGVtZW50OmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aWYoIWF8fCFhLm5vZGVUeXBlKXJldHVybiBudWxsO3ZhciBiPSEhTyh0aGlzKTtpZighKHRoaXM9PT1kb2N1bWVudHx8YiYmdGhpcy5ob3N0IT09YSYmdGhpcy5ob3N0Ll9fc2hhZHlfbmF0aXZlX2NvbnRhaW5zKGEpKSlyZXR1cm4gbnVsbDtmb3IoYj10ZShhKTtiJiZiIT09dGhpczspYT1iLmhvc3QsYj10ZShhKTtyZXR1cm4gdGhpcz09PWRvY3VtZW50P2I/bnVsbDphOmI9PT10aGlzP2E6bnVsbH0sZWxlbWVudHNGcm9tUG9pbnQ6ZnVuY3Rpb24oYSxiKXthPVtdLnNsaWNlLmNhbGwoZG9jdW1lbnRbYWZdKGEsYikpO2I9JGUodGhpcyk7Zm9yKHZhciBjPW5ldyBTZXQsZD0wO2Q8YS5sZW5ndGg7ZCsrKWMuYWRkKFplKGIsYVtkXSkpO3ZhciBlPVtdO2MuZm9yRWFjaChmdW5jdGlvbihmKXtyZXR1cm4gZS5wdXNoKGYpfSk7XG5yZXR1cm4gZX0sZWxlbWVudEZyb21Qb2ludDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9fc2hhZHlfZWxlbWVudHNGcm9tUG9pbnQoYSxiKVswXXx8bnVsbH19KTt2YXIgY2Y9d2luZG93LmRvY3VtZW50LGRmPVEoe2ltcG9ydE5vZGU6ZnVuY3Rpb24oYSxiKXtpZihhLm93bmVyRG9jdW1lbnQhPT1jZnx8XCJ0ZW1wbGF0ZVwiPT09YS5sb2NhbE5hbWUpcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfaW1wb3J0Tm9kZShhLGIpO3ZhciBjPXRoaXMuX19zaGFkeV9uYXRpdmVfaW1wb3J0Tm9kZShhLCExKTtpZihiKWZvcihhPWEuX19zaGFkeV9maXJzdENoaWxkO2E7YT1hLl9fc2hhZHlfbmV4dFNpYmxpbmcpYj10aGlzLl9fc2hhZHlfaW1wb3J0Tm9kZShhLCEwKSxjLl9fc2hhZHlfYXBwZW5kQ2hpbGQoYik7cmV0dXJuIGN9fSk7dmFyIGVmPVEoe2Rpc3BhdGNoRXZlbnQ6TmQsYWRkRXZlbnRMaXN0ZW5lcjpQZC5iaW5kKHdpbmRvdykscmVtb3ZlRXZlbnRMaXN0ZW5lcjpRZC5iaW5kKHdpbmRvdyl9KTt2YXIgZmY9e307T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsXCJwYXJlbnRFbGVtZW50XCIpJiYoZmYucGFyZW50RWxlbWVudD16ZS5wYXJlbnRFbGVtZW50KTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSxcImNvbnRhaW5zXCIpJiYoZmYuY29udGFpbnM9emUuY29udGFpbnMpO09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEVsZW1lbnQucHJvdG90eXBlLFwiY2hpbGRyZW5cIikmJihmZi5jaGlsZHJlbj1GZS5jaGlsZHJlbik7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsXCJpbm5lckhUTUxcIikmJihmZi5pbm5lckhUTUw9VmUuaW5uZXJIVE1MKTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSxcImNsYXNzTmFtZVwiKSYmKGZmLmNsYXNzTmFtZT1PZS5jbGFzc05hbWUpO1xudmFyIGdmPXtFdmVudFRhcmdldDpbY2VdLE5vZGU6W3plLHdpbmRvdy5FdmVudFRhcmdldD9udWxsOmNlXSxUZXh0OltCZV0sQ29tbWVudDpbQmVdLENEQVRBU2VjdGlvbjpbQmVdLFByb2Nlc3NpbmdJbnN0cnVjdGlvbjpbQmVdLEVsZW1lbnQ6W09lLEZlLEllLEJlLCFOLkh8fFwiaW5uZXJIVE1MXCJpbiBFbGVtZW50LnByb3RvdHlwZT9WZTpudWxsLHdpbmRvdy5IVE1MU2xvdEVsZW1lbnQ/bnVsbDpYZV0sSFRNTEVsZW1lbnQ6W1dlLGZmXSxIVE1MU2xvdEVsZW1lbnQ6W1hlXSxEb2N1bWVudEZyYWdtZW50OltIZSxZZV0sRG9jdW1lbnQ6W2RmLEhlLFllLGJmXSxXaW5kb3c6W2VmXSxDaGFyYWN0ZXJEYXRhOltJZV19LGhmPU4uSD9udWxsOltcImlubmVySFRNTFwiLFwidGV4dENvbnRlbnRcIl07ZnVuY3Rpb24gamYoYSxiLGMsZCl7Yi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBhJiZlJiZQKGEsZSxjLGQpfSl9XG5mdW5jdGlvbiBrZihhKXt2YXIgYj1hP251bGw6aGYsYztmb3IoYyBpbiBnZilqZih3aW5kb3dbY10mJndpbmRvd1tjXS5wcm90b3R5cGUsZ2ZbY10sYSxiKX1bXCJUZXh0XCIsXCJDb21tZW50XCIsXCJDREFUQVNlY3Rpb25cIixcIlByb2Nlc3NpbmdJbnN0cnVjdGlvblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXdpbmRvd1thXSxjPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2MuX19zaGFkeV9wcm90b0lzUGF0Y2hlZD0hMDtqZihjLGdmLkV2ZW50VGFyZ2V0KTtqZihjLGdmLk5vZGUpO2dmW2FdJiZqZihjLGdmW2FdKTtiLnByb3RvdHlwZS5fX3NoYWR5X3BhdGNoZWRQcm90bz1jfSk7ZnVuY3Rpb24gbGYoYSl7YS5fX3NoYWR5X3Byb3RvSXNQYXRjaGVkPSEwO2pmKGEsZ2YuRXZlbnRUYXJnZXQpO2pmKGEsZ2YuTm9kZSk7amYoYSxnZi5FbGVtZW50KTtqZihhLGdmLkhUTUxFbGVtZW50KTtqZihhLGdmLkhUTUxTbG90RWxlbWVudCk7cmV0dXJuIGF9O3ZhciBtZj1OLkFhLG5mPU4uSDtmdW5jdGlvbiBvZihhLGIpe2lmKG1mJiYhYS5fX3NoYWR5X3Byb3RvSXNQYXRjaGVkJiYhTyhhKSl7dmFyIGM9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpLGQ9Yy5oYXNPd25Qcm9wZXJ0eShcIl9fc2hhZHlfcGF0Y2hlZFByb3RvXCIpJiZjLl9fc2hhZHlfcGF0Y2hlZFByb3RvO2R8fChkPU9iamVjdC5jcmVhdGUoYyksbGYoZCksYy5fX3NoYWR5X3BhdGNoZWRQcm90bz1kKTtPYmplY3Quc2V0UHJvdG90eXBlT2YoYSxkKX1uZnx8KDE9PT1iP3ZkKGEpOjI9PT1iJiZ3ZChhKSl9XG5mdW5jdGlvbiBwZihhLGIsYyxkKXtvZihhLDEpO2Q9ZHx8bnVsbDt2YXIgZT1EKGEpLGY9ZD9EKGQpOm51bGw7ZS5wcmV2aW91c1NpYmxpbmc9ZD9mLnByZXZpb3VzU2libGluZzpiLl9fc2hhZHlfbGFzdENoaWxkO2lmKGY9TChlLnByZXZpb3VzU2libGluZykpZi5uZXh0U2libGluZz1hO2lmKGY9TChlLm5leHRTaWJsaW5nPWQpKWYucHJldmlvdXNTaWJsaW5nPWE7ZS5wYXJlbnROb2RlPWI7ZD9kPT09Yy5maXJzdENoaWxkJiYoYy5maXJzdENoaWxkPWEpOihjLmxhc3RDaGlsZD1hLGMuZmlyc3RDaGlsZHx8KGMuZmlyc3RDaGlsZD1hKSk7Yy5jaGlsZE5vZGVzPW51bGx9XG5mdW5jdGlvbiB3ZShhLGIsYyl7b2YoYiwyKTt2YXIgZD1EKGIpO3ZvaWQgMCE9PWQuZmlyc3RDaGlsZCYmKGQuY2hpbGROb2Rlcz1udWxsKTtpZihhLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKWZvcihhPWEuX19zaGFkeV9uYXRpdmVfZmlyc3RDaGlsZDthO2E9YS5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZylwZihhLGIsZCxjKTtlbHNlIHBmKGEsYixkLGMpfVxuZnVuY3Rpb24geWUoYSxiKXt2YXIgYz1EKGEpO2I9RChiKTthPT09Yi5maXJzdENoaWxkJiYoYi5maXJzdENoaWxkPWMubmV4dFNpYmxpbmcpO2E9PT1iLmxhc3RDaGlsZCYmKGIubGFzdENoaWxkPWMucHJldmlvdXNTaWJsaW5nKTthPWMucHJldmlvdXNTaWJsaW5nO3ZhciBkPWMubmV4dFNpYmxpbmc7YSYmKEQoYSkubmV4dFNpYmxpbmc9ZCk7ZCYmKEQoZCkucHJldmlvdXNTaWJsaW5nPWEpO2MucGFyZW50Tm9kZT1jLnByZXZpb3VzU2libGluZz1jLm5leHRTaWJsaW5nPXZvaWQgMDt2b2lkIDAhPT1iLmNoaWxkTm9kZXMmJihiLmNoaWxkTm9kZXM9bnVsbCl9XG5mdW5jdGlvbiBRZShhLGIpe3ZhciBjPUQoYSk7aWYoYnx8dm9pZCAwPT09Yy5maXJzdENoaWxkKXtjLmNoaWxkTm9kZXM9bnVsbDt2YXIgZD1jLmZpcnN0Q2hpbGQ9YS5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkO2MubGFzdENoaWxkPWEuX19zaGFkeV9uYXRpdmVfbGFzdENoaWxkO29mKGEsMik7Yz1kO2ZvcihkPXZvaWQgMDtjO2M9Yy5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZyl7dmFyIGU9RChjKTtlLnBhcmVudE5vZGU9Ynx8YTtlLm5leHRTaWJsaW5nPWMuX19zaGFkeV9uYXRpdmVfbmV4dFNpYmxpbmc7ZS5wcmV2aW91c1NpYmxpbmc9ZHx8bnVsbDtkPWM7b2YoYywxKX19fTt2YXIgcWY9USh7YWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIsYyl7XCJvYmplY3RcIiE9PXR5cGVvZiBjJiYoYz17Y2FwdHVyZTohIWN9KTtjLlU9Yy5VfHx0aGlzO3RoaXMuaG9zdC5fX3NoYWR5X2FkZEV2ZW50TGlzdGVuZXIoYSxiLGMpfSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYixjKXtcIm9iamVjdFwiIT09dHlwZW9mIGMmJihjPXtjYXB0dXJlOiEhY30pO2MuVT1jLlV8fHRoaXM7dGhpcy5ob3N0Ll9fc2hhZHlfcmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGIsYyl9fSk7ZnVuY3Rpb24gcmYoYSxiKXtQKGEscWYsYik7UChhLGJmLGIpO1AoYSxWZSxiKTtQKGEsRmUsYik7Ti5KJiYhYj8oUChhLHplLGIpLFAoYSxZZSxiKSk6Ti5IfHwoUChhLHNkKSxQKGEscWQpLFAoYSxyZCkpfTt2YXIgU2U9e30sc2Y9Ti5kZWZlckNvbm5lY3Rpb25DYWxsYmFja3MmJlwibG9hZGluZ1wiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZSx0ZjtmdW5jdGlvbiB1ZihhKXt2YXIgYj1bXTtkbyBiLnVuc2hpZnQoYSk7d2hpbGUoYT1hLl9fc2hhZHlfcGFyZW50Tm9kZSk7cmV0dXJuIGJ9ZnVuY3Rpb24gUmUoYSxiLGMpe2lmKGEhPT1TZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTt0aGlzLmc9bnVsbDtQZSh0aGlzLGIsYyl9XG5mdW5jdGlvbiBQZShhLGIsYyl7YS5ob3N0PWI7YS5tb2RlPWMmJmMubW9kZTtRZShhLmhvc3QpO2I9RChhLmhvc3QpO2Iucm9vdD1hO2IuZ2I9XCJjbG9zZWRcIiE9PWEubW9kZT9hOm51bGw7Yj1EKGEpO2IuZmlyc3RDaGlsZD1iLmxhc3RDaGlsZD1iLnBhcmVudE5vZGU9Yi5uZXh0U2libGluZz1iLnByZXZpb3VzU2libGluZz1udWxsO2lmKE4ucHJlZmVyUGVyZm9ybWFuY2UpZm9yKDtiPWEuaG9zdC5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkOylhLmhvc3QuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQ2hpbGQoYik7ZWxzZSB2ZShhKX1mdW5jdGlvbiB2ZShhKXthLll8fChhLlk9ITAsUmMoZnVuY3Rpb24oKXtyZXR1cm4gQWUoYSl9KSl9XG5mdW5jdGlvbiBBZShhKXt2YXIgYjtpZihiPWEuWSl7Zm9yKHZhciBjO2E7KWE6e2EuWSYmKGM9YSksYj1hO2E9Yi5ob3N0Ll9fc2hhZHlfZ2V0Um9vdE5vZGUoKTtpZihPKGEpJiYoYj1MKGIuaG9zdCkpJiYwPGIuaWEpYnJlYWsgYTthPXZvaWQgMH1iPWN9KGM9YikmJmMuX3JlbmRlclNlbGYoKX1cblJlLnByb3RvdHlwZS5fcmVuZGVyU2VsZj1mdW5jdGlvbigpe3ZhciBhPXNmO3NmPSEwO3RoaXMuWT0hMTtpZih0aGlzLmcpe0xlKHRoaXMpO2Zvcih2YXIgYj0wLGM7Yjx0aGlzLmcubGVuZ3RoO2IrKyl7Yz10aGlzLmdbYl07dmFyIGQ9TChjKSxlPWQuYXNzaWduZWROb2RlcztkLmFzc2lnbmVkTm9kZXM9W107ZC5hYT1bXTtpZihkLkdhPWUpZm9yKGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIGY9TChlW2RdKTtmLnVhPWYuYXNzaWduZWRTbG90O2YuYXNzaWduZWRTbG90PT09YyYmKGYuYXNzaWduZWRTbG90PW51bGwpfX1mb3IoYj10aGlzLmhvc3QuX19zaGFkeV9maXJzdENoaWxkO2I7Yj1iLl9fc2hhZHlfbmV4dFNpYmxpbmcpdmYodGhpcyxiKTtmb3IoYj0wO2I8dGhpcy5nLmxlbmd0aDtiKyspe2M9dGhpcy5nW2JdO2U9TChjKTtpZighZS5hc3NpZ25lZE5vZGVzLmxlbmd0aClmb3IoZD1jLl9fc2hhZHlfZmlyc3RDaGlsZDtkO2Q9ZC5fX3NoYWR5X25leHRTaWJsaW5nKXZmKHRoaXMsXG5kLGMpOyhkPShkPUwoYy5fX3NoYWR5X3BhcmVudE5vZGUpKSYmZC5yb290KSYmKHhjKGQpfHxkLlkpJiZkLl9yZW5kZXJTZWxmKCk7d2YodGhpcyxlLmFhLGUuYXNzaWduZWROb2Rlcyk7aWYoZD1lLkdhKXtmb3IoZj0wO2Y8ZC5sZW5ndGg7ZisrKUwoZFtmXSkudWE9bnVsbDtlLkdhPW51bGw7ZC5sZW5ndGg+ZS5hc3NpZ25lZE5vZGVzLmxlbmd0aCYmKGUueGE9ITApfWUueGEmJihlLnhhPSExLHhmKHRoaXMsYykpfWM9dGhpcy5nO2I9W107Zm9yKGU9MDtlPGMubGVuZ3RoO2UrKylkPWNbZV0uX19zaGFkeV9wYXJlbnROb2RlLChmPUwoZCkpJiZmLnJvb3R8fCEoMD5iLmluZGV4T2YoZCkpfHxiLnB1c2goZCk7Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyl7Zj1iW2NdO2U9Zj09PXRoaXM/dGhpcy5ob3N0OmY7ZD1bXTtmb3IoZj1mLl9fc2hhZHlfZmlyc3RDaGlsZDtmO2Y9Zi5fX3NoYWR5X25leHRTaWJsaW5nKWlmKFwic2xvdFwiPT1mLmxvY2FsTmFtZSlmb3IodmFyIGc9TChmKS5hYSxoPVxuMDtoPGcubGVuZ3RoO2grKylkLnB1c2goZ1toXSk7ZWxzZSBkLnB1c2goZik7Zj1JYyhlKTtnPWFlKGQsZC5sZW5ndGgsZixmLmxlbmd0aCk7Zm9yKHZhciBrPWg9MCxsPXZvaWQgMDtoPGcubGVuZ3RoJiYobD1nW2hdKTtoKyspe2Zvcih2YXIgbT0wLHE9dm9pZCAwO208bC5nYS5sZW5ndGgmJihxPWwuZ2FbbV0pO20rKylxLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGU9PT1lJiZlLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKHEpLGYuc3BsaWNlKGwuaW5kZXgraywxKTtrLT1sLm5hfWs9MDtmb3IobD12b2lkIDA7azxnLmxlbmd0aCYmKGw9Z1trXSk7aysrKWZvcihoPWZbbC5pbmRleF0sbT1sLmluZGV4O208bC5pbmRleCtsLm5hO20rKylxPWRbbV0sZS5fX3NoYWR5X25hdGl2ZV9pbnNlcnRCZWZvcmUocSxoKSxmLnNwbGljZShtLDAscSl9fWlmKCFOLnByZWZlclBlcmZvcm1hbmNlJiYhdGhpcy5GYSlmb3IoYj10aGlzLmhvc3QuX19zaGFkeV9maXJzdENoaWxkO2I7Yj1iLl9fc2hhZHlfbmV4dFNpYmxpbmcpYz1cbkwoYiksYi5fX3NoYWR5X25hdGl2ZV9wYXJlbnROb2RlIT09dGhpcy5ob3N0fHxcInNsb3RcIiE9PWIubG9jYWxOYW1lJiZjLmFzc2lnbmVkU2xvdHx8dGhpcy5ob3N0Ll9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGIpO3RoaXMuRmE9ITA7c2Y9YTt0ZiYmdGYoKX07ZnVuY3Rpb24gdmYoYSxiLGMpe3ZhciBkPUQoYiksZT1kLnVhO2QudWE9bnVsbDtjfHwoYz0oYT1hLmhbYi5fX3NoYWR5X3Nsb3R8fFwiX19jYXRjaGFsbFwiXSkmJmFbMF0pO2M/KEQoYykuYXNzaWduZWROb2Rlcy5wdXNoKGIpLGQuYXNzaWduZWRTbG90PWMpOmQuYXNzaWduZWRTbG90PXZvaWQgMDtlIT09ZC5hc3NpZ25lZFNsb3QmJmQuYXNzaWduZWRTbG90JiYoRChkLmFzc2lnbmVkU2xvdCkueGE9ITApfVxuZnVuY3Rpb24gd2YoYSxiLGMpe2Zvcih2YXIgZD0wLGU9dm9pZCAwO2Q8Yy5sZW5ndGgmJihlPWNbZF0pO2QrKylpZihcInNsb3RcIj09ZS5sb2NhbE5hbWUpe3ZhciBmPUwoZSkuYXNzaWduZWROb2RlcztmJiZmLmxlbmd0aCYmd2YoYSxiLGYpfWVsc2UgYi5wdXNoKGNbZF0pfWZ1bmN0aW9uIHhmKGEsYil7Yi5fX3NoYWR5X25hdGl2ZV9kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInNsb3RjaGFuZ2VcIikpO2I9TChiKTtiLmFzc2lnbmVkU2xvdCYmeGYoYSxiLmFzc2lnbmVkU2xvdCl9ZnVuY3Rpb24gdWUoYSl7YS5pPWEuaXx8W107YS5nPWEuZ3x8W107YS5oPWEuaHx8e319XG5mdW5jdGlvbiBMZShhKXtpZihhLmkmJmEuaS5sZW5ndGgpe2Zvcih2YXIgYj1hLmksYyxkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBlPWJbZF07UWUoZSk7dmFyIGY9ZS5fX3NoYWR5X3BhcmVudE5vZGU7UWUoZik7Zj1MKGYpO2YuaWE9KGYuaWF8fDApKzE7Zj1NZShlKTthLmhbZl0/KGM9Y3x8e30sY1tmXT0hMCxhLmhbZl0ucHVzaChlKSk6YS5oW2ZdPVtlXTthLmcucHVzaChlKX1pZihjKWZvcih2YXIgZyBpbiBjKWEuaFtnXT1OZShhLmhbZ10pO2EuaT1bXX19ZnVuY3Rpb24gTWUoYSl7dmFyIGI9YS5uYW1lfHxhLmdldEF0dHJpYnV0ZShcIm5hbWVcIil8fFwiX19jYXRjaGFsbFwiO3JldHVybiBhLlFhPWJ9XG5mdW5jdGlvbiBOZShhKXtyZXR1cm4gYS5zb3J0KGZ1bmN0aW9uKGIsYyl7Yj11ZihiKTtmb3IodmFyIGQ9dWYoYyksZT0wO2U8Yi5sZW5ndGg7ZSsrKXtjPWJbZV07dmFyIGY9ZFtlXTtpZihjIT09ZilyZXR1cm4gYj1KYyhjLl9fc2hhZHlfcGFyZW50Tm9kZSksYi5pbmRleE9mKGMpLWIuaW5kZXhPZihmKX19KX1cbmZ1bmN0aW9uIHhlKGEsYil7aWYoYS5nKXtMZShhKTt2YXIgYz1hLmgsZDtmb3IoZCBpbiBjKWZvcih2YXIgZT1jW2RdLGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGc9ZVtmXTtpZihHYyhiLGcpKXtlLnNwbGljZShmLDEpO3ZhciBoPWEuZy5pbmRleE9mKGcpOzA8PWgmJihhLmcuc3BsaWNlKGgsMSksKGg9TChnLl9fc2hhZHlfcGFyZW50Tm9kZSkpJiZoLmlhJiZoLmlhLS0pO2YtLTtnPUwoZyk7aWYoaD1nLmFhKWZvcih2YXIgaz0wO2s8aC5sZW5ndGg7aysrKXt2YXIgbD1oW2tdLG09bC5fX3NoYWR5X25hdGl2ZV9wYXJlbnROb2RlO20mJm0uX19zaGFkeV9uYXRpdmVfcmVtb3ZlQ2hpbGQobCl9Zy5hYT1bXTtnLmFzc2lnbmVkTm9kZXM9W107aD0hMH19cmV0dXJuIGh9fWZ1bmN0aW9uIHhjKGEpe0xlKGEpO3JldHVybiEoIWEuZ3x8IWEuZy5sZW5ndGgpfVxuKGZ1bmN0aW9uKGEpe2EuX19wcm90b19fPURvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlO3JmKGEsXCJfX3NoYWR5X1wiKTtyZihhKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhLHtub2RlVHlwZTp7dmFsdWU6Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFLGNvbmZpZ3VyYWJsZTohMH0sbm9kZU5hbWU6e3ZhbHVlOlwiI2RvY3VtZW50LWZyYWdtZW50XCIsY29uZmlndXJhYmxlOiEwfSxub2RlVmFsdWU6e3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwfX0pO1tcImxvY2FsTmFtZVwiLFwibmFtZXNwYWNlVVJJXCIsXCJwcmVmaXhcIl0uZm9yRWFjaChmdW5jdGlvbihiKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHt2YWx1ZTp2b2lkIDAsY29uZmlndXJhYmxlOiEwfSl9KTtbXCJvd25lckRvY3VtZW50XCIsXCJiYXNlVVJJXCIsXCJpc0Nvbm5lY3RlZFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhvc3RbYl19LFxuY29uZmlndXJhYmxlOiEwfSl9KX0pKFJlLnByb3RvdHlwZSk7XG5pZih3aW5kb3cuY3VzdG9tRWxlbWVudHMmJndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUmJk4ueWEmJiFOLnByZWZlclBlcmZvcm1hbmNlKXt2YXIgeWY9bmV3IE1hcDt0Zj1mdW5jdGlvbigpe3ZhciBhPVtdO3lmLmZvckVhY2goZnVuY3Rpb24oZCxlKXthLnB1c2goW2UsZF0pfSk7eWYuY2xlYXIoKTtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGM9YVtiXVswXTthW2JdWzFdP2MuX19zaGFkeWRvbV9jb25uZWN0ZWRDYWxsYmFjaygpOmMuX19zaGFkeWRvbV9kaXNjb25uZWN0ZWRDYWxsYmFjaygpfX07c2YmJmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJyZWFkeXN0YXRlY2hhbmdlXCIsZnVuY3Rpb24oKXtzZj0hMTt0ZigpfSx7b25jZTohMH0pO3ZhciB6Zj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9MCxlPVwiX19pc0Nvbm5lY3RlZFwiK2QrKztpZihifHxjKWEucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWEucHJvdG90eXBlLl9fc2hhZHlkb21fY29ubmVjdGVkQ2FsbGJhY2s9XG5mdW5jdGlvbigpe3NmP3lmLnNldCh0aGlzLCEwKTp0aGlzW2VdfHwodGhpc1tlXT0hMCxiJiZiLmNhbGwodGhpcykpfSxhLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaz1hLnByb3RvdHlwZS5fX3NoYWR5ZG9tX2Rpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7c2Y/dGhpcy5pc0Nvbm5lY3RlZHx8eWYuc2V0KHRoaXMsITEpOnRoaXNbZV0mJih0aGlzW2VdPSExLGMmJmMuY2FsbCh0aGlzKSl9O3JldHVybiBhfSxBZj13aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lLEJmPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2ssZD1iLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaztBZi5jYWxsKHdpbmRvdy5jdXN0b21FbGVtZW50cyxhLHpmKGIsYyxkKSk7Yi5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s9YztiLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaz1kfTt3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lPVxuQmY7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5DdXN0b21FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLFwiZGVmaW5lXCIse3ZhbHVlOkJmLGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIHRlKGEpe2E9YS5fX3NoYWR5X2dldFJvb3ROb2RlKCk7aWYoTyhhKSlyZXR1cm4gYX07ZnVuY3Rpb24gQ2YoYSl7dGhpcy5ub2RlPWF9dj1DZi5wcm90b3R5cGU7di5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYWRkRXZlbnRMaXN0ZW5lcihhLGIsYyl9O3YucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxiLGMpfTt2LmFwcGVuZENoaWxkPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9hcHBlbmRDaGlsZChhKX07di5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGEsYil9O3YucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUNoaWxkKGEpfTt2LnJlcGxhY2VDaGlsZD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9yZXBsYWNlQ2hpbGQoYSxiKX07XG52LmNsb25lTm9kZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2xvbmVOb2RlKGEpfTt2LmdldFJvb3ROb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9nZXRSb290Tm9kZShhKX07di5jb250YWlucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY29udGFpbnMoYSl9O3YuZGlzcGF0Y2hFdmVudD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZGlzcGF0Y2hFdmVudChhKX07di5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXt0aGlzLm5vZGUuX19zaGFkeV9zZXRBdHRyaWJ1dGUoYSxiKX07di5nZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X25hdGl2ZV9nZXRBdHRyaWJ1dGUoYSl9O3YuaGFzQXR0cmlidXRlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9uYXRpdmVfaGFzQXR0cmlidXRlKGEpfTt2LnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbihhKXt0aGlzLm5vZGUuX19zaGFkeV9yZW1vdmVBdHRyaWJ1dGUoYSl9O1xudi5hdHRhY2hTaGFkb3c9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2F0dGFjaFNoYWRvdyhhKX07di5mb2N1cz1mdW5jdGlvbigpe3RoaXMubm9kZS5fX3NoYWR5X25hdGl2ZV9mb2N1cygpfTt2LmJsdXI9ZnVuY3Rpb24oKXt0aGlzLm5vZGUuX19zaGFkeV9ibHVyKCl9O3YuaW1wb3J0Tm9kZT1mdW5jdGlvbihhLGIpe2lmKHRoaXMubm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfTk9ERSlyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaW1wb3J0Tm9kZShhLGIpfTt2LmdldEVsZW1lbnRCeUlkPWZ1bmN0aW9uKGEpe2lmKHRoaXMubm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfTk9ERSlyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZ2V0RWxlbWVudEJ5SWQoYSl9O3YuZWxlbWVudHNGcm9tUG9pbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZWxlbWVudHNGcm9tUG9pbnQoYSxiKX07XG52LmVsZW1lbnRGcm9tUG9pbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZWxlbWVudEZyb21Qb2ludChhLGIpfTt2LnF1ZXJ5U2VsZWN0b3I9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3F1ZXJ5U2VsZWN0b3IoYSl9O3YucXVlcnlTZWxlY3RvckFsbD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9xdWVyeVNlbGVjdG9yQWxsKGEsYil9O3YuYXNzaWduZWROb2Rlcz1mdW5jdGlvbihhKXtpZihcInNsb3RcIj09PXRoaXMubm9kZS5sb2NhbE5hbWUpcmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2Fzc2lnbmVkTm9kZXMoYSl9O3YuYXBwZW5kPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPWFyZ3VtZW50c1tjXTtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYXBwZW5kLmFwcGx5KHRoaXMubm9kZSx4KGIpKX07XG52LnByZXBlbmQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wcmVwZW5kLmFwcGx5KHRoaXMubm9kZSx4KGIpKX07di5hZnRlcj1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2FmdGVyLmFwcGx5KHRoaXMubm9kZSx4KGIpKX07di5iZWZvcmU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9iZWZvcmUuYXBwbHkodGhpcy5ub2RlLHgoYikpfTt2LnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9yZW1vdmUoKX07XG52LnJlcGxhY2VXaXRoPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPWFyZ3VtZW50c1tjXTtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfcmVwbGFjZVdpdGguYXBwbHkodGhpcy5ub2RlLHgoYikpfTtcbmVhLk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENmLnByb3RvdHlwZSx7YWN0aXZlRWxlbWVudDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoTyh0aGlzLm5vZGUpfHx0aGlzLm5vZGUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX05PREUpcmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2FjdGl2ZUVsZW1lbnR9fSxfYWN0aXZlRWxlbWVudDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWxlbWVudH19LGhvc3Q6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKE8odGhpcy5ub2RlKSlyZXR1cm4gdGhpcy5ub2RlLmhvc3R9fSxwYXJlbnROb2RlOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfcGFyZW50Tm9kZX19LGZpcnN0Q2hpbGQ6e2NvbmZpZ3VyYWJsZTohMCxcbmVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2ZpcnN0Q2hpbGR9fSxsYXN0Q2hpbGQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9sYXN0Q2hpbGR9fSxuZXh0U2libGluZzp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X25leHRTaWJsaW5nfX0scHJldmlvdXNTaWJsaW5nOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfcHJldmlvdXNTaWJsaW5nfX0sY2hpbGROb2Rlczp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2NoaWxkTm9kZXN9fSxwYXJlbnRFbGVtZW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxcbmdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wYXJlbnRFbGVtZW50fX0sZmlyc3RFbGVtZW50Q2hpbGQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9maXJzdEVsZW1lbnRDaGlsZH19LGxhc3RFbGVtZW50Q2hpbGQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9sYXN0RWxlbWVudENoaWxkfX0sbmV4dEVsZW1lbnRTaWJsaW5nOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfbmV4dEVsZW1lbnRTaWJsaW5nfX0scHJldmlvdXNFbGVtZW50U2libGluZzp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3ByZXZpb3VzRWxlbWVudFNpYmxpbmd9fSxcbmNoaWxkcmVuOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2hpbGRyZW59fSxjaGlsZEVsZW1lbnRDb3VudDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2NoaWxkRWxlbWVudENvdW50fX0sc2hhZG93Um9vdDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3NoYWRvd1Jvb3R9fSxhc3NpZ25lZFNsb3Q6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9hc3NpZ25lZFNsb3R9fSxpc0Nvbm5lY3RlZDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2lzQ29ubmVjdGVkfX0saW5uZXJIVE1MOntjb25maWd1cmFibGU6ITAsXG5lbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9pbm5lckhUTUx9LHNldDpmdW5jdGlvbihhKXt0aGlzLm5vZGUuX19zaGFkeV9pbm5lckhUTUw9YX19LHRleHRDb250ZW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfdGV4dENvbnRlbnR9LHNldDpmdW5jdGlvbihhKXt0aGlzLm5vZGUuX19zaGFkeV90ZXh0Q29udGVudD1hfX0sc2xvdDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3Nsb3R9LHNldDpmdW5jdGlvbihhKXt0aGlzLm5vZGUuX19zaGFkeV9zbG90PWF9fSxjbGFzc05hbWU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9jbGFzc05hbWV9LHNldDpmdW5jdGlvbihhKXt0aGlzLm5vZGUuX19zaGFkeV9jbGFzc05hbWU9XG5hfX19KTtmdW5jdGlvbiBEZihhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2YucHJvdG90eXBlLGEse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbXCJfX3NoYWR5X1wiK2FdfSxzZXQ6ZnVuY3Rpb24oYil7dGhpcy5ub2RlW1wiX19zaGFkeV9cIithXT1ifSxjb25maWd1cmFibGU6ITB9KX1YZC5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBEZihhKX0pO1lkLmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIERmKGEpfSk7dmFyIEVmPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIEZmKGEpe2lmKE8oYSl8fGEgaW5zdGFuY2VvZiBDZilyZXR1cm4gYTt2YXIgYj1FZi5nZXQoYSk7Ynx8KGI9bmV3IENmKGEpLEVmLnNldChhLGIpKTtyZXR1cm4gYn07aWYoTi55YSl7dmFyIEdmPU4uSD9mdW5jdGlvbihhKXtyZXR1cm4gYX06ZnVuY3Rpb24oYSl7d2QoYSk7dmQoYSk7cmV0dXJuIGF9LFNoYWR5RE9NPXtpblVzZTpOLnlhLHBhdGNoOkdmLGlzU2hhZHlSb290Ok8sZW5xdWV1ZTpSYyxmbHVzaDpTYyxmbHVzaEluaXRpYWw6ZnVuY3Rpb24oYSl7IWEuRmEmJmEuWSYmQWUoYSl9LHNldHRpbmdzOk4sZmlsdGVyTXV0YXRpb25zOlhjLG9ic2VydmVDaGlsZHJlbjpWYyx1bm9ic2VydmVDaGlsZHJlbjpXYyxkZWZlckNvbm5lY3Rpb25DYWxsYmFja3M6Ti5kZWZlckNvbm5lY3Rpb25DYWxsYmFja3MscHJlZmVyUGVyZm9ybWFuY2U6Ti5wcmVmZXJQZXJmb3JtYW5jZSxoYW5kbGVzRHluYW1pY1Njb3Bpbmc6ITAsd3JhcDpOLko/RmY6R2Ysd3JhcElmTmVlZGVkOiEwPT09Ti5KP0ZmOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxXcmFwcGVyOkNmLGNvbXBvc2VkUGF0aDpGZCxub1BhdGNoOk4uSixwYXRjaE9uRGVtYW5kOk4uQWEsbmF0aXZlTWV0aG9kczpmZCxcbm5hdGl2ZVRyZWU6Z2QscGF0Y2hFbGVtZW50UHJvdG86bGZ9O3dpbmRvdy5TaGFkeURPTT1TaGFkeURPTTtwZCgpO2tmKFwiX19zaGFkeV9cIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRvY3VtZW50LFwiX2FjdGl2ZUVsZW1lbnRcIixiZi5hY3RpdmVFbGVtZW50KTtQKFdpbmRvdy5wcm90b3R5cGUsZWYsXCJfX3NoYWR5X1wiKTtOLko/Ti5BYSYmUChFbGVtZW50LnByb3RvdHlwZSxUZSk6KGtmKCksV2QoKSk7UmQoKTt3aW5kb3cuRXZlbnQ9VGQ7d2luZG93LkN1c3RvbUV2ZW50PVVkO3dpbmRvdy5Nb3VzZUV2ZW50PVZkO3dpbmRvdy5TaGFkb3dSb290PVJlfTt2YXIgSGY9d2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50LElmPXdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudE5TLEpmPXdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZSxLZj13aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLnByZXBlbmQsTGY9d2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5hcHBlbmQsTWY9d2luZG93LkRvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLnByZXBlbmQsTmY9d2luZG93LkRvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLmFwcGVuZCxPZj13aW5kb3cuTm9kZS5wcm90b3R5cGUuY2xvbmVOb2RlLFBmPXdpbmRvdy5Ob2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZCxRZj13aW5kb3cuTm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlLFJmPXdpbmRvdy5Ob2RlLnByb3RvdHlwZS5yZW1vdmVDaGlsZCxTZj13aW5kb3cuTm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkLFRmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93Lk5vZGUucHJvdG90eXBlLFxuXCJ0ZXh0Q29udGVudFwiKSxVZj13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYXR0YWNoU2hhZG93LFZmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LkVsZW1lbnQucHJvdG90eXBlLFwiaW5uZXJIVE1MXCIpLFdmPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGUsWGY9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZSxZZj13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlLFpmPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVOUywkZj13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlTlMsYWc9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZU5TLGJnPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5pbnNlcnRBZGphY2VudEVsZW1lbnQsY2c9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmluc2VydEFkamFjZW50SFRNTCxkZz13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUucHJlcGVuZCxcbmVnPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hcHBlbmQsZmc9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmJlZm9yZSxnZz13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYWZ0ZXIsaGc9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLnJlcGxhY2VXaXRoLGlnPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5yZW1vdmUsamc9d2luZG93LkhUTUxFbGVtZW50LGtnPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LkhUTUxFbGVtZW50LnByb3RvdHlwZSxcImlubmVySFRNTFwiKSxsZz13aW5kb3cuSFRNTEVsZW1lbnQucHJvdG90eXBlLmluc2VydEFkamFjZW50RWxlbWVudCxtZz13aW5kb3cuSFRNTEVsZW1lbnQucHJvdG90eXBlLmluc2VydEFkamFjZW50SFRNTDt2YXIgbmc9bmV3IFNldDtcImFubm90YXRpb24teG1sIGNvbG9yLXByb2ZpbGUgZm9udC1mYWNlIGZvbnQtZmFjZS1zcmMgZm9udC1mYWNlLXVyaSBmb250LWZhY2UtZm9ybWF0IGZvbnQtZmFjZS1uYW1lIG1pc3NpbmctZ2x5cGhcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gbmcuYWRkKGEpfSk7ZnVuY3Rpb24gb2coYSl7dmFyIGI9bmcuaGFzKGEpO2E9L15bYS16XVsuMC05X2Etel0qLVstLjAtOV9hLXpdKiQvLnRlc3QoYSk7cmV0dXJuIWImJmF9dmFyIHBnPWRvY3VtZW50LmNvbnRhaW5zP2RvY3VtZW50LmNvbnRhaW5zLmJpbmQoZG9jdW1lbnQpOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucy5iaW5kKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG5mdW5jdGlvbiBUKGEpe3ZhciBiPWEuaXNDb25uZWN0ZWQ7aWYodm9pZCAwIT09YilyZXR1cm4gYjtpZihwZyhhKSlyZXR1cm4hMDtmb3IoO2EmJiEoYS5fX0NFX2lzSW1wb3J0RG9jdW1lbnR8fGEgaW5zdGFuY2VvZiBEb2N1bWVudCk7KWE9YS5wYXJlbnROb2RlfHwod2luZG93LlNoYWRvd1Jvb3QmJmEgaW5zdGFuY2VvZiBTaGFkb3dSb290P2EuaG9zdDp2b2lkIDApO3JldHVybiEoIWF8fCEoYS5fX0NFX2lzSW1wb3J0RG9jdW1lbnR8fGEgaW5zdGFuY2VvZiBEb2N1bWVudCkpfWZ1bmN0aW9uIHFnKGEpe3ZhciBiPWEuY2hpbGRyZW47aWYoYilyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYik7Yj1bXTtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZiLnB1c2goYSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiByZyhhLGIpe2Zvcig7YiYmYiE9PWEmJiFiLm5leHRTaWJsaW5nOyliPWIucGFyZW50Tm9kZTtyZXR1cm4gYiYmYiE9PWE/Yi5uZXh0U2libGluZzpudWxsfVxuZnVuY3Rpb24gc2coYSxiLGMpe2Zvcih2YXIgZD1hO2Q7KXtpZihkLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe3ZhciBlPWQ7YihlKTt2YXIgZj1lLmxvY2FsTmFtZTtpZihcImxpbmtcIj09PWYmJlwiaW1wb3J0XCI9PT1lLmdldEF0dHJpYnV0ZShcInJlbFwiKSl7ZD1lLmltcG9ydDt2b2lkIDA9PT1jJiYoYz1uZXcgU2V0KTtpZihkIGluc3RhbmNlb2YgTm9kZSYmIWMuaGFzKGQpKWZvcihjLmFkZChkKSxkPWQuZmlyc3RDaGlsZDtkO2Q9ZC5uZXh0U2libGluZylzZyhkLGIsYyk7ZD1yZyhhLGUpO2NvbnRpbnVlfWVsc2UgaWYoXCJ0ZW1wbGF0ZVwiPT09Zil7ZD1yZyhhLGUpO2NvbnRpbnVlfWlmKGU9ZS5fX0NFX3NoYWRvd1Jvb3QpZm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKXNnKGUsYixjKX1kPWQuZmlyc3RDaGlsZD9kLmZpcnN0Q2hpbGQ6cmcoYSxkKX19O2Z1bmN0aW9uIHRnKCl7dmFyIGE9IShudWxsPT09dWd8fHZvaWQgMD09PXVnfHwhdWcubm9Eb2N1bWVudENvbnN0cnVjdGlvbk9ic2VydmVyKSxiPSEobnVsbD09PXVnfHx2b2lkIDA9PT11Z3x8IXVnLnNoYWR5RG9tRmFzdFdhbGspO3RoaXMuY2E9W107dGhpcy5nPVtdO3RoaXMuVz0hMTt0aGlzLnNoYWR5RG9tRmFzdFdhbGs9Yjt0aGlzLm5iPSFhfWZ1bmN0aW9uIHZnKGEsYixjLGQpe3ZhciBlPXdpbmRvdy5TaGFkeURPTTtpZihhLnNoYWR5RG9tRmFzdFdhbGsmJmUmJmUuaW5Vc2Upe2lmKGIubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmYyhiKSxiLnF1ZXJ5U2VsZWN0b3JBbGwpZm9yKGE9ZS5uYXRpdmVNZXRob2RzLnF1ZXJ5U2VsZWN0b3JBbGwuY2FsbChiLFwiKlwiKSxiPTA7YjxhLmxlbmd0aDtiKyspYyhhW2JdKX1lbHNlIHNnKGIsYyxkKX1mdW5jdGlvbiB3ZyhhLGIpe2EuVz0hMDthLmNhLnB1c2goYil9XG5mdW5jdGlvbiB4ZyhhLGIpe2EuVz0hMDthLmcucHVzaChiKX1mdW5jdGlvbiB5ZyhhLGIpe2EuVyYmdmcoYSxiLGZ1bmN0aW9uKGMpe3JldHVybiB6ZyhhLGMpfSl9ZnVuY3Rpb24gemcoYSxiKXtpZihhLlcmJiFiLl9fQ0VfcGF0Y2hlZCl7Yi5fX0NFX3BhdGNoZWQ9ITA7Zm9yKHZhciBjPTA7YzxhLmNhLmxlbmd0aDtjKyspYS5jYVtjXShiKTtmb3IoYz0wO2M8YS5nLmxlbmd0aDtjKyspYS5nW2NdKGIpfX1mdW5jdGlvbiBBZyhhLGIpe3ZhciBjPVtdO3ZnKGEsYixmdW5jdGlvbihlKXtyZXR1cm4gYy5wdXNoKGUpfSk7Zm9yKGI9MDtiPGMubGVuZ3RoO2IrKyl7dmFyIGQ9Y1tiXTsxPT09ZC5fX0NFX3N0YXRlP2EuY29ubmVjdGVkQ2FsbGJhY2soZCk6QmcoYSxkKX19XG5mdW5jdGlvbiBDZyhhLGIpe3ZhciBjPVtdO3ZnKGEsYixmdW5jdGlvbihlKXtyZXR1cm4gYy5wdXNoKGUpfSk7Zm9yKGI9MDtiPGMubGVuZ3RoO2IrKyl7dmFyIGQ9Y1tiXTsxPT09ZC5fX0NFX3N0YXRlJiZhLmRpc2Nvbm5lY3RlZENhbGxiYWNrKGQpfX1cbmZ1bmN0aW9uIERnKGEsYixjKXtjPXZvaWQgMD09PWM/e306Yzt2YXIgZD1jLm9iLGU9Yy51cGdyYWRlfHxmdW5jdGlvbihnKXtyZXR1cm4gQmcoYSxnKX0sZj1bXTt2ZyhhLGIsZnVuY3Rpb24oZyl7YS5XJiZ6ZyhhLGcpO2lmKFwibGlua1wiPT09Zy5sb2NhbE5hbWUmJlwiaW1wb3J0XCI9PT1nLmdldEF0dHJpYnV0ZShcInJlbFwiKSl7dmFyIGg9Zy5pbXBvcnQ7aCBpbnN0YW5jZW9mIE5vZGUmJihoLl9fQ0VfaXNJbXBvcnREb2N1bWVudD0hMCxoLl9fQ0VfcmVnaXN0cnk9ZG9jdW1lbnQuX19DRV9yZWdpc3RyeSk7aCYmXCJjb21wbGV0ZVwiPT09aC5yZWFkeVN0YXRlP2guX19DRV9kb2N1bWVudExvYWRIYW5kbGVkPSEwOmcuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixmdW5jdGlvbigpe3ZhciBrPWcuaW1wb3J0O2lmKCFrLl9fQ0VfZG9jdW1lbnRMb2FkSGFuZGxlZCl7ay5fX0NFX2RvY3VtZW50TG9hZEhhbmRsZWQ9ITA7dmFyIGw9bmV3IFNldDtkJiYoZC5mb3JFYWNoKGZ1bmN0aW9uKG0pe3JldHVybiBsLmFkZChtKX0pLFxubC5kZWxldGUoaykpO0RnKGEsayx7b2I6bCx1cGdyYWRlOmV9KX19KX1lbHNlIGYucHVzaChnKX0sZCk7Zm9yKGI9MDtiPGYubGVuZ3RoO2IrKyllKGZbYl0pfVxuZnVuY3Rpb24gQmcoYSxiKXt0cnl7dmFyIGM9Yi5vd25lckRvY3VtZW50LGQ9Yy5fX0NFX3JlZ2lzdHJ5O3ZhciBlPWQmJihjLmRlZmF1bHRWaWV3fHxjLl9fQ0VfaXNJbXBvcnREb2N1bWVudCk/RWcoZCxiLmxvY2FsTmFtZSk6dm9pZCAwO2lmKGUmJnZvaWQgMD09PWIuX19DRV9zdGF0ZSl7ZS5jb25zdHJ1Y3Rpb25TdGFjay5wdXNoKGIpO3RyeXt0cnl7aWYobmV3IGUuY29uc3RydWN0b3JGdW5jdGlvbiE9PWIpdGhyb3cgRXJyb3IoXCJUaGUgY3VzdG9tIGVsZW1lbnQgY29uc3RydWN0b3IgZGlkIG5vdCBwcm9kdWNlIHRoZSBlbGVtZW50IGJlaW5nIHVwZ3JhZGVkLlwiKTt9ZmluYWxseXtlLmNvbnN0cnVjdGlvblN0YWNrLnBvcCgpfX1jYXRjaChrKXt0aHJvdyBiLl9fQ0Vfc3RhdGU9MixrO31iLl9fQ0Vfc3RhdGU9MTtiLl9fQ0VfZGVmaW5pdGlvbj1lO2lmKGUuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrJiZiLmhhc0F0dHJpYnV0ZXMoKSl7dmFyIGY9ZS5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5mb3IoZT0wO2U8Zi5sZW5ndGg7ZSsrKXt2YXIgZz1mW2VdLGg9Yi5nZXRBdHRyaWJ1dGUoZyk7bnVsbCE9PWgmJmEuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKGIsZyxudWxsLGgsbnVsbCl9fVQoYikmJmEuY29ubmVjdGVkQ2FsbGJhY2soYil9fWNhdGNoKGspe0ZnKGspfX10Zy5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7dmFyIGI9YS5fX0NFX2RlZmluaXRpb247aWYoYi5jb25uZWN0ZWRDYWxsYmFjayl0cnl7Yi5jb25uZWN0ZWRDYWxsYmFjay5jYWxsKGEpfWNhdGNoKGMpe0ZnKGMpfX07dGcucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKGEpe3ZhciBiPWEuX19DRV9kZWZpbml0aW9uO2lmKGIuZGlzY29ubmVjdGVkQ2FsbGJhY2spdHJ5e2IuZGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbChhKX1jYXRjaChjKXtGZyhjKX19O1xudGcucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPWEuX19DRV9kZWZpbml0aW9uO2lmKGYuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrJiYtMTxmLm9ic2VydmVkQXR0cmlidXRlcy5pbmRleE9mKGIpKXRyeXtmLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjay5jYWxsKGEsYixjLGQsZSl9Y2F0Y2goZyl7RmcoZyl9fTtcbmZ1bmN0aW9uIEdnKGEsYixjLGQpe3ZhciBlPWIuX19DRV9yZWdpc3RyeTtpZihlJiYobnVsbD09PWR8fFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPT09ZCkmJihlPUVnKGUsYykpKXRyeXt2YXIgZj1uZXcgZS5jb25zdHJ1Y3RvckZ1bmN0aW9uO2lmKHZvaWQgMD09PWYuX19DRV9zdGF0ZXx8dm9pZCAwPT09Zi5fX0NFX2RlZmluaXRpb24pdGhyb3cgRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdcIitjK1wiJzogVGhlIHJldHVybmVkIHZhbHVlIHdhcyBub3QgY29uc3RydWN0ZWQgd2l0aCB0aGUgSFRNTEVsZW1lbnQgY29uc3RydWN0b3IuXCIpO2lmKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiIT09Zi5uYW1lc3BhY2VVUkkpdGhyb3cgRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdcIitjK1wiJzogVGhlIGNvbnN0cnVjdGVkIGVsZW1lbnQncyBuYW1lc3BhY2UgbXVzdCBiZSB0aGUgSFRNTCBuYW1lc3BhY2UuXCIpO2lmKGYuaGFzQXR0cmlidXRlcygpKXRocm93IEVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnXCIrXG5jK1wiJzogVGhlIGNvbnN0cnVjdGVkIGVsZW1lbnQgbXVzdCBub3QgaGF2ZSBhbnkgYXR0cmlidXRlcy5cIik7aWYobnVsbCE9PWYuZmlyc3RDaGlsZCl0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1wiK2MrXCInOiBUaGUgY29uc3RydWN0ZWQgZWxlbWVudCBtdXN0IG5vdCBoYXZlIGFueSBjaGlsZHJlbi5cIik7aWYobnVsbCE9PWYucGFyZW50Tm9kZSl0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1wiK2MrXCInOiBUaGUgY29uc3RydWN0ZWQgZWxlbWVudCBtdXN0IG5vdCBoYXZlIGEgcGFyZW50IG5vZGUuXCIpO2lmKGYub3duZXJEb2N1bWVudCE9PWIpdGhyb3cgRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdcIitjK1wiJzogVGhlIGNvbnN0cnVjdGVkIGVsZW1lbnQncyBvd25lciBkb2N1bWVudCBpcyBpbmNvcnJlY3QuXCIpO2lmKGYubG9jYWxOYW1lIT09Yyl0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1wiK2MrXCInOiBUaGUgY29uc3RydWN0ZWQgZWxlbWVudCdzIGxvY2FsIG5hbWUgaXMgaW5jb3JyZWN0LlwiKTtcbnJldHVybiBmfWNhdGNoKGcpe3JldHVybiBGZyhnKSxiPW51bGw9PT1kP0hmLmNhbGwoYixjKTpJZi5jYWxsKGIsZCxjKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoYixIVE1MVW5rbm93bkVsZW1lbnQucHJvdG90eXBlKSxiLl9fQ0Vfc3RhdGU9MixiLl9fQ0VfZGVmaW5pdGlvbj12b2lkIDAsemcoYSxiKSxifWI9bnVsbD09PWQ/SGYuY2FsbChiLGMpOklmLmNhbGwoYixkLGMpO3pnKGEsYik7cmV0dXJuIGJ9XG5mdW5jdGlvbiBGZyhhKXt2YXIgYj1hLm1lc3NhZ2UsYz1hLnNvdXJjZVVSTHx8YS5maWxlTmFtZXx8XCJcIixkPWEubGluZXx8YS5saW5lTnVtYmVyfHwwLGU9YS5jb2x1bW58fGEuY29sdW1uTnVtYmVyfHwwLGY9dm9pZCAwO3ZvaWQgMD09PUVycm9yRXZlbnQucHJvdG90eXBlLmluaXRFcnJvckV2ZW50P2Y9bmV3IEVycm9yRXZlbnQoXCJlcnJvclwiLHtjYW5jZWxhYmxlOiEwLG1lc3NhZ2U6YixmaWxlbmFtZTpjLGxpbmVubzpkLGNvbG5vOmUsZXJyb3I6YX0pOihmPWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXJyb3JFdmVudFwiKSxmLmluaXRFcnJvckV2ZW50KFwiZXJyb3JcIiwhMSwhMCxiLGMsZCksZi5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZGVmYXVsdFByZXZlbnRlZFwiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSl9KTt2b2lkIDA9PT1mLmVycm9yJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZixcImVycm9yXCIsXG57Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9fSk7d2luZG93LmRpc3BhdGNoRXZlbnQoZik7Zi5kZWZhdWx0UHJldmVudGVkfHxjb25zb2xlLmVycm9yKGEpfTtmdW5jdGlvbiBIZygpe3ZhciBhPXRoaXM7dGhpcy5JPXZvaWQgMDt0aGlzLkhhPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGIpe2EuZz1ifSl9SGcucHJvdG90eXBlLnJlc29sdmU9ZnVuY3Rpb24oYSl7aWYodGhpcy5JKXRocm93IEVycm9yKFwiQWxyZWFkeSByZXNvbHZlZC5cIik7dGhpcy5JPWE7dGhpcy5nKGEpfTtmdW5jdGlvbiBJZyhhKXt2YXIgYj1kb2N1bWVudDt0aGlzLlg9dm9pZCAwO3RoaXMuUz1hO3RoaXMuZz1iO0RnKHRoaXMuUyx0aGlzLmcpO1wibG9hZGluZ1wiPT09dGhpcy5nLnJlYWR5U3RhdGUmJih0aGlzLlg9bmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5oLmJpbmQodGhpcykpLHRoaXMuWC5vYnNlcnZlKHRoaXMuZyx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSl9ZnVuY3Rpb24gSmcoYSl7YS5YJiZhLlguZGlzY29ubmVjdCgpfUlnLnByb3RvdHlwZS5oPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZy5yZWFkeVN0YXRlO1wiaW50ZXJhY3RpdmVcIiE9PWImJlwiY29tcGxldGVcIiE9PWJ8fEpnKHRoaXMpO2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspZm9yKHZhciBjPWFbYl0uYWRkZWROb2RlcyxkPTA7ZDxjLmxlbmd0aDtkKyspRGcodGhpcy5TLGNbZF0pfTtmdW5jdGlvbiBVKGEpe3RoaXMua2E9bmV3IE1hcDt0aGlzLmxhPW5ldyBNYXA7dGhpcy5DYT1uZXcgTWFwO3RoaXMudGE9ITE7dGhpcy53YT1uZXcgTWFwO3RoaXMuamE9ZnVuY3Rpb24oYil7cmV0dXJuIGIoKX07dGhpcy5WPSExO3RoaXMubWE9W107dGhpcy5TPWE7dGhpcy5EYT1hLm5iP25ldyBJZyhhKTp2b2lkIDB9dj1VLnByb3RvdHlwZTt2LmViPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcztpZighKGIgaW5zdGFuY2VvZiBGdW5jdGlvbikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkN1c3RvbSBlbGVtZW50IGNvbnN0cnVjdG9yIGdldHRlcnMgbXVzdCBiZSBmdW5jdGlvbnMuXCIpO0tnKHRoaXMsYSk7dGhpcy5rYS5zZXQoYSxiKTt0aGlzLm1hLnB1c2goYSk7dGhpcy5WfHwodGhpcy5WPSEwLHRoaXMuamEoZnVuY3Rpb24oKXtyZXR1cm4gTGcoYyl9KSl9O1xudi5kZWZpbmU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2lmKCEoYiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3VzdG9tIGVsZW1lbnQgY29uc3RydWN0b3JzIG11c3QgYmUgZnVuY3Rpb25zLlwiKTtLZyh0aGlzLGEpO01nKHRoaXMsYSxiKTt0aGlzLm1hLnB1c2goYSk7dGhpcy5WfHwodGhpcy5WPSEwLHRoaXMuamEoZnVuY3Rpb24oKXtyZXR1cm4gTGcoYyl9KSl9O2Z1bmN0aW9uIEtnKGEsYil7aWYoIW9nKGIpKXRocm93IG5ldyBTeW50YXhFcnJvcihcIlRoZSBlbGVtZW50IG5hbWUgJ1wiK2IrXCInIGlzIG5vdCB2YWxpZC5cIik7aWYoRWcoYSxiKSl0aHJvdyBFcnJvcihcIkEgY3VzdG9tIGVsZW1lbnQgd2l0aCBuYW1lICdcIisoYitcIicgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLlwiKSk7aWYoYS50YSl0aHJvdyBFcnJvcihcIkEgY3VzdG9tIGVsZW1lbnQgaXMgYWxyZWFkeSBiZWluZyBkZWZpbmVkLlwiKTt9XG5mdW5jdGlvbiBNZyhhLGIsYyl7YS50YT0hMDt2YXIgZDt0cnl7dmFyIGU9Yy5wcm90b3R5cGU7aWYoIShlIGluc3RhbmNlb2YgT2JqZWN0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIGN1c3RvbSBlbGVtZW50IGNvbnN0cnVjdG9yJ3MgcHJvdG90eXBlIGlzIG5vdCBhbiBvYmplY3QuXCIpO3ZhciBmPWZ1bmN0aW9uKG0pe3ZhciBxPWVbbV07aWYodm9pZCAwIT09cSYmIShxIGluc3RhbmNlb2YgRnVuY3Rpb24pKXRocm93IEVycm9yKFwiVGhlICdcIittK1wiJyBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uXCIpO3JldHVybiBxfTt2YXIgZz1mKFwiY29ubmVjdGVkQ2FsbGJhY2tcIik7dmFyIGg9ZihcImRpc2Nvbm5lY3RlZENhbGxiYWNrXCIpO3ZhciBrPWYoXCJhZG9wdGVkQ2FsbGJhY2tcIik7dmFyIGw9KGQ9ZihcImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFja1wiKSkmJmMub2JzZXJ2ZWRBdHRyaWJ1dGVzfHxbXX1jYXRjaChtKXt0aHJvdyBtO31maW5hbGx5e2EudGE9ITF9Yz17bG9jYWxOYW1lOmIsXG5jb25zdHJ1Y3RvckZ1bmN0aW9uOmMsY29ubmVjdGVkQ2FsbGJhY2s6ZyxkaXNjb25uZWN0ZWRDYWxsYmFjazpoLGFkb3B0ZWRDYWxsYmFjazprLGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjazpkLG9ic2VydmVkQXR0cmlidXRlczpsLGNvbnN0cnVjdGlvblN0YWNrOltdfTthLmxhLnNldChiLGMpO2EuQ2Euc2V0KGMuY29uc3RydWN0b3JGdW5jdGlvbixjKTtyZXR1cm4gY312LnVwZ3JhZGU9ZnVuY3Rpb24oYSl7RGcodGhpcy5TLGEpfTtcbmZ1bmN0aW9uIExnKGEpe2lmKCExIT09YS5WKXthLlY9ITE7Zm9yKHZhciBiPVtdLGM9YS5tYSxkPW5ldyBNYXAsZT0wO2U8Yy5sZW5ndGg7ZSsrKWQuc2V0KGNbZV0sW10pO0RnKGEuUyxkb2N1bWVudCx7dXBncmFkZTpmdW5jdGlvbihrKXtpZih2b2lkIDA9PT1rLl9fQ0Vfc3RhdGUpe3ZhciBsPWsubG9jYWxOYW1lLG09ZC5nZXQobCk7bT9tLnB1c2goayk6YS5sYS5oYXMobCkmJmIucHVzaChrKX19fSk7Zm9yKGU9MDtlPGIubGVuZ3RoO2UrKylCZyhhLlMsYltlXSk7Zm9yKGU9MDtlPGMubGVuZ3RoO2UrKyl7Zm9yKHZhciBmPWNbZV0sZz1kLmdldChmKSxoPTA7aDxnLmxlbmd0aDtoKyspQmcoYS5TLGdbaF0pOyhmPWEud2EuZ2V0KGYpKSYmZi5yZXNvbHZlKHZvaWQgMCl9Yy5sZW5ndGg9MH19di5nZXQ9ZnVuY3Rpb24oYSl7aWYoYT1FZyh0aGlzLGEpKXJldHVybiBhLmNvbnN0cnVjdG9yRnVuY3Rpb259O1xudi53aGVuRGVmaW5lZD1mdW5jdGlvbihhKXtpZighb2coYSkpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTeW50YXhFcnJvcihcIidcIithK1wiJyBpcyBub3QgYSB2YWxpZCBjdXN0b20gZWxlbWVudCBuYW1lLlwiKSk7dmFyIGI9dGhpcy53YS5nZXQoYSk7aWYoYilyZXR1cm4gYi5IYTtiPW5ldyBIZzt0aGlzLndhLnNldChhLGIpO3ZhciBjPXRoaXMubGEuaGFzKGEpfHx0aGlzLmthLmhhcyhhKTthPS0xPT09dGhpcy5tYS5pbmRleE9mKGEpO2MmJmEmJmIucmVzb2x2ZSh2b2lkIDApO3JldHVybiBiLkhhfTt2LnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2s9ZnVuY3Rpb24oYSl7dGhpcy5EYSYmSmcodGhpcy5EYSk7dmFyIGI9dGhpcy5qYTt0aGlzLmphPWZ1bmN0aW9uKGMpe3JldHVybiBhKGZ1bmN0aW9uKCl7cmV0dXJuIGIoYyl9KX19O1xuZnVuY3Rpb24gRWcoYSxiKXt2YXIgYz1hLmxhLmdldChiKTtpZihjKXJldHVybiBjO2lmKGM9YS5rYS5nZXQoYikpe2Eua2EuZGVsZXRlKGIpO3RyeXtyZXR1cm4gTWcoYSxiLGMoKSl9Y2F0Y2goZCl7RmcoZCl9fX13aW5kb3cuQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5PVU7VS5wcm90b3R5cGUuZGVmaW5lPVUucHJvdG90eXBlLmRlZmluZTtVLnByb3RvdHlwZS51cGdyYWRlPVUucHJvdG90eXBlLnVwZ3JhZGU7VS5wcm90b3R5cGUuZ2V0PVUucHJvdG90eXBlLmdldDtVLnByb3RvdHlwZS53aGVuRGVmaW5lZD1VLnByb3RvdHlwZS53aGVuRGVmaW5lZDtVLnByb3RvdHlwZS5wb2x5ZmlsbERlZmluZUxhenk9VS5wcm90b3R5cGUuZWI7VS5wcm90b3R5cGUucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjaz1VLnByb3RvdHlwZS5wb2x5ZmlsbFdyYXBGbHVzaENhbGxiYWNrO2Z1bmN0aW9uIE5nKGEsYixjKXtmdW5jdGlvbiBkKGUpe3JldHVybiBmdW5jdGlvbihmKXtmb3IodmFyIGc9W10saD0wO2g8YXJndW1lbnRzLmxlbmd0aDsrK2gpZ1toXT1hcmd1bWVudHNbaF07aD1bXTtmb3IodmFyIGs9W10sbD0wO2w8Zy5sZW5ndGg7bCsrKXt2YXIgbT1nW2xdO20gaW5zdGFuY2VvZiBFbGVtZW50JiZUKG0pJiZrLnB1c2gobSk7aWYobSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpZm9yKG09bS5maXJzdENoaWxkO207bT1tLm5leHRTaWJsaW5nKWgucHVzaChtKTtlbHNlIGgucHVzaChtKX1lLmFwcGx5KHRoaXMsZyk7Zm9yKGc9MDtnPGsubGVuZ3RoO2crKylDZyhhLGtbZ10pO2lmKFQodGhpcykpZm9yKGc9MDtnPGgubGVuZ3RoO2crKylrPWhbZ10sayBpbnN0YW5jZW9mIEVsZW1lbnQmJkFnKGEsayl9fXZvaWQgMCE9PWMucHJlcGVuZCYmKGIucHJlcGVuZD1kKGMucHJlcGVuZCkpO3ZvaWQgMCE9PWMuYXBwZW5kJiYoYi5hcHBlbmQ9ZChjLmFwcGVuZCkpfVxuO2Z1bmN0aW9uIE9nKGEpe0RvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGIpe3JldHVybiBHZyhhLHRoaXMsYixudWxsKX07RG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGU9ZnVuY3Rpb24oYixjKXtiPUpmLmNhbGwodGhpcyxiLCEhYyk7dGhpcy5fX0NFX3JlZ2lzdHJ5P0RnKGEsYik6eWcoYSxiKTtyZXR1cm4gYn07RG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnROUz1mdW5jdGlvbihiLGMpe3JldHVybiBHZyhhLHRoaXMsYyxiKX07TmcoYSxEb2N1bWVudC5wcm90b3R5cGUse3ByZXBlbmQ6S2YsYXBwZW5kOkxmfSl9O2Z1bmN0aW9uIFBnKGEpe2Z1bmN0aW9uIGIoZCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgZj1bXSxnPTA7Zzxhcmd1bWVudHMubGVuZ3RoOysrZylmW2ddPWFyZ3VtZW50c1tnXTtnPVtdO2Zvcih2YXIgaD1bXSxrPTA7azxmLmxlbmd0aDtrKyspe3ZhciBsPWZba107bCBpbnN0YW5jZW9mIEVsZW1lbnQmJlQobCkmJmgucHVzaChsKTtpZihsIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudClmb3IobD1sLmZpcnN0Q2hpbGQ7bDtsPWwubmV4dFNpYmxpbmcpZy5wdXNoKGwpO2Vsc2UgZy5wdXNoKGwpfWQuYXBwbHkodGhpcyxmKTtmb3IoZj0wO2Y8aC5sZW5ndGg7ZisrKUNnKGEsaFtmXSk7aWYoVCh0aGlzKSlmb3IoZj0wO2Y8Zy5sZW5ndGg7ZisrKWg9Z1tmXSxoIGluc3RhbmNlb2YgRWxlbWVudCYmQWcoYSxoKX19dmFyIGM9RWxlbWVudC5wcm90b3R5cGU7dm9pZCAwIT09ZmcmJihjLmJlZm9yZT1iKGZnKSk7dm9pZCAwIT09Z2cmJihjLmFmdGVyPWIoZ2cpKTt2b2lkIDAhPT1cbmhnJiYoYy5yZXBsYWNlV2l0aD1mdW5jdGlvbihkKXtmb3IodmFyIGU9W10sZj0wO2Y8YXJndW1lbnRzLmxlbmd0aDsrK2YpZVtmXT1hcmd1bWVudHNbZl07Zj1bXTtmb3IodmFyIGc9W10saD0wO2g8ZS5sZW5ndGg7aCsrKXt2YXIgaz1lW2hdO2sgaW5zdGFuY2VvZiBFbGVtZW50JiZUKGspJiZnLnB1c2goayk7aWYoayBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpZm9yKGs9ay5maXJzdENoaWxkO2s7az1rLm5leHRTaWJsaW5nKWYucHVzaChrKTtlbHNlIGYucHVzaChrKX1oPVQodGhpcyk7aGcuYXBwbHkodGhpcyxlKTtmb3IoZT0wO2U8Zy5sZW5ndGg7ZSsrKUNnKGEsZ1tlXSk7aWYoaClmb3IoQ2coYSx0aGlzKSxlPTA7ZTxmLmxlbmd0aDtlKyspZz1mW2VdLGcgaW5zdGFuY2VvZiBFbGVtZW50JiZBZyhhLGcpfSk7dm9pZCAwIT09aWcmJihjLnJlbW92ZT1mdW5jdGlvbigpe3ZhciBkPVQodGhpcyk7aWcuY2FsbCh0aGlzKTtkJiZDZyhhLHRoaXMpfSl9O2Z1bmN0aW9uIFFnKGEpe2Z1bmN0aW9uIGIoZSxmKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImlubmVySFRNTFwiLHtlbnVtZXJhYmxlOmYuZW51bWVyYWJsZSxjb25maWd1cmFibGU6ITAsZ2V0OmYuZ2V0LHNldDpmdW5jdGlvbihnKXt2YXIgaD10aGlzLGs9dm9pZCAwO1QodGhpcykmJihrPVtdLHZnKGEsdGhpcyxmdW5jdGlvbihxKXtxIT09aCYmay5wdXNoKHEpfSkpO2Yuc2V0LmNhbGwodGhpcyxnKTtpZihrKWZvcih2YXIgbD0wO2w8ay5sZW5ndGg7bCsrKXt2YXIgbT1rW2xdOzE9PT1tLl9fQ0Vfc3RhdGUmJmEuZGlzY29ubmVjdGVkQ2FsbGJhY2sobSl9dGhpcy5vd25lckRvY3VtZW50Ll9fQ0VfcmVnaXN0cnk/RGcoYSx0aGlzKTp5ZyhhLHRoaXMpO3JldHVybiBnfX0pfWZ1bmN0aW9uIGMoZSxmKXtlLmluc2VydEFkamFjZW50RWxlbWVudD1mdW5jdGlvbihnLGgpe3ZhciBrPVQoaCk7Zz1mLmNhbGwodGhpcyxnLGgpO2smJkNnKGEsaCk7VChnKSYmQWcoYSxoKTtyZXR1cm4gZ319XG5mdW5jdGlvbiBkKGUsZil7ZnVuY3Rpb24gZyhoLGspe2Zvcih2YXIgbD1bXTtoIT09aztoPWgubmV4dFNpYmxpbmcpbC5wdXNoKGgpO2ZvcihrPTA7azxsLmxlbmd0aDtrKyspRGcoYSxsW2tdKX1lLmluc2VydEFkamFjZW50SFRNTD1mdW5jdGlvbihoLGspe2g9aC50b0xvd2VyQ2FzZSgpO2lmKFwiYmVmb3JlYmVnaW5cIj09PWgpe3ZhciBsPXRoaXMucHJldmlvdXNTaWJsaW5nO2YuY2FsbCh0aGlzLGgsayk7ZyhsfHx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCx0aGlzKX1lbHNlIGlmKFwiYWZ0ZXJiZWdpblwiPT09aClsPXRoaXMuZmlyc3RDaGlsZCxmLmNhbGwodGhpcyxoLGspLGcodGhpcy5maXJzdENoaWxkLGwpO2Vsc2UgaWYoXCJiZWZvcmVlbmRcIj09PWgpbD10aGlzLmxhc3RDaGlsZCxmLmNhbGwodGhpcyxoLGspLGcobHx8dGhpcy5maXJzdENoaWxkLG51bGwpO2Vsc2UgaWYoXCJhZnRlcmVuZFwiPT09aClsPXRoaXMubmV4dFNpYmxpbmcsZi5jYWxsKHRoaXMsaCxrKSxnKHRoaXMubmV4dFNpYmxpbmcsXG5sKTtlbHNlIHRocm93IG5ldyBTeW50YXhFcnJvcihcIlRoZSB2YWx1ZSBwcm92aWRlZCAoXCIrU3RyaW5nKGgpK1wiKSBpcyBub3Qgb25lIG9mICdiZWZvcmViZWdpbicsICdhZnRlcmJlZ2luJywgJ2JlZm9yZWVuZCcsIG9yICdhZnRlcmVuZCcuXCIpO319VWYmJihFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3c9ZnVuY3Rpb24oZSl7ZT1VZi5jYWxsKHRoaXMsZSk7aWYoYS5XJiYhZS5fX0NFX3BhdGNoZWQpe2UuX19DRV9wYXRjaGVkPSEwO2Zvcih2YXIgZj0wO2Y8YS5jYS5sZW5ndGg7ZisrKWEuY2FbZl0oZSl9cmV0dXJuIHRoaXMuX19DRV9zaGFkb3dSb290PWV9KTtWZiYmVmYuZ2V0P2IoRWxlbWVudC5wcm90b3R5cGUsVmYpOmtnJiZrZy5nZXQ/YihIVE1MRWxlbWVudC5wcm90b3R5cGUsa2cpOnhnKGEsZnVuY3Rpb24oZSl7YihlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT2YuY2FsbCh0aGlzLCEwKS5pbm5lckhUTUx9LHNldDpmdW5jdGlvbihmKXt2YXIgZz1cblwidGVtcGxhdGVcIj09PXRoaXMubG9jYWxOYW1lLGg9Zz90aGlzLmNvbnRlbnQ6dGhpcyxrPUlmLmNhbGwoZG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkksdGhpcy5sb2NhbE5hbWUpO2ZvcihrLmlubmVySFRNTD1mOzA8aC5jaGlsZE5vZGVzLmxlbmd0aDspUmYuY2FsbChoLGguY2hpbGROb2Rlc1swXSk7Zm9yKGY9Zz9rLmNvbnRlbnQ6azswPGYuY2hpbGROb2Rlcy5sZW5ndGg7KVBmLmNhbGwoaCxmLmNoaWxkTm9kZXNbMF0pfX0pfSk7RWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKGUsZil7aWYoMSE9PXRoaXMuX19DRV9zdGF0ZSlyZXR1cm4gWGYuY2FsbCh0aGlzLGUsZik7dmFyIGc9V2YuY2FsbCh0aGlzLGUpO1hmLmNhbGwodGhpcyxlLGYpO2Y9V2YuY2FsbCh0aGlzLGUpO2EuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHRoaXMsZSxnLGYsbnVsbCl9O0VsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKGUsZixnKXtpZigxIT09dGhpcy5fX0NFX3N0YXRlKXJldHVybiAkZi5jYWxsKHRoaXMsXG5lLGYsZyk7dmFyIGg9WmYuY2FsbCh0aGlzLGUsZik7JGYuY2FsbCh0aGlzLGUsZixnKTtnPVpmLmNhbGwodGhpcyxlLGYpO2EuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHRoaXMsZixoLGcsZSl9O0VsZW1lbnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbihlKXtpZigxIT09dGhpcy5fX0NFX3N0YXRlKXJldHVybiBZZi5jYWxsKHRoaXMsZSk7dmFyIGY9V2YuY2FsbCh0aGlzLGUpO1lmLmNhbGwodGhpcyxlKTtudWxsIT09ZiYmYS5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodGhpcyxlLGYsbnVsbCxudWxsKX07RWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlTlM9ZnVuY3Rpb24oZSxmKXtpZigxIT09dGhpcy5fX0NFX3N0YXRlKXJldHVybiBhZy5jYWxsKHRoaXMsZSxmKTt2YXIgZz1aZi5jYWxsKHRoaXMsZSxmKTthZy5jYWxsKHRoaXMsZSxmKTt2YXIgaD1aZi5jYWxsKHRoaXMsZSxmKTtnIT09aCYmYS5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodGhpcyxcbmYsZyxoLGUpfTtsZz9jKEhUTUxFbGVtZW50LnByb3RvdHlwZSxsZyk6YmcmJmMoRWxlbWVudC5wcm90b3R5cGUsYmcpO21nP2QoSFRNTEVsZW1lbnQucHJvdG90eXBlLG1nKTpjZyYmZChFbGVtZW50LnByb3RvdHlwZSxjZyk7TmcoYSxFbGVtZW50LnByb3RvdHlwZSx7cHJlcGVuZDpkZyxhcHBlbmQ6ZWd9KTtQZyhhKX07dmFyIFJnPXt9O2Z1bmN0aW9uIFNnKGEpe2Z1bmN0aW9uIGIoKXt2YXIgYz10aGlzLmNvbnN0cnVjdG9yO3ZhciBkPWRvY3VtZW50Ll9fQ0VfcmVnaXN0cnkuQ2EuZ2V0KGMpO2lmKCFkKXRocm93IEVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCBhIGN1c3RvbSBlbGVtZW50OiBUaGUgY29uc3RydWN0b3Igd2FzIG5vdCByZWdpc3RlcmVkIHdpdGggYGN1c3RvbUVsZW1lbnRzYC5cIik7dmFyIGU9ZC5jb25zdHJ1Y3Rpb25TdGFjaztpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGU9SGYuY2FsbChkb2N1bWVudCxkLmxvY2FsTmFtZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGUsYy5wcm90b3R5cGUpLGUuX19DRV9zdGF0ZT0xLGUuX19DRV9kZWZpbml0aW9uPWQsemcoYSxlKSxlO3ZhciBmPWUubGVuZ3RoLTEsZz1lW2ZdO2lmKGc9PT1SZyl0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1wiK2QubG9jYWxOYW1lK1wiJzogVGhpcyBlbGVtZW50IHdhcyBhbHJlYWR5IGNvbnN0cnVjdGVkLlwiKTtlW2ZdPVxuUmc7T2JqZWN0LnNldFByb3RvdHlwZU9mKGcsYy5wcm90b3R5cGUpO3pnKGEsZyk7cmV0dXJuIGd9Yi5wcm90b3R5cGU9amcucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRWxlbWVudC5wcm90b3R5cGUsXCJjb25zdHJ1Y3RvclwiLHt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpifSk7d2luZG93LkhUTUxFbGVtZW50PWJ9O2Z1bmN0aW9uIFRnKGEpe2Z1bmN0aW9uIGIoYyxkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxcInRleHRDb250ZW50XCIse2VudW1lcmFibGU6ZC5lbnVtZXJhYmxlLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZC5nZXQsc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSlkLnNldC5jYWxsKHRoaXMsZSk7ZWxzZXt2YXIgZj12b2lkIDA7aWYodGhpcy5maXJzdENoaWxkKXt2YXIgZz10aGlzLmNoaWxkTm9kZXMsaD1nLmxlbmd0aDtpZigwPGgmJlQodGhpcykpe2Y9QXJyYXkoaCk7Zm9yKHZhciBrPTA7azxoO2srKylmW2tdPWdba119fWQuc2V0LmNhbGwodGhpcyxlKTtpZihmKWZvcihlPTA7ZTxmLmxlbmd0aDtlKyspQ2coYSxmW2VdKX19fSl9Tm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKGMsZCl7aWYoYyBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpe3ZhciBlPXFnKGMpO2M9UWYuY2FsbCh0aGlzLGMsZCk7aWYoVCh0aGlzKSlmb3IoZD1cbjA7ZDxlLmxlbmd0aDtkKyspQWcoYSxlW2RdKTtyZXR1cm4gY31lPWMgaW5zdGFuY2VvZiBFbGVtZW50JiZUKGMpO2Q9UWYuY2FsbCh0aGlzLGMsZCk7ZSYmQ2coYSxjKTtUKHRoaXMpJiZBZyhhLGMpO3JldHVybiBkfTtOb2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZD1mdW5jdGlvbihjKXtpZihjIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCl7dmFyIGQ9cWcoYyk7Yz1QZi5jYWxsKHRoaXMsYyk7aWYoVCh0aGlzKSlmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKylBZyhhLGRbZV0pO3JldHVybiBjfWQ9YyBpbnN0YW5jZW9mIEVsZW1lbnQmJlQoYyk7ZT1QZi5jYWxsKHRoaXMsYyk7ZCYmQ2coYSxjKTtUKHRoaXMpJiZBZyhhLGMpO3JldHVybiBlfTtOb2RlLnByb3RvdHlwZS5jbG9uZU5vZGU9ZnVuY3Rpb24oYyl7Yz1PZi5jYWxsKHRoaXMsISFjKTt0aGlzLm93bmVyRG9jdW1lbnQuX19DRV9yZWdpc3RyeT9EZyhhLGMpOnlnKGEsYyk7cmV0dXJuIGN9O05vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPVxuZnVuY3Rpb24oYyl7dmFyIGQ9YyBpbnN0YW5jZW9mIEVsZW1lbnQmJlQoYyksZT1SZi5jYWxsKHRoaXMsYyk7ZCYmQ2coYSxjKTtyZXR1cm4gZX07Tm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkPWZ1bmN0aW9uKGMsZCl7aWYoYyBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpe3ZhciBlPXFnKGMpO2M9U2YuY2FsbCh0aGlzLGMsZCk7aWYoVCh0aGlzKSlmb3IoQ2coYSxkKSxkPTA7ZDxlLmxlbmd0aDtkKyspQWcoYSxlW2RdKTtyZXR1cm4gY31lPWMgaW5zdGFuY2VvZiBFbGVtZW50JiZUKGMpO3ZhciBmPVNmLmNhbGwodGhpcyxjLGQpLGc9VCh0aGlzKTtnJiZDZyhhLGQpO2UmJkNnKGEsYyk7ZyYmQWcoYSxjKTtyZXR1cm4gZn07VGYmJlRmLmdldD9iKE5vZGUucHJvdG90eXBlLFRmKTp3ZyhhLGZ1bmN0aW9uKGMpe2IoYyx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBkPVtdLGU9dGhpcy5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKWUubm9kZVR5cGUhPT1cbk5vZGUuQ09NTUVOVF9OT0RFJiZkLnB1c2goZS50ZXh0Q29udGVudCk7cmV0dXJuIGQuam9pbihcIlwiKX0sc2V0OmZ1bmN0aW9uKGQpe2Zvcig7dGhpcy5maXJzdENoaWxkOylSZi5jYWxsKHRoaXMsdGhpcy5maXJzdENoaWxkKTtudWxsIT1kJiZcIlwiIT09ZCYmUGYuY2FsbCh0aGlzLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGQpKX19KX0pfTt2YXIgdWc9d2luZG93LmN1c3RvbUVsZW1lbnRzO2Z1bmN0aW9uIFVnKCl7dmFyIGE9bmV3IHRnO1NnKGEpO09nKGEpO05nKGEsRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUse3ByZXBlbmQ6TWYsYXBwZW5kOk5mfSk7VGcoYSk7UWcoYSk7YT1uZXcgVShhKTtkb2N1bWVudC5fX0NFX3JlZ2lzdHJ5PWE7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdyxcImN1c3RvbUVsZW1lbnRzXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmF9KX11ZyYmIXVnLmZvcmNlUG9seWZpbGwmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHVnLmRlZmluZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdWcuZ2V0fHxVZygpO3dpbmRvdy5fX0NFX2luc3RhbGxQb2x5ZmlsbD1VZzsvKlxuXG5Db3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcblRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4qL1xuZnVuY3Rpb24gVmcoKXt0aGlzLmVuZD10aGlzLnN0YXJ0PTA7dGhpcy5ydWxlcz10aGlzLnBhcmVudD10aGlzLnByZXZpb3VzPW51bGw7dGhpcy5jc3NUZXh0PXRoaXMucGFyc2VkQ3NzVGV4dD1cIlwiO3RoaXMuYXRSdWxlPSExO3RoaXMudHlwZT0wO3RoaXMucGFyc2VkU2VsZWN0b3I9dGhpcy5zZWxlY3Rvcj10aGlzLmtleWZyYW1lc05hbWU9XCJcIn1cbmZ1bmN0aW9uIFdnKGEpe3ZhciBiPWE9YS5yZXBsYWNlKFhnLFwiXCIpLnJlcGxhY2UoWWcsXCJcIiksYz1uZXcgVmc7Yy5zdGFydD0wO2MuZW5kPWIubGVuZ3RoO2Zvcih2YXIgZD1jLGU9MCxmPWIubGVuZ3RoO2U8ZjtlKyspaWYoXCJ7XCI9PT1iW2VdKXtkLnJ1bGVzfHwoZC5ydWxlcz1bXSk7dmFyIGc9ZCxoPWcucnVsZXNbZy5ydWxlcy5sZW5ndGgtMV18fG51bGw7ZD1uZXcgVmc7ZC5zdGFydD1lKzE7ZC5wYXJlbnQ9ZztkLnByZXZpb3VzPWg7Zy5ydWxlcy5wdXNoKGQpfWVsc2VcIn1cIj09PWJbZV0mJihkLmVuZD1lKzEsZD1kLnBhcmVudHx8Yyk7cmV0dXJuIFpnKGMsYSl9XG5mdW5jdGlvbiBaZyhhLGIpe3ZhciBjPWIuc3Vic3RyaW5nKGEuc3RhcnQsYS5lbmQtMSk7YS5wYXJzZWRDc3NUZXh0PWEuY3NzVGV4dD1jLnRyaW0oKTthLnBhcmVudCYmKGM9Yi5zdWJzdHJpbmcoYS5wcmV2aW91cz9hLnByZXZpb3VzLmVuZDphLnBhcmVudC5zdGFydCxhLnN0YXJ0LTEpLGM9JGcoYyksYz1jLnJlcGxhY2UoYWgsXCIgXCIpLGM9Yy5zdWJzdHJpbmcoYy5sYXN0SW5kZXhPZihcIjtcIikrMSksYz1hLnBhcnNlZFNlbGVjdG9yPWEuc2VsZWN0b3I9Yy50cmltKCksYS5hdFJ1bGU9MD09PWMuaW5kZXhPZihcIkBcIiksYS5hdFJ1bGU/MD09PWMuaW5kZXhPZihcIkBtZWRpYVwiKT9hLnR5cGU9Ymg6Yy5tYXRjaChjaCkmJihhLnR5cGU9ZGgsYS5rZXlmcmFtZXNOYW1lPWEuc2VsZWN0b3Iuc3BsaXQoYWgpLnBvcCgpKTphLnR5cGU9MD09PWMuaW5kZXhPZihcIi0tXCIpP2VoOmZoKTtpZihjPWEucnVsZXMpZm9yKHZhciBkPTAsZT1jLmxlbmd0aCxmPXZvaWQgMDtkPGUmJihmPWNbZF0pO2QrKylaZyhmLFxuYik7cmV0dXJuIGF9ZnVuY3Rpb24gJGcoYSl7cmV0dXJuIGEucmVwbGFjZSgvXFxcXChbMC05YS1mXXsxLDZ9KVxccy9naSxmdW5jdGlvbihiLGMpe2I9Yztmb3IoYz02LWIubGVuZ3RoO2MtLTspYj1cIjBcIitiO3JldHVyblwiXFxcXFwiK2J9KX1cbmZ1bmN0aW9uIGdoKGEsYixjKXtjPXZvaWQgMD09PWM/XCJcIjpjO3ZhciBkPVwiXCI7aWYoYS5jc3NUZXh0fHxhLnJ1bGVzKXt2YXIgZT1hLnJ1bGVzLGY7aWYoZj1lKWY9ZVswXSxmPSEoZiYmZi5zZWxlY3RvciYmMD09PWYuc2VsZWN0b3IuaW5kZXhPZihcIi0tXCIpKTtpZihmKXtmPTA7Zm9yKHZhciBnPWUubGVuZ3RoLGg9dm9pZCAwO2Y8ZyYmKGg9ZVtmXSk7ZisrKWQ9Z2goaCxiLGQpfWVsc2UgYj9iPWEuY3NzVGV4dDooYj1hLmNzc1RleHQsYj1iLnJlcGxhY2UoaGgsXCJcIikucmVwbGFjZShpaCxcIlwiKSxiPWIucmVwbGFjZShqaCxcIlwiKS5yZXBsYWNlKGtoLFwiXCIpKSwoZD1iLnRyaW0oKSkmJihkPVwiICBcIitkK1wiXFxuXCIpfWQmJihhLnNlbGVjdG9yJiYoYys9YS5zZWxlY3RvcitcIiB7XFxuXCIpLGMrPWQsYS5zZWxlY3RvciYmKGMrPVwifVxcblxcblwiKSk7cmV0dXJuIGN9XG52YXIgZmg9MSxkaD03LGJoPTQsZWg9MUUzLFhnPS9cXC9cXCpbXipdKlxcKisoW14vKl1bXipdKlxcKispKlxcLy9naW0sWWc9L0BpbXBvcnRbXjtdKjsvZ2ltLGhoPS8oPzpeW147XFwtXFxzfV0rKT8tLVteO3t9XSo/Oltee307XSo/KD86WztcXG5dfCQpL2dpbSxpaD0vKD86XlteO1xcLVxcc31dKyk/LS1bXjt7fV0qPzpbXnt9O10qP3tbXn1dKj99KD86WztcXG5dfCQpPy9naW0samg9L0BhcHBseVxccypcXCg/W14pO10qXFwpP1xccyooPzpbO1xcbl18JCk/L2dpbSxraD0vW147Ol0qPzpbXjtdKj92YXJcXChbXjtdKlxcKSg/Ols7XFxuXXwkKT8vZ2ltLGNoPS9eQFteXFxzXSprZXlmcmFtZXMvLGFoPS9cXHMrL2c7dmFyIFY9ISh3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5pblVzZSksbGg7ZnVuY3Rpb24gbWgoYSl7bGg9YSYmYS5zaGltY3NzcHJvcGVydGllcz8hMTpWfHwhKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XFwvNjAxfEVkZ2VcXC8xNS8pfHwhd2luZG93LkNTU3x8IUNTUy5zdXBwb3J0c3x8IUNTUy5zdXBwb3J0cyhcImJveC1zaGFkb3dcIixcIjAgMCAwIHZhcigtLWZvbylcIikpfXZhciBuaDt3aW5kb3cuU2hhZHlDU1MmJnZvaWQgMCE9PXdpbmRvdy5TaGFkeUNTUy5jc3NCdWlsZCYmKG5oPXdpbmRvdy5TaGFkeUNTUy5jc3NCdWlsZCk7dmFyIG9oPSEoIXdpbmRvdy5TaGFkeUNTU3x8IXdpbmRvdy5TaGFkeUNTUy5kaXNhYmxlUnVudGltZSk7XG53aW5kb3cuU2hhZHlDU1MmJnZvaWQgMCE9PXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3M/bGg9d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzczp3aW5kb3cuU2hhZHlDU1M/KG1oKHdpbmRvdy5TaGFkeUNTUyksd2luZG93LlNoYWR5Q1NTPXZvaWQgMCk6bWgod2luZG93LldlYkNvbXBvbmVudHMmJndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzKTt2YXIgWD1saDt2YXIgcGg9Lyg/Ol58WztcXHN7XVxccyopKC0tW1xcdy1dKj8pXFxzKjpcXHMqKD86KCg/OicoPzpcXFxcJ3wuKSo/J3xcIig/OlxcXFxcInwuKSo/XCJ8XFwoW14pXSo/XFwpfFtefTt7XSkrKXxcXHsoW159XSopXFx9KD86KD89WztcXHN9XSl8JCkpL2dpLHFoPS8oPzpefFxcVyspQGFwcGx5XFxzKlxcKD8oW14pO1xcbl0qKVxcKT8vZ2kscmg9LygtLVtcXHctXSspXFxzKihbOiw7KV18JCkvZ2ksc2g9LyhhbmltYXRpb25cXHMqOil8KGFuaW1hdGlvbi1uYW1lXFxzKjopLyx0aD0vQG1lZGlhXFxzKC4qKS8sdWg9L1xce1tefV0qXFx9L2c7dmFyIHZoPW5ldyBTZXQ7ZnVuY3Rpb24gd2goYSxiKXtpZighYSlyZXR1cm5cIlwiO1wic3RyaW5nXCI9PT10eXBlb2YgYSYmKGE9V2coYSkpO2ImJnhoKGEsYik7cmV0dXJuIGdoKGEsWCl9ZnVuY3Rpb24geWgoYSl7IWEuX19jc3NSdWxlcyYmYS50ZXh0Q29udGVudCYmKGEuX19jc3NSdWxlcz1XZyhhLnRleHRDb250ZW50KSk7cmV0dXJuIGEuX19jc3NSdWxlc3x8bnVsbH1mdW5jdGlvbiB6aChhKXtyZXR1cm4hIWEucGFyZW50JiZhLnBhcmVudC50eXBlPT09ZGh9ZnVuY3Rpb24geGgoYSxiLGMsZCl7aWYoYSl7dmFyIGU9ITEsZj1hLnR5cGU7aWYoZCYmZj09PWJoKXt2YXIgZz1hLnNlbGVjdG9yLm1hdGNoKHRoKTtnJiYod2luZG93Lm1hdGNoTWVkaWEoZ1sxXSkubWF0Y2hlc3x8KGU9ITApKX1mPT09Zmg/YihhKTpjJiZmPT09ZGg/YyhhKTpmPT09ZWgmJihlPSEwKTtpZigoYT1hLnJ1bGVzKSYmIWUpZm9yKGU9MCxmPWEubGVuZ3RoLGc9dm9pZCAwO2U8ZiYmKGc9YVtlXSk7ZSsrKXhoKGcsYixjLGQpfX1cbmZ1bmN0aW9uIEFoKGEsYixjLGQpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtiJiZlLnNldEF0dHJpYnV0ZShcInNjb3BlXCIsYik7ZS50ZXh0Q29udGVudD1hO0NoKGUsYyxkKTtyZXR1cm4gZX12YXIgRGg9bnVsbDtmdW5jdGlvbiBFaChhKXthPWRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoXCIgU2hhZHkgRE9NIHN0eWxlcyBmb3IgXCIrYStcIiBcIik7dmFyIGI9ZG9jdW1lbnQuaGVhZDtiLmluc2VydEJlZm9yZShhLChEaD9EaC5uZXh0U2libGluZzpudWxsKXx8Yi5maXJzdENoaWxkKTtyZXR1cm4gRGg9YX1mdW5jdGlvbiBDaChhLGIsYyl7Yj1ifHxkb2N1bWVudC5oZWFkO2IuaW5zZXJ0QmVmb3JlKGEsYyYmYy5uZXh0U2libGluZ3x8Yi5maXJzdENoaWxkKTtEaD9hLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKERoKT09PU5vZGUuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HJiYoRGg9YSk6RGg9YX1cbmZ1bmN0aW9uIEZoKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtiPGQ7YisrKWlmKFwiKFwiPT09YVtiXSljKys7ZWxzZSBpZihcIilcIj09PWFbYl0mJjA9PT0tLWMpcmV0dXJuIGI7cmV0dXJuLTF9ZnVuY3Rpb24gR2goYSxiKXt2YXIgYz1hLmluZGV4T2YoXCJ2YXIoXCIpO2lmKC0xPT09YylyZXR1cm4gYihhLFwiXCIsXCJcIixcIlwiKTt2YXIgZD1GaChhLGMrMyksZT1hLnN1YnN0cmluZyhjKzQsZCk7Yz1hLnN1YnN0cmluZygwLGMpO2E9R2goYS5zdWJzdHJpbmcoZCsxKSxiKTtkPWUuaW5kZXhPZihcIixcIik7cmV0dXJuLTE9PT1kP2IoYyxlLnRyaW0oKSxcIlwiLGEpOmIoYyxlLnN1YnN0cmluZygwLGQpLnRyaW0oKSxlLnN1YnN0cmluZyhkKzEpLnRyaW0oKSxhKX1mdW5jdGlvbiBIaChhLGIpe1Y/YS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLGIpOndpbmRvdy5TaGFkeURPTS5uYXRpdmVNZXRob2RzLnNldEF0dHJpYnV0ZS5jYWxsKGEsXCJjbGFzc1wiLGIpfVxudmFyIEloPXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLndyYXB8fGZ1bmN0aW9uKGEpe3JldHVybiBhfTtmdW5jdGlvbiBKaChhKXt2YXIgYj1hLmxvY2FsTmFtZSxjPVwiXCI7Yj8tMTxiLmluZGV4T2YoXCItXCIpfHwoYz1iLGI9YS5nZXRBdHRyaWJ1dGUmJmEuZ2V0QXR0cmlidXRlKFwiaXNcIil8fFwiXCIpOihiPWEuaXMsYz1hLmV4dGVuZHMpO3JldHVybntpczpiLGhhOmN9fWZ1bmN0aW9uIEtoKGEpe2Zvcih2YXIgYj1bXSxjPVwiXCIsZD0wOzA8PWQmJmQ8YS5sZW5ndGg7ZCsrKWlmKFwiKFwiPT09YVtkXSl7dmFyIGU9RmgoYSxkKTtjKz1hLnNsaWNlKGQsZSsxKTtkPWV9ZWxzZVwiLFwiPT09YVtkXT8oYi5wdXNoKGMpLGM9XCJcIik6Yys9YVtkXTtjJiZiLnB1c2goYyk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBMaChhKXtpZih2b2lkIDAhPT1uaClyZXR1cm4gbmg7aWYodm9pZCAwPT09YS5fX2Nzc0J1aWxkKXt2YXIgYj1hLmdldEF0dHJpYnV0ZShcImNzcy1idWlsZFwiKTtpZihiKWEuX19jc3NCdWlsZD1iO2Vsc2V7YTp7Yj1cInRlbXBsYXRlXCI9PT1hLmxvY2FsTmFtZT9hLmNvbnRlbnQuZmlyc3RDaGlsZDphLmZpcnN0Q2hpbGQ7aWYoYiBpbnN0YW5jZW9mIENvbW1lbnQmJihiPWIudGV4dENvbnRlbnQudHJpbSgpLnNwbGl0KFwiOlwiKSxcImNzcy1idWlsZFwiPT09YlswXSkpe2I9YlsxXTticmVhayBhfWI9XCJcIn1pZihcIlwiIT09Yil7dmFyIGM9XCJ0ZW1wbGF0ZVwiPT09YS5sb2NhbE5hbWU/YS5jb250ZW50LmZpcnN0Q2hpbGQ6YS5maXJzdENoaWxkO2MucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKX1hLl9fY3NzQnVpbGQ9Yn19cmV0dXJuIGEuX19jc3NCdWlsZHx8XCJcIn1cbmZ1bmN0aW9uIE1oKGEpe2E9dm9pZCAwPT09YT9cIlwiOmE7cmV0dXJuXCJcIiE9PWEmJlg/Vj9cInNoYWRvd1wiPT09YTpcInNoYWR5XCI9PT1hOiExfTtmdW5jdGlvbiBOaCgpe31mdW5jdGlvbiBPaChhLGIpe1BoKFFoLGEsZnVuY3Rpb24oYyl7UmgoYyxifHxcIlwiKX0pfWZ1bmN0aW9uIFBoKGEsYixjKXtiLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJmMoYik7dmFyIGQ7XCJ0ZW1wbGF0ZVwiPT09Yi5sb2NhbE5hbWU/ZD0oYi5jb250ZW50fHxiLl9jb250ZW50fHxiKS5jaGlsZE5vZGVzOmQ9Yi5jaGlsZHJlbnx8Yi5jaGlsZE5vZGVzO2lmKGQpZm9yKGI9MDtiPGQubGVuZ3RoO2IrKylQaChhLGRbYl0sYyl9XG5mdW5jdGlvbiBSaChhLGIsYyl7aWYoYilpZihhLmNsYXNzTGlzdCljPyhhLmNsYXNzTGlzdC5yZW1vdmUoXCJzdHlsZS1zY29wZVwiKSxhLmNsYXNzTGlzdC5yZW1vdmUoYikpOihhLmNsYXNzTGlzdC5hZGQoXCJzdHlsZS1zY29wZVwiKSxhLmNsYXNzTGlzdC5hZGQoYikpO2Vsc2UgaWYoYS5nZXRBdHRyaWJ1dGUpe3ZhciBkPWEuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7Yz9kJiYoYj1kLnJlcGxhY2UoXCJzdHlsZS1zY29wZVwiLFwiXCIpLnJlcGxhY2UoYixcIlwiKSxIaChhLGIpKTpIaChhLChkP2QrXCIgXCI6XCJcIikrXCJzdHlsZS1zY29wZSBcIitiKX19ZnVuY3Rpb24gU2goYSxiLGMpe1BoKFFoLGEsZnVuY3Rpb24oZCl7UmgoZCxiLCEwKTtSaChkLGMpfSl9ZnVuY3Rpb24gVGgoYSxiKXtQaChRaCxhLGZ1bmN0aW9uKGMpe1JoKGMsYnx8XCJcIiwhMCl9KX1cbmZ1bmN0aW9uIFVoKGEsYixjLGQsZSl7dmFyIGY9UWg7ZT12b2lkIDA9PT1lP1wiXCI6ZTtcIlwiPT09ZSYmKFZ8fFwic2hhZHlcIj09PSh2b2lkIDA9PT1kP1wiXCI6ZCk/ZT13aChiLGMpOihhPUpoKGEpLGU9VmgoZixiLGEuaXMsYS5oYSxjKStcIlxcblxcblwiKSk7cmV0dXJuIGUudHJpbSgpfWZ1bmN0aW9uIFZoKGEsYixjLGQsZSl7dmFyIGY9V2goYyxkKTtjPWM/XCIuXCIrYzpcIlwiO3JldHVybiB3aChiLGZ1bmN0aW9uKGcpe2cuaXx8KGcuc2VsZWN0b3I9Zy5GPVhoKGEsZyxhLmgsYyxmKSxnLmk9ITApO2UmJmUoZyxjLGYpfSl9ZnVuY3Rpb24gV2goYSxiKXtyZXR1cm4gYj9cIltpcz1cIithK1wiXVwiOmF9XG5mdW5jdGlvbiBYaChhLGIsYyxkLGUpe3ZhciBmPUtoKGIuc2VsZWN0b3IpO2lmKCF6aChiKSl7Yj0wO2Zvcih2YXIgZz1mLmxlbmd0aCxoPXZvaWQgMDtiPGcmJihoPWZbYl0pO2IrKylmW2JdPWMuY2FsbChhLGgsZCxlKX1yZXR1cm4gZi5maWx0ZXIoZnVuY3Rpb24oayl7cmV0dXJuISFrfSkuam9pbihcIixcIil9ZnVuY3Rpb24gWWgoYSl7cmV0dXJuIGEucmVwbGFjZShaaCxmdW5jdGlvbihiLGMsZCl7LTE8ZC5pbmRleE9mKFwiK1wiKT9kPWQucmVwbGFjZSgvXFwrL2csXCJfX19cIik6LTE8ZC5pbmRleE9mKFwiX19fXCIpJiYoZD1kLnJlcGxhY2UoL19fXy9nLFwiK1wiKSk7cmV0dXJuXCI6XCIrYytcIihcIitkK1wiKVwifSl9XG5mdW5jdGlvbiAkaChhKXtmb3IodmFyIGI9W10sYztjPWEubWF0Y2goYWkpOyl7dmFyIGQ9Yy5pbmRleCxlPUZoKGEsZCk7aWYoLTE9PT1lKXRocm93IEVycm9yKGMuaW5wdXQrXCIgc2VsZWN0b3IgbWlzc2luZyAnKSdcIik7Yz1hLnNsaWNlKGQsZSsxKTthPWEucmVwbGFjZShjLFwiXFx1ZTAwMFwiKTtiLnB1c2goYyl9cmV0dXJue0JhOmEsbWF0Y2hlczpifX1mdW5jdGlvbiBiaShhLGIpe3ZhciBjPWEuc3BsaXQoXCJcXHVlMDAwXCIpO3JldHVybiBiLnJlZHVjZShmdW5jdGlvbihkLGUsZil7cmV0dXJuIGQrZStjW2YrMV19LGNbMF0pfVxuTmgucHJvdG90eXBlLmg9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSExO2E9YS50cmltKCk7dmFyIGU9WmgudGVzdChhKTtlJiYoYT1hLnJlcGxhY2UoWmgsZnVuY3Rpb24oaCxrLGwpe3JldHVyblwiOlwiK2srXCIoXCIrbC5yZXBsYWNlKC9cXHMvZyxcIlwiKStcIilcIn0pLGE9WWgoYSkpO3ZhciBmPWFpLnRlc3QoYSk7aWYoZil7dmFyIGc9JGgoYSk7YT1nLkJhO2c9Zy5tYXRjaGVzfWE9YS5yZXBsYWNlKGNpLFwiOmhvc3QgJDFcIik7YT1hLnJlcGxhY2UoZGksZnVuY3Rpb24oaCxrLGwpe2R8fChoPWVpKGwsayxiLGMpLGQ9ZHx8aC5zdG9wLGs9aC5VYSxsPWgudmFsdWUpO3JldHVybiBrK2x9KTtmJiYoYT1iaShhLGcpKTtlJiYoYT1ZaChhKSk7cmV0dXJuIGE9YS5yZXBsYWNlKGZpLGZ1bmN0aW9uKGgsayxsLG0pe3JldHVybidbZGlyPVwiJytsKydcIl0gJytrK20rXCIsIFwiK2srJ1tkaXI9XCInK2wrJ1wiXScrbX0pfTtcbmZ1bmN0aW9uIGVpKGEsYixjLGQpe3ZhciBlPWEuaW5kZXhPZihcIjo6c2xvdHRlZFwiKTswPD1hLmluZGV4T2YoXCI6aG9zdFwiKT9hPWdpKGEsZCk6MCE9PWUmJihhPWM/aGkoYSxjKTphKTtjPSExOzA8PWUmJihiPVwiXCIsYz0hMCk7aWYoYyl7dmFyIGY9ITA7YyYmKGE9YS5yZXBsYWNlKGlpLGZ1bmN0aW9uKGcsaCl7cmV0dXJuXCIgPiBcIitofSkpfXJldHVybnt2YWx1ZTphLFVhOmIsc3RvcDpmfX1mdW5jdGlvbiBoaShhLGIpe2E9YS5zcGxpdCgvKFxcWy4rP1xcXSkvKTtmb3IodmFyIGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKDE9PT1kJTIpYy5wdXNoKGFbZF0pO2Vsc2V7dmFyIGU9YVtkXTtpZihcIlwiIT09ZXx8ZCE9PWEubGVuZ3RoLTEpZT1lLnNwbGl0KFwiOlwiKSxlWzBdKz1iLGMucHVzaChlLmpvaW4oXCI6XCIpKX1yZXR1cm4gYy5qb2luKFwiXCIpfVxuZnVuY3Rpb24gZ2koYSxiKXt2YXIgYz1hLm1hdGNoKGppKTtyZXR1cm4oYz1jJiZjWzJdLnRyaW0oKXx8XCJcIik/Y1swXS5tYXRjaChraSk/YS5yZXBsYWNlKGppLGZ1bmN0aW9uKGQsZSxmKXtyZXR1cm4gYitmfSk6Yy5zcGxpdChraSlbMF09PT1iP2M6XCJzaG91bGRfbm90X21hdGNoXCI6YS5yZXBsYWNlKFwiOmhvc3RcIixiKX1mdW5jdGlvbiBsaShhKXtcIjpyb290XCI9PT1hLnNlbGVjdG9yJiYoYS5zZWxlY3Rvcj1cImh0bWxcIil9TmgucHJvdG90eXBlLmk9ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWF0Y2goXCI6aG9zdFwiKT9cIlwiOmEubWF0Y2goXCI6OnNsb3R0ZWRcIik/dGhpcy5oKGEsXCI6bm90KC5zdHlsZS1zY29wZSlcIik6aGkoYS50cmltKCksXCI6bm90KC5zdHlsZS1zY29wZSlcIil9O2VhLk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE5oLnByb3RvdHlwZSx7Zzp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuXCJzdHlsZS1zY29wZVwifX19KTtcbnZhciBaaD0vOihudGhbLVxcd10rKVxcKChbXildKylcXCkvLGRpPS8oXnxbXFxzPit+XSspKCg/OlxcWy4rP1xcXXxbXlxccz4rfj1bXSkrKS9nLGtpPS9bWy46IypdLyxjaT0vXig6OnNsb3R0ZWQpLyxqaT0vKDpob3N0KSg/OlxcKCgoPzpcXChbXikoXSpcXCl8W14pKF0qKSs/KVxcKSkvLGlpPS8oPzo6OnNsb3R0ZWQpKD86XFwoKCg/OlxcKFteKShdKlxcKXxbXikoXSopKz8pXFwpKS8sZmk9LyguKik6ZGlyXFwoKD86KGx0cnxydGwpKVxcKSguKikvLGFpPS86KD86bWF0Y2hlc3xhbnl8LSg/OndlYmtpdHxtb3opLWFueSkvLFFoPW5ldyBOaDtmdW5jdGlvbiBtaShhLGIsYyxkLGUpe3RoaXMuTT1hfHxudWxsO3RoaXMuaD1ifHxudWxsO3RoaXMuemE9Y3x8W107dGhpcy5LPW51bGw7dGhpcy5jc3NCdWlsZD1lfHxcIlwiO3RoaXMuaGE9ZHx8XCJcIjt0aGlzLmc9dGhpcy5MPXRoaXMuUj1udWxsfWZ1bmN0aW9uIG5pKGEpe3JldHVybiBhP2EuX19zdHlsZUluZm86bnVsbH1mdW5jdGlvbiBvaShhLGIpe3JldHVybiBhLl9fc3R5bGVJbmZvPWJ9bWkucHJvdG90eXBlLmk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5NfTttaS5wcm90b3R5cGUuX2dldFN0eWxlUnVsZXM9bWkucHJvdG90eXBlLmk7ZnVuY3Rpb24gcGkoYSl7dmFyIGI9dGhpcy5tYXRjaGVzfHx0aGlzLm1hdGNoZXNTZWxlY3Rvcnx8dGhpcy5tb3pNYXRjaGVzU2VsZWN0b3J8fHRoaXMubXNNYXRjaGVzU2VsZWN0b3J8fHRoaXMub01hdGNoZXNTZWxlY3Rvcnx8dGhpcy53ZWJraXRNYXRjaGVzU2VsZWN0b3I7cmV0dXJuIGImJmIuY2FsbCh0aGlzLGEpfXZhciBxaT0vOmhvc3RcXHMqPlxccyovLHJpPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goXCJUcmlkZW50XCIpO2Z1bmN0aW9uIHNpKCl7fWZ1bmN0aW9uIHRpKGEpe3ZhciBiPXt9LGM9W10sZD0wO3hoKGEsZnVuY3Rpb24oZil7dWkoZik7Zi5pbmRleD1kKys7Zj1mLkQuY3NzVGV4dDtmb3IodmFyIGc7Zz1yaC5leGVjKGYpOyl7dmFyIGg9Z1sxXTtcIjpcIiE9PWdbMl0mJihiW2hdPSEwKX19LGZ1bmN0aW9uKGYpe2MucHVzaChmKX0pO2EuaD1jO2E9W107Zm9yKHZhciBlIGluIGIpYS5wdXNoKGUpO3JldHVybiBhfVxuZnVuY3Rpb24gdWkoYSl7aWYoIWEuRCl7dmFyIGI9e30sYz17fTt2aShhLGMpJiYoYi5QPWMsYS5ydWxlcz1udWxsKTtiLmNzc1RleHQ9YS5wYXJzZWRDc3NUZXh0LnJlcGxhY2UodWgsXCJcIikucmVwbGFjZShwaCxcIlwiKTthLkQ9Yn19ZnVuY3Rpb24gdmkoYSxiKXt2YXIgYz1hLkQ7aWYoYyl7aWYoYy5QKXJldHVybiBPYmplY3QuYXNzaWduKGIsYy5QKSwhMH1lbHNle2M9YS5wYXJzZWRDc3NUZXh0O2Zvcih2YXIgZDthPXBoLmV4ZWMoYyk7KXtkPShhWzJdfHxhWzNdKS50cmltKCk7aWYoXCJpbmhlcml0XCIhPT1kfHxcInVuc2V0XCIhPT1kKWJbYVsxXS50cmltKCldPWQ7ZD0hMH1yZXR1cm4gZH19XG5mdW5jdGlvbiB3aShhLGIsYyl7YiYmKGI9MDw9Yi5pbmRleE9mKFwiO1wiKT94aShhLGIsYyk6R2goYixmdW5jdGlvbihkLGUsZixnKXtpZighZSlyZXR1cm4gZCtnOyhlPXdpKGEsY1tlXSxjKSkmJlwiaW5pdGlhbFwiIT09ZT9cImFwcGx5LXNoaW0taW5oZXJpdFwiPT09ZSYmKGU9XCJpbmhlcml0XCIpOmU9d2koYSxjW2ZdfHxmLGMpfHxmO3JldHVybiBkKyhlfHxcIlwiKStnfSkpO3JldHVybiBiJiZiLnRyaW0oKXx8XCJcIn1cbmZ1bmN0aW9uIHhpKGEsYixjKXtiPWIuc3BsaXQoXCI7XCIpO2Zvcih2YXIgZD0wLGUsZjtkPGIubGVuZ3RoO2QrKylpZihlPWJbZF0pe3FoLmxhc3RJbmRleD0wO2lmKGY9cWguZXhlYyhlKSllPXdpKGEsY1tmWzFdXSxjKTtlbHNlIGlmKGY9ZS5pbmRleE9mKFwiOlwiKSwtMSE9PWYpe3ZhciBnPWUuc3Vic3RyaW5nKGYpO2c9Zy50cmltKCk7Zz13aShhLGcsYyl8fGc7ZT1lLnN1YnN0cmluZygwLGYpK2d9YltkXT1lJiZlLmxhc3RJbmRleE9mKFwiO1wiKT09PWUubGVuZ3RoLTE/ZS5zbGljZSgwLC0xKTplfHxcIlwifXJldHVybiBiLmpvaW4oXCI7XCIpfVxuZnVuY3Rpb24geWkoYSxiKXt2YXIgYz17fSxkPVtdO3hoKGEsZnVuY3Rpb24oZSl7ZS5EfHx1aShlKTt2YXIgZj1lLkZ8fGUucGFyc2VkU2VsZWN0b3I7YiYmZS5ELlAmJmYmJnBpLmNhbGwoYixmKSYmKHZpKGUsYyksZT1lLmluZGV4LGY9cGFyc2VJbnQoZS8zMiwxMCksZFtmXT0oZFtmXXx8MCl8MTw8ZSUzMil9LG51bGwsITApO3JldHVybntQOmMsa2V5OmR9fVxuZnVuY3Rpb24gemkoYSxiLGMsZCl7Yi5EfHx1aShiKTtpZihiLkQuUCl7dmFyIGU9SmgoYSk7YT1lLmlzO2U9ZS5oYTtlPWE/V2goYSxlKTpcImh0bWxcIjt2YXIgZj1iLnBhcnNlZFNlbGVjdG9yO3ZhciBnPSEhZi5tYXRjaChxaSl8fFwiaHRtbFwiPT09ZSYmLTE8Zi5pbmRleE9mKFwiaHRtbFwiKTt2YXIgaD0wPT09Zi5pbmRleE9mKFwiOmhvc3RcIikmJiFnO1wic2hhZHlcIj09PWMmJihnPWY9PT1lK1wiID4gKi5cIitlfHwtMSE9PWYuaW5kZXhPZihcImh0bWxcIiksaD0hZyYmMD09PWYuaW5kZXhPZihlKSk7aWYoZ3x8aCljPWUsaCYmKGIuRnx8KGIuRj1YaChRaCxiLFFoLmgsYT9cIi5cIithOlwiXCIsZSkpLGM9Yi5GfHxlKSxnJiZcImh0bWxcIj09PWUmJihjPWIuRnx8Yi5PKSxkKHtCYTpjLGFiOmgscWI6Z30pfX1cbmZ1bmN0aW9uIEFpKGEsYixjKXt2YXIgZD17fSxlPXt9O3hoKGIsZnVuY3Rpb24oZil7emkoYSxmLGMsZnVuY3Rpb24oZyl7cGkuY2FsbChhLl9lbGVtZW50fHxhLGcuQmEpJiYoZy5hYj92aShmLGQpOnZpKGYsZSkpfSl9LG51bGwsITApO3JldHVybntoYjplLFphOmR9fVxuZnVuY3Rpb24gQmkoYSxiLGMsZCl7dmFyIGU9SmgoYiksZj1XaChlLmlzLGUuaGEpLGc9bmV3IFJlZ0V4cChcIig/Ol58W14uI1s6XSlcIisoYi5leHRlbmRzP1wiXFxcXFwiK2Yuc2xpY2UoMCwtMSkrXCJcXFxcXVwiOmYpK1wiKCR8Wy46W1xcXFxzPit+XSlcIiksaD1uaShiKTtlPWguTTtoPWguY3NzQnVpbGQ7dmFyIGs9Q2koZSxkKTtyZXR1cm4gVWgoYixlLGZ1bmN0aW9uKGwpe3ZhciBtPVwiXCI7bC5EfHx1aShsKTtsLkQuY3NzVGV4dCYmKG09eGkoYSxsLkQuY3NzVGV4dCxjKSk7bC5jc3NUZXh0PW07aWYoIVYmJiF6aChsKSYmbC5jc3NUZXh0KXt2YXIgcT1tPWwuY3NzVGV4dDtudWxsPT1sLklhJiYobC5JYT1zaC50ZXN0KG0pKTtpZihsLklhKWlmKG51bGw9PWwucGEpe2wucGE9W107Zm9yKHZhciBIIGluIGspcT1rW0hdLHE9cShtKSxtIT09cSYmKG09cSxsLnBhLnB1c2goSCkpfWVsc2V7Zm9yKEg9MDtIPGwucGEubGVuZ3RoOysrSClxPWtbbC5wYVtIXV0sbT1xKG0pO3E9bX1sLmNzc1RleHQ9cTtsLkY9XG5sLkZ8fGwuc2VsZWN0b3I7bT1cIi5cIitkO0g9S2gobC5GKTtxPTA7Zm9yKHZhciBDPUgubGVuZ3RoLHQ9dm9pZCAwO3E8QyYmKHQ9SFtxXSk7cSsrKUhbcV09dC5tYXRjaChnKT90LnJlcGxhY2UoZixtKTptK1wiIFwiK3Q7bC5zZWxlY3Rvcj1ILmpvaW4oXCIsXCIpfX0saCl9ZnVuY3Rpb24gQ2koYSxiKXthPWEuaDt2YXIgYz17fTtpZighViYmYSlmb3IodmFyIGQ9MCxlPWFbZF07ZDxhLmxlbmd0aDtlPWFbKytkXSl7dmFyIGY9ZSxnPWI7Zi51PW5ldyBSZWdFeHAoXCJcXFxcYlwiK2Yua2V5ZnJhbWVzTmFtZStcIig/IVxcXFxCfC0pXCIsXCJnXCIpO2YuZz1mLmtleWZyYW1lc05hbWUrXCItXCIrZztmLkY9Zi5GfHxmLnNlbGVjdG9yO2Yuc2VsZWN0b3I9Zi5GLnJlcGxhY2UoZi5rZXlmcmFtZXNOYW1lLGYuZyk7Y1tlLmtleWZyYW1lc05hbWVdPURpKGUpfXJldHVybiBjfWZ1bmN0aW9uIERpKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gYi5yZXBsYWNlKGEudSxhLmcpfX1cbmZ1bmN0aW9uIEVpKGEsYil7dmFyIGM9RmksZD15aChhKTthLnRleHRDb250ZW50PXdoKGQsZnVuY3Rpb24oZSl7dmFyIGY9ZS5jc3NUZXh0PWUucGFyc2VkQ3NzVGV4dDtlLkQmJmUuRC5jc3NUZXh0JiYoZj1mLnJlcGxhY2UoaGgsXCJcIikucmVwbGFjZShpaCxcIlwiKSxlLmNzc1RleHQ9eGkoYyxmLGIpKX0pfWVhLk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHNpLnByb3RvdHlwZSx7Zzp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuXCJ4LXNjb3BlXCJ9fX0pO3ZhciBGaT1uZXcgc2k7dmFyIEdpPXt9LEhpPXdpbmRvdy5jdXN0b21FbGVtZW50cztpZihIaSYmIVYmJiFvaCl7dmFyIElpPUhpLmRlZmluZTtIaS5kZWZpbmU9ZnVuY3Rpb24oYSxiLGMpe0dpW2FdfHwoR2lbYV09RWgoYSkpO0lpLmNhbGwoSGksYSxiLGMpfX07ZnVuY3Rpb24gSmkoKXt0aGlzLmNhY2hlPXt9fUppLnByb3RvdHlwZS5zdG9yZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmNhY2hlW2FdfHxbXTtlLnB1c2goe1A6YixzdHlsZUVsZW1lbnQ6YyxMOmR9KTsxMDA8ZS5sZW5ndGgmJmUuc2hpZnQoKTt0aGlzLmNhY2hlW2FdPWV9O2Z1bmN0aW9uIEtpKCl7fXZhciBMaT1uZXcgUmVnRXhwKFFoLmcrXCJcXFxccyooW15cXFxcc10qKVwiKTtmdW5jdGlvbiBNaShhKXtyZXR1cm4oYT0oYS5jbGFzc0xpc3QmJmEuY2xhc3NMaXN0LnZhbHVlP2EuY2xhc3NMaXN0LnZhbHVlOmEuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIpLm1hdGNoKExpKSk/YVsxXTpcIlwifWZ1bmN0aW9uIE5pKGEpe3ZhciBiPUloKGEpLmdldFJvb3ROb2RlKCk7cmV0dXJuIGI9PT1hfHxiPT09YS5vd25lckRvY3VtZW50P1wiXCI6KGE9Yi5ob3N0KT9KaChhKS5pczpcIlwifVxuZnVuY3Rpb24gT2koYSl7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBjPWFbYl07aWYoYy50YXJnZXQhPT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmMudGFyZ2V0IT09ZG9jdW1lbnQuaGVhZClmb3IodmFyIGQ9MDtkPGMuYWRkZWROb2Rlcy5sZW5ndGg7ZCsrKXt2YXIgZT1jLmFkZGVkTm9kZXNbZF07aWYoZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXt2YXIgZj1lLmdldFJvb3ROb2RlKCksZz1NaShlKTtpZihnJiZmPT09ZS5vd25lckRvY3VtZW50JiYoXCJzdHlsZVwiIT09ZS5sb2NhbE5hbWUmJlwidGVtcGxhdGVcIiE9PWUubG9jYWxOYW1lfHxcIlwiPT09TGgoZSkpKVRoKGUsZyk7ZWxzZSBpZihmIGluc3RhbmNlb2YgU2hhZG93Um9vdClmb3IoZj1OaShlKSxmIT09ZyYmU2goZSxnLGYpLGU9d2luZG93LlNoYWR5RE9NLm5hdGl2ZU1ldGhvZHMucXVlcnlTZWxlY3RvckFsbC5jYWxsKGUsXCI6bm90KC5cIitRaC5nK1wiKVwiKSxnPTA7ZzxlLmxlbmd0aDtnKyspe2Y9ZVtnXTtcbnZhciBoPU5pKGYpO2gmJlJoKGYsaCl9fX19fVxuaWYoIShWfHx3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5oYW5kbGVzRHluYW1pY1Njb3BpbmcpKXt2YXIgUGk9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoT2kpLFFpPWZ1bmN0aW9uKGEpe1BpLm9ic2VydmUoYSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KX07aWYod2luZG93LmN1c3RvbUVsZW1lbnRzJiYhd2luZG93LmN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2spUWkoZG9jdW1lbnQpO2Vsc2V7dmFyIFJpPWZ1bmN0aW9uKCl7UWkoZG9jdW1lbnQuYm9keSl9O3dpbmRvdy5IVE1MSW1wb3J0cz93aW5kb3cuSFRNTEltcG9ydHMud2hlblJlYWR5KFJpKTpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtpZihcImxvYWRpbmdcIj09PWRvY3VtZW50LnJlYWR5U3RhdGUpe3ZhciBhPWZ1bmN0aW9uKCl7UmkoKTtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVhZHlzdGF0ZWNoYW5nZVwiLGEpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicmVhZHlzdGF0ZWNoYW5nZVwiLFxuYSl9ZWxzZSBSaSgpfSl9S2k9ZnVuY3Rpb24oKXtPaShQaS50YWtlUmVjb3JkcygpKX19O3ZhciBTaT17fTt2YXIgVGk9UHJvbWlzZS5yZXNvbHZlKCk7ZnVuY3Rpb24gVWkoYSl7aWYoYT1TaVthXSlhLl9hcHBseVNoaW1DdXJyZW50VmVyc2lvbj1hLl9hcHBseVNoaW1DdXJyZW50VmVyc2lvbnx8MCxhLl9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbj1hLl9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbnx8MCxhLl9hcHBseVNoaW1OZXh0VmVyc2lvbj0oYS5fYXBwbHlTaGltTmV4dFZlcnNpb258fDApKzF9ZnVuY3Rpb24gVmkoYSl7cmV0dXJuIGEuX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9uPT09YS5fYXBwbHlTaGltTmV4dFZlcnNpb259ZnVuY3Rpb24gV2koYSl7YS5fYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb249YS5fYXBwbHlTaGltTmV4dFZlcnNpb247YS5fdmFsaWRhdGluZ3x8KGEuX3ZhbGlkYXRpbmc9ITAsVGkudGhlbihmdW5jdGlvbigpe2EuX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9uPWEuX2FwcGx5U2hpbU5leHRWZXJzaW9uO2EuX3ZhbGlkYXRpbmc9ITF9KSl9O3ZhciBYaT17fSxZaT1uZXcgSmk7ZnVuY3Rpb24gWSgpe3RoaXMuZGE9e307dGhpcy5pPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDt2YXIgYT1uZXcgVmc7YS5ydWxlcz1bXTt0aGlzLnU9b2kodGhpcy5pLG5ldyBtaShhKSk7dGhpcy5PPSExO3RoaXMuZz10aGlzLmg9bnVsbH12PVkucHJvdG90eXBlO3YuZmx1c2g9ZnVuY3Rpb24oKXtLaSgpfTt2LlhhPWZ1bmN0aW9uKGEpe3JldHVybiB5aChhKX07di5sYj1mdW5jdGlvbihhKXtyZXR1cm4gd2goYSl9O3YucHJlcGFyZVRlbXBsYXRlPWZ1bmN0aW9uKGEsYixjKXt0aGlzLnByZXBhcmVUZW1wbGF0ZURvbShhLGIpO3RoaXMucHJlcGFyZVRlbXBsYXRlU3R5bGVzKGEsYixjKX07XG52LnByZXBhcmVUZW1wbGF0ZVN0eWxlcz1mdW5jdGlvbihhLGIsYyl7aWYoIWEuX3ByZXBhcmVkJiYhb2gpe1Z8fEdpW2JdfHwoR2lbYl09RWgoYikpO2EuX3ByZXBhcmVkPSEwO2EubmFtZT1iO2EuZXh0ZW5kcz1jO1NpW2JdPWE7dmFyIGQ9TGgoYSksZT1NaChkKTtjPXtpczpiLGV4dGVuZHM6Y307Zm9yKHZhciBmPVtdLGc9YS5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVwiKSxoPTA7aDxnLmxlbmd0aDtoKyspe3ZhciBrPWdbaF07aWYoay5oYXNBdHRyaWJ1dGUoXCJzaGFkeS11bnNjb3BlZFwiKSl7aWYoIVYpe3ZhciBsPWsudGV4dENvbnRlbnQ7aWYoIXZoLmhhcyhsKSl7dmguYWRkKGwpO3ZhciBtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTttLnNldEF0dHJpYnV0ZShcInNoYWR5LXVuc2NvcGVkXCIsXCJcIik7bS50ZXh0Q29udGVudD1sO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobSl9ay5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGspfX1lbHNlIGYucHVzaChrLnRleHRDb250ZW50KSxcbmsucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChrKX1mPWYuam9pbihcIlwiKS50cmltKCkrKFhpW2JdfHxcIlwiKTtaaSh0aGlzKTtpZighZSl7aWYoZz0hZClnPXFoLnRlc3QoZil8fHBoLnRlc3QoZikscWgubGFzdEluZGV4PTAscGgubGFzdEluZGV4PTA7aD1XZyhmKTtnJiZYJiZ0aGlzLmgmJnRoaXMuaC50cmFuc2Zvcm1SdWxlcyhoLGIpO2EuX3N0eWxlQXN0PWh9Zz1bXTtYfHwoZz10aShhLl9zdHlsZUFzdCkpO2lmKCFnLmxlbmd0aHx8WCloPVY/YS5jb250ZW50Om51bGwsYj1HaVtiXXx8bnVsbCxkPVVoKGMsYS5fc3R5bGVBc3QsbnVsbCxkLGU/ZjpcIlwiKSxkPWQubGVuZ3RoP0FoKGQsYy5pcyxoLGIpOm51bGwsYS5fc3R5bGU9ZDthLmc9Z319O3YuZmI9ZnVuY3Rpb24oYSxiKXtYaVtiXT1hLmpvaW4oXCIgXCIpfTtcbnYucHJlcGFyZVRlbXBsYXRlRG9tPWZ1bmN0aW9uKGEsYil7aWYoIW9oKXt2YXIgYz1MaChhKTtWfHxcInNoYWR5XCI9PT1jfHxhLl9kb21QcmVwYXJlZHx8KGEuX2RvbVByZXBhcmVkPSEwLE9oKGEuY29udGVudCxiKSl9fTtmdW5jdGlvbiAkaShhKXt2YXIgYj1KaChhKSxjPWIuaXM7Yj1iLmhhO3ZhciBkPUdpW2NdfHxudWxsLGU9U2lbY107aWYoZSl7Yz1lLl9zdHlsZUFzdDt2YXIgZj1lLmc7ZT1MaChlKTtiPW5ldyBtaShjLGQsZixiLGUpO29pKGEsYik7cmV0dXJuIGJ9fVxuZnVuY3Rpb24gYWooYSl7IWEuZyYmd2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2UmJihhLmc9d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlLGEuZy50cmFuc2Zvcm1DYWxsYmFjaz1mdW5jdGlvbihiKXthLk1hKGIpfSxhLmcudmFsaWRhdGVDYWxsYmFjaz1mdW5jdGlvbigpe3JlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpeyhhLmcuZW5xdWV1ZWR8fGEuTykmJmEuZmx1c2hDdXN0b21TdHlsZXMoKX0pfSl9ZnVuY3Rpb24gWmkoYSl7aWYoIWEuaCYmd2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltKXthLmg9d2luZG93LlNoYWR5Q1NTLkFwcGx5U2hpbTthLmguaW52YWxpZENhbGxiYWNrPVVpO3ZhciBiPSEwfWVsc2UgYj0hMTthaihhKTtyZXR1cm4gYn1cbnYuZmx1c2hDdXN0b21TdHlsZXM9ZnVuY3Rpb24oKXtpZighb2gpe3ZhciBhPVppKHRoaXMpO2lmKHRoaXMuZyl7dmFyIGI9dGhpcy5nLnByb2Nlc3NTdHlsZXMoKTtpZigoYXx8dGhpcy5nLmVucXVldWVkKSYmIU1oKHRoaXMudS5jc3NCdWlsZCkpe2lmKFgpe2lmKCF0aGlzLnUuY3NzQnVpbGQpZm9yKGE9MDthPGIubGVuZ3RoO2ErKyl7dmFyIGM9dGhpcy5nLmdldFN0eWxlRm9yQ3VzdG9tU3R5bGUoYlthXSk7aWYoYyYmWCYmdGhpcy5oKXt2YXIgZD15aChjKTtaaSh0aGlzKTt0aGlzLmgudHJhbnNmb3JtUnVsZXMoZCk7Yy50ZXh0Q29udGVudD13aChkKX19fWVsc2V7YmoodGhpcyxiKTtjaih0aGlzLHRoaXMuaSx0aGlzLnUpO2ZvcihhPTA7YTxiLmxlbmd0aDthKyspKGM9dGhpcy5nLmdldFN0eWxlRm9yQ3VzdG9tU3R5bGUoYlthXSkpJiZFaShjLHRoaXMudS5SKTt0aGlzLk8mJnRoaXMuc3R5bGVEb2N1bWVudCgpfXRoaXMuZy5lbnF1ZXVlZD0hMX19fX07XG5mdW5jdGlvbiBiaihhLGIpe2I9Yi5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGEuZy5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKGMpfSkuZmlsdGVyKGZ1bmN0aW9uKGMpe3JldHVybiEhY30pO2Iuc29ydChmdW5jdGlvbihjLGQpe2M9ZC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihjKTtyZXR1cm4gYyZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORz8xOmMmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkc/LTE6MH0pO2EudS5NLnJ1bGVzPWIubWFwKGZ1bmN0aW9uKGMpe3JldHVybiB5aChjKX0pfVxudi5zdHlsZUVsZW1lbnQ9ZnVuY3Rpb24oYSxiKXtpZihvaCl7aWYoYil7bmkoYSl8fG9pKGEsbmV3IG1pKG51bGwpKTt2YXIgYz1uaShhKTtjLks9Yy5LfHx7fTtPYmplY3QuYXNzaWduKGMuSyxiKTtkaih0aGlzLGEsYyl9fWVsc2UgaWYoYz1uaShhKXx8JGkoYSkpaWYoYSE9PXRoaXMuaSYmKHRoaXMuTz0hMCksYiYmKGMuSz1jLkt8fHt9LE9iamVjdC5hc3NpZ24oYy5LLGIpKSxYKWRqKHRoaXMsYSxjKTtlbHNlIGlmKHRoaXMuZmx1c2goKSxjaih0aGlzLGEsYyksYy56YSYmYy56YS5sZW5ndGgpe2I9SmgoYSkuaXM7dmFyIGQ7YTp7aWYoZD1ZaS5jYWNoZVtiXSlmb3IodmFyIGU9ZC5sZW5ndGgtMTswPD1lO2UtLSl7dmFyIGY9ZFtlXTtiOnt2YXIgZz1jLnphO2Zvcih2YXIgaD0wO2g8Zy5sZW5ndGg7aCsrKXt2YXIgaz1nW2hdO2lmKGYuUFtrXSE9PWMuUltrXSl7Zz0hMTticmVhayBifX1nPSEwfWlmKGcpe2Q9ZjticmVhayBhfX1kPXZvaWQgMH1nPWQ/ZC5zdHlsZUVsZW1lbnQ6XG5udWxsO2U9Yy5MOyhmPWQmJmQuTCl8fChmPXRoaXMuZGFbYl09KHRoaXMuZGFbYl18fDApKzEsZj1iK1wiLVwiK2YpO2MuTD1mO2Y9Yy5MO2g9Rmk7aD1nP2cudGV4dENvbnRlbnR8fFwiXCI6QmkoaCxhLGMuUixmKTtrPW5pKGEpO3ZhciBsPWsuZztsJiYhViYmbCE9PWcmJihsLl91c2VDb3VudC0tLDA+PWwuX3VzZUNvdW50JiZsLnBhcmVudE5vZGUmJmwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsKSk7Vj9rLmc/KGsuZy50ZXh0Q29udGVudD1oLGc9ay5nKTpoJiYoZz1BaChoLGYsYS5zaGFkb3dSb290LGsuaCkpOmc/Zy5wYXJlbnROb2RlfHwocmkmJi0xPGguaW5kZXhPZihcIkBtZWRpYVwiKSYmKGcudGV4dENvbnRlbnQ9aCksQ2goZyxudWxsLGsuaCkpOmgmJihnPUFoKGgsZixudWxsLGsuaCkpO2cmJihnLl91c2VDb3VudD1nLl91c2VDb3VudHx8MCxrLmchPWcmJmcuX3VzZUNvdW50Kyssay5nPWcpO2Y9ZztWfHwoZz1jLkwsaz1oPWEuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIsZSYmXG4oaz1oLnJlcGxhY2UobmV3IFJlZ0V4cChcIlxcXFxzKngtc2NvcGVcXFxccypcIitlK1wiXFxcXHMqXCIsXCJnXCIpLFwiIFwiKSksays9KGs/XCIgXCI6XCJcIikrXCJ4LXNjb3BlIFwiK2csaCE9PWsmJkhoKGEsaykpO2R8fFlpLnN0b3JlKGIsYy5SLGYsYy5MKX19O1xuZnVuY3Rpb24gZGooYSxiLGMpe3ZhciBkPUpoKGIpLmlzO2lmKGMuSyl7dmFyIGU9Yy5LLGY7Zm9yKGYgaW4gZSludWxsPT09Zj9iLnN0eWxlLnJlbW92ZVByb3BlcnR5KGYpOmIuc3R5bGUuc2V0UHJvcGVydHkoZixlW2ZdKX1lPVNpW2RdO2lmKCEoIWUmJmIhPT1hLml8fGUmJlwiXCIhPT1MaChlKSkmJmUmJmUuX3N0eWxlJiYhVmkoZSkpe2lmKFZpKGUpfHxlLl9hcHBseVNoaW1WYWxpZGF0aW5nVmVyc2lvbiE9PWUuX2FwcGx5U2hpbU5leHRWZXJzaW9uKVppKGEpLGEuaCYmYS5oLnRyYW5zZm9ybVJ1bGVzKGUuX3N0eWxlQXN0LGQpLGUuX3N0eWxlLnRleHRDb250ZW50PVVoKGIsYy5NKSxXaShlKTtWJiYoYT1iLnNoYWRvd1Jvb3QpJiYoYT1hLnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVwiKSkmJihhLnRleHRDb250ZW50PVVoKGIsYy5NKSk7Yy5NPWUuX3N0eWxlQXN0fX1cbmZ1bmN0aW9uIGVqKGEsYil7cmV0dXJuKGI9SWgoYikuZ2V0Um9vdE5vZGUoKS5ob3N0KT9uaShiKXx8JGkoYik/YjplaihhLGIpOmEuaX1mdW5jdGlvbiBjaihhLGIsYyl7dmFyIGQ9ZWooYSxiKSxlPW5pKGQpLGY9ZS5SO2Q9PT1hLml8fGZ8fChjaihhLGQsZSksZj1lLlIpO2E9T2JqZWN0LmNyZWF0ZShmfHxudWxsKTtkPUFpKGIsYy5NLGMuY3NzQnVpbGQpO2I9eWkoZS5NLGIpLlA7T2JqZWN0LmFzc2lnbihhLGQuWmEsYixkLmhiKTtiPWMuSztmb3IodmFyIGcgaW4gYilpZigoZT1iW2ddKXx8MD09PWUpYVtnXT1lO2c9Rmk7Yj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKTtmb3IoZT0wO2U8Yi5sZW5ndGg7ZSsrKWQ9YltlXSxhW2RdPXdpKGcsYVtkXSxhKTtjLlI9YX12LnN0eWxlRG9jdW1lbnQ9ZnVuY3Rpb24oYSl7dGhpcy5zdHlsZVN1YnRyZWUodGhpcy5pLGEpfTtcbnYuc3R5bGVTdWJ0cmVlPWZ1bmN0aW9uKGEsYil7dmFyIGM9SWgoYSksZD1jLnNoYWRvd1Jvb3QsZT1hPT09dGhpcy5pOyhkfHxlKSYmdGhpcy5zdHlsZUVsZW1lbnQoYSxiKTtpZihhPWU/YzpkKWZvcihhPUFycmF5LmZyb20oYS5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKSkuZmlsdGVyKGZ1bmN0aW9uKGYpe3JldHVybiBJaChmKS5zaGFkb3dSb290fSksYj0wO2I8YS5sZW5ndGg7YisrKXRoaXMuc3R5bGVTdWJ0cmVlKGFbYl0pfTtcbnYuTWE9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPUxoKGEpO2MhPT10aGlzLnUuY3NzQnVpbGQmJih0aGlzLnUuY3NzQnVpbGQ9Yyk7aWYoIU1oKGMpKXt2YXIgZD15aChhKTt4aChkLGZ1bmN0aW9uKGUpe2lmKFYpbGkoZSk7ZWxzZXt2YXIgZj1RaDtlLnNlbGVjdG9yPWUucGFyc2VkU2VsZWN0b3I7bGkoZSk7ZS5zZWxlY3Rvcj1lLkY9WGgoZixlLGYuaSx2b2lkIDAsdm9pZCAwKX1YJiZcIlwiPT09YyYmKFppKGIpLGIuaCYmYi5oLnRyYW5zZm9ybVJ1bGUoZSkpfSk7WD9hLnRleHRDb250ZW50PXdoKGQpOnRoaXMudS5NLnJ1bGVzLnB1c2goZCl9fTt2LmdldENvbXB1dGVkU3R5bGVWYWx1ZT1mdW5jdGlvbihhLGIpe3ZhciBjO1h8fChjPShuaShhKXx8bmkoZWoodGhpcyxhKSkpLlJbYl0pO3JldHVybihjPWN8fHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGEpLmdldFByb3BlcnR5VmFsdWUoYikpP2MudHJpbSgpOlwiXCJ9O1xudi5rYj1mdW5jdGlvbihhLGIpe3ZhciBjPUloKGEpLmdldFJvb3ROb2RlKCk7Yj1iPyhcInN0cmluZ1wiPT09dHlwZW9mIGI/YjpTdHJpbmcoYikpLnNwbGl0KC9cXHMvKTpbXTtjPWMuaG9zdCYmYy5ob3N0LmxvY2FsTmFtZTtpZighYyl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKTtpZihkKXtkPWQuc3BsaXQoL1xccy8pO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKWlmKGRbZV09PT1RaC5nKXtjPWRbZSsxXTticmVha319fWMmJmIucHVzaChRaC5nLGMpO1h8fChjPW5pKGEpKSYmYy5MJiZiLnB1c2goRmkuZyxjLkwpO0hoKGEsYi5qb2luKFwiIFwiKSl9O3YuVGE9ZnVuY3Rpb24oYSl7cmV0dXJuIG5pKGEpfTt2LmpiPWZ1bmN0aW9uKGEsYil7UmgoYSxiKX07di5tYj1mdW5jdGlvbihhLGIpe1JoKGEsYiwhMCl9O3YuaWI9ZnVuY3Rpb24oYSl7cmV0dXJuIE5pKGEpfTt2LlZhPWZ1bmN0aW9uKGEpe3JldHVybiBNaShhKX07WS5wcm90b3R5cGUuZmx1c2g9WS5wcm90b3R5cGUuZmx1c2g7XG5ZLnByb3RvdHlwZS5wcmVwYXJlVGVtcGxhdGU9WS5wcm90b3R5cGUucHJlcGFyZVRlbXBsYXRlO1kucHJvdG90eXBlLnN0eWxlRWxlbWVudD1ZLnByb3RvdHlwZS5zdHlsZUVsZW1lbnQ7WS5wcm90b3R5cGUuc3R5bGVEb2N1bWVudD1ZLnByb3RvdHlwZS5zdHlsZURvY3VtZW50O1kucHJvdG90eXBlLnN0eWxlU3VidHJlZT1ZLnByb3RvdHlwZS5zdHlsZVN1YnRyZWU7WS5wcm90b3R5cGUuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlPVkucHJvdG90eXBlLmdldENvbXB1dGVkU3R5bGVWYWx1ZTtZLnByb3RvdHlwZS5zZXRFbGVtZW50Q2xhc3M9WS5wcm90b3R5cGUua2I7WS5wcm90b3R5cGUuX3N0eWxlSW5mb0Zvck5vZGU9WS5wcm90b3R5cGUuVGE7WS5wcm90b3R5cGUudHJhbnNmb3JtQ3VzdG9tU3R5bGVGb3JEb2N1bWVudD1ZLnByb3RvdHlwZS5NYTtZLnByb3RvdHlwZS5nZXRTdHlsZUFzdD1ZLnByb3RvdHlwZS5YYTtZLnByb3RvdHlwZS5zdHlsZUFzdFRvU3RyaW5nPVkucHJvdG90eXBlLmxiO1xuWS5wcm90b3R5cGUuZmx1c2hDdXN0b21TdHlsZXM9WS5wcm90b3R5cGUuZmx1c2hDdXN0b21TdHlsZXM7WS5wcm90b3R5cGUuc2NvcGVOb2RlPVkucHJvdG90eXBlLmpiO1kucHJvdG90eXBlLnVuc2NvcGVOb2RlPVkucHJvdG90eXBlLm1iO1kucHJvdG90eXBlLnNjb3BlRm9yTm9kZT1ZLnByb3RvdHlwZS5pYjtZLnByb3RvdHlwZS5jdXJyZW50U2NvcGVGb3JOb2RlPVkucHJvdG90eXBlLlZhO1kucHJvdG90eXBlLnByZXBhcmVBZG9wdGVkQ3NzVGV4dD1ZLnByb3RvdHlwZS5mYjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhZLnByb3RvdHlwZSx7bmF0aXZlU2hhZG93OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVn19LG5hdGl2ZUNzczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFh9fX0pO3ZhciBaPW5ldyBZLGZqLGdqO3dpbmRvdy5TaGFkeUNTUyYmKGZqPXdpbmRvdy5TaGFkeUNTUy5BcHBseVNoaW0sZ2o9d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlKTtcbndpbmRvdy5TaGFkeUNTUz17U2NvcGluZ1NoaW06WixwcmVwYXJlVGVtcGxhdGU6ZnVuY3Rpb24oYSxiLGMpe1ouZmx1c2hDdXN0b21TdHlsZXMoKTtaLnByZXBhcmVUZW1wbGF0ZShhLGIsYyl9LHByZXBhcmVUZW1wbGF0ZURvbTpmdW5jdGlvbihhLGIpe1oucHJlcGFyZVRlbXBsYXRlRG9tKGEsYil9LHByZXBhcmVUZW1wbGF0ZVN0eWxlczpmdW5jdGlvbihhLGIsYyl7Wi5mbHVzaEN1c3RvbVN0eWxlcygpO1oucHJlcGFyZVRlbXBsYXRlU3R5bGVzKGEsYixjKX0sc3R5bGVTdWJ0cmVlOmZ1bmN0aW9uKGEsYil7Wi5mbHVzaEN1c3RvbVN0eWxlcygpO1ouc3R5bGVTdWJ0cmVlKGEsYil9LHN0eWxlRWxlbWVudDpmdW5jdGlvbihhKXtaLmZsdXNoQ3VzdG9tU3R5bGVzKCk7Wi5zdHlsZUVsZW1lbnQoYSl9LHN0eWxlRG9jdW1lbnQ6ZnVuY3Rpb24oYSl7Wi5mbHVzaEN1c3RvbVN0eWxlcygpO1ouc3R5bGVEb2N1bWVudChhKX0sZmx1c2hDdXN0b21TdHlsZXM6ZnVuY3Rpb24oKXtaLmZsdXNoQ3VzdG9tU3R5bGVzKCl9LFxuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFouZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKGEsYil9LG5hdGl2ZUNzczpYLG5hdGl2ZVNoYWRvdzpWLGNzc0J1aWxkOm5oLGRpc2FibGVSdW50aW1lOm9ofTtmaiYmKHdpbmRvdy5TaGFkeUNTUy5BcHBseVNoaW09ZmopO2dqJiYod2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlPWdqKTsoZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYih0KXtcIlwiPT10JiYoZi5jYWxsKHRoaXMpLHRoaXMubT0hMCk7cmV0dXJuIHQudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBjKHQpe3ZhciBGPXQuY2hhckNvZGVBdCgwKTtyZXR1cm4gMzI8RiYmMTI3PkYmJi0xPT1bMzQsMzUsNjAsNjIsNjMsOTZdLmluZGV4T2YoRik/dDplbmNvZGVVUklDb21wb25lbnQodCl9ZnVuY3Rpb24gZCh0KXt2YXIgRj10LmNoYXJDb2RlQXQoMCk7cmV0dXJuIDMyPEYmJjEyNz5GJiYtMT09WzM0LDM1LDYwLDYyLDk2XS5pbmRleE9mKEYpP3Q6ZW5jb2RlVVJJQ29tcG9uZW50KHQpfWZ1bmN0aW9uIGUodCxGLEUpe2Z1bmN0aW9uIE0oZmEpe3NhLnB1c2goZmEpfXZhciB5PUZ8fFwic2NoZW1lIHN0YXJ0XCIsVz0wLHc9XCJcIix0YT0hMSxoYT0hMSxzYT1bXTthOmZvcig7KHZvaWQgMCE9dFtXLTFdfHwwPT1XKSYmIXRoaXMubTspe3ZhciBuPXRbV107c3dpdGNoKHkpe2Nhc2UgXCJzY2hlbWUgc3RhcnRcIjppZihuJiZxLnRlc3Qobikpdys9XG5uLnRvTG93ZXJDYXNlKCkseT1cInNjaGVtZVwiO2Vsc2UgaWYoRil7TShcIkludmFsaWQgc2NoZW1lLlwiKTticmVhayBhfWVsc2V7dz1cIlwiO3k9XCJubyBzY2hlbWVcIjtjb250aW51ZX1icmVhaztjYXNlIFwic2NoZW1lXCI6aWYobiYmSC50ZXN0KG4pKXcrPW4udG9Mb3dlckNhc2UoKTtlbHNlIGlmKFwiOlwiPT1uKXt0aGlzLmw9dzt3PVwiXCI7aWYoRilicmVhayBhO3ZvaWQgMCE9PWxbdGhpcy5sXSYmKHRoaXMuRz0hMCk7eT1cImZpbGVcIj09dGhpcy5sP1wicmVsYXRpdmVcIjp0aGlzLkcmJkUmJkUubD09dGhpcy5sP1wicmVsYXRpdmUgb3IgYXV0aG9yaXR5XCI6dGhpcy5HP1wiYXV0aG9yaXR5IGZpcnN0IHNsYXNoXCI6XCJzY2hlbWUgZGF0YVwifWVsc2UgaWYoRil7dm9pZCAwIT1uJiZNKFwiQ29kZSBwb2ludCBub3QgYWxsb3dlZCBpbiBzY2hlbWU6IFwiK24pO2JyZWFrIGF9ZWxzZXt3PVwiXCI7Vz0wO3k9XCJubyBzY2hlbWVcIjtjb250aW51ZX1icmVhaztjYXNlIFwic2NoZW1lIGRhdGFcIjpcIj9cIj09bj8odGhpcy5BPVwiP1wiLFxueT1cInF1ZXJ5XCIpOlwiI1wiPT1uPyh0aGlzLkM9XCIjXCIseT1cImZyYWdtZW50XCIpOnZvaWQgMCE9biYmXCJcXHRcIiE9biYmXCJcXG5cIiE9biYmXCJcXHJcIiE9biYmKHRoaXMudmErPWMobikpO2JyZWFrO2Nhc2UgXCJubyBzY2hlbWVcIjppZihFJiZ2b2lkIDAhPT1sW0UubF0pe3k9XCJyZWxhdGl2ZVwiO2NvbnRpbnVlfWVsc2UgTShcIk1pc3Npbmcgc2NoZW1lLlwiKSxmLmNhbGwodGhpcyksdGhpcy5tPSEwO2JyZWFrO2Nhc2UgXCJyZWxhdGl2ZSBvciBhdXRob3JpdHlcIjppZihcIi9cIj09biYmXCIvXCI9PXRbVysxXSl5PVwiYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7ZWxzZXtNKFwiRXhwZWN0ZWQgLywgZ290OiBcIituKTt5PVwicmVsYXRpdmVcIjtjb250aW51ZX1icmVhaztjYXNlIFwicmVsYXRpdmVcIjp0aGlzLkc9ITA7XCJmaWxlXCIhPXRoaXMubCYmKHRoaXMubD1FLmwpO2lmKHZvaWQgMD09bil7dGhpcy5vPUUubzt0aGlzLnY9RS52O3RoaXMucz1FLnMuc2xpY2UoKTt0aGlzLkE9RS5BO3RoaXMuQj1FLkI7dGhpcy5qPUUuajtcbmJyZWFrIGF9ZWxzZSBpZihcIi9cIj09bnx8XCJcXFxcXCI9PW4pXCJcXFxcXCI9PW4mJk0oXCJcXFxcIGlzIGFuIGludmFsaWQgY29kZSBwb2ludC5cIikseT1cInJlbGF0aXZlIHNsYXNoXCI7ZWxzZSBpZihcIj9cIj09bil0aGlzLm89RS5vLHRoaXMudj1FLnYsdGhpcy5zPUUucy5zbGljZSgpLHRoaXMuQT1cIj9cIix0aGlzLkI9RS5CLHRoaXMuaj1FLmoseT1cInF1ZXJ5XCI7ZWxzZSBpZihcIiNcIj09bil0aGlzLm89RS5vLHRoaXMudj1FLnYsdGhpcy5zPUUucy5zbGljZSgpLHRoaXMuQT1FLkEsdGhpcy5DPVwiI1wiLHRoaXMuQj1FLkIsdGhpcy5qPUUuaix5PVwiZnJhZ21lbnRcIjtlbHNle3k9dFtXKzFdO3ZhciBKPXRbVysyXTtpZihcImZpbGVcIiE9dGhpcy5sfHwhcS50ZXN0KG4pfHxcIjpcIiE9eSYmXCJ8XCIhPXl8fHZvaWQgMCE9SiYmXCIvXCIhPUomJlwiXFxcXFwiIT1KJiZcIj9cIiE9SiYmXCIjXCIhPUopdGhpcy5vPUUubyx0aGlzLnY9RS52LHRoaXMuQj1FLkIsdGhpcy5qPUUuaix0aGlzLnM9RS5zLnNsaWNlKCksdGhpcy5zLnBvcCgpO3k9XG5cInJlbGF0aXZlIHBhdGhcIjtjb250aW51ZX1icmVhaztjYXNlIFwicmVsYXRpdmUgc2xhc2hcIjppZihcIi9cIj09bnx8XCJcXFxcXCI9PW4pXCJcXFxcXCI9PW4mJk0oXCJcXFxcIGlzIGFuIGludmFsaWQgY29kZSBwb2ludC5cIikseT1cImZpbGVcIj09dGhpcy5sP1wiZmlsZSBob3N0XCI6XCJhdXRob3JpdHkgaWdub3JlIHNsYXNoZXNcIjtlbHNle1wiZmlsZVwiIT10aGlzLmwmJih0aGlzLm89RS5vLHRoaXMudj1FLnYsdGhpcy5CPUUuQix0aGlzLmo9RS5qKTt5PVwicmVsYXRpdmUgcGF0aFwiO2NvbnRpbnVlfWJyZWFrO2Nhc2UgXCJhdXRob3JpdHkgZmlyc3Qgc2xhc2hcIjppZihcIi9cIj09bil5PVwiYXV0aG9yaXR5IHNlY29uZCBzbGFzaFwiO2Vsc2V7TShcIkV4cGVjdGVkICcvJywgZ290OiBcIituKTt5PVwiYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7Y29udGludWV9YnJlYWs7Y2FzZSBcImF1dGhvcml0eSBzZWNvbmQgc2xhc2hcIjp5PVwiYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7aWYoXCIvXCIhPW4pe00oXCJFeHBlY3RlZCAnLycsIGdvdDogXCIrXG5uKTtjb250aW51ZX1icmVhaztjYXNlIFwiYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI6aWYoXCIvXCIhPW4mJlwiXFxcXFwiIT1uKXt5PVwiYXV0aG9yaXR5XCI7Y29udGludWV9ZWxzZSBNKFwiRXhwZWN0ZWQgYXV0aG9yaXR5LCBnb3Q6IFwiK24pO2JyZWFrO2Nhc2UgXCJhdXRob3JpdHlcIjppZihcIkBcIj09bil7dGEmJihNKFwiQCBhbHJlYWR5IHNlZW4uXCIpLHcrPVwiJTQwXCIpO3RhPSEwO2ZvcihuPTA7bjx3Lmxlbmd0aDtuKyspSj13W25dLFwiXFx0XCI9PUp8fFwiXFxuXCI9PUp8fFwiXFxyXCI9PUo/TShcIkludmFsaWQgd2hpdGVzcGFjZSBpbiBhdXRob3JpdHkuXCIpOlwiOlwiPT1KJiZudWxsPT09dGhpcy5qP3RoaXMuaj1cIlwiOihKPWMoSiksbnVsbCE9PXRoaXMuaj90aGlzLmorPUo6dGhpcy5CKz1KKTt3PVwiXCJ9ZWxzZSBpZih2b2lkIDA9PW58fFwiL1wiPT1ufHxcIlxcXFxcIj09bnx8XCI/XCI9PW58fFwiI1wiPT1uKXtXLT13Lmxlbmd0aDt3PVwiXCI7eT1cImhvc3RcIjtjb250aW51ZX1lbHNlIHcrPW47YnJlYWs7Y2FzZSBcImZpbGUgaG9zdFwiOmlmKHZvaWQgMD09XG5ufHxcIi9cIj09bnx8XCJcXFxcXCI9PW58fFwiP1wiPT1ufHxcIiNcIj09bil7MiE9dy5sZW5ndGh8fCFxLnRlc3Qod1swXSl8fFwiOlwiIT13WzFdJiZcInxcIiE9d1sxXT8oMCE9dy5sZW5ndGgmJih0aGlzLm89Yi5jYWxsKHRoaXMsdyksdz1cIlwiKSx5PVwicmVsYXRpdmUgcGF0aCBzdGFydFwiKTp5PVwicmVsYXRpdmUgcGF0aFwiO2NvbnRpbnVlfWVsc2VcIlxcdFwiPT1ufHxcIlxcblwiPT1ufHxcIlxcclwiPT1uP00oXCJJbnZhbGlkIHdoaXRlc3BhY2UgaW4gZmlsZSBob3N0LlwiKTp3Kz1uO2JyZWFrO2Nhc2UgXCJob3N0XCI6Y2FzZSBcImhvc3RuYW1lXCI6aWYoXCI6XCIhPW58fGhhKWlmKHZvaWQgMD09bnx8XCIvXCI9PW58fFwiXFxcXFwiPT1ufHxcIj9cIj09bnx8XCIjXCI9PW4pe3RoaXMubz1iLmNhbGwodGhpcyx3KTt3PVwiXCI7eT1cInJlbGF0aXZlIHBhdGggc3RhcnRcIjtpZihGKWJyZWFrIGE7Y29udGludWV9ZWxzZVwiXFx0XCIhPW4mJlwiXFxuXCIhPW4mJlwiXFxyXCIhPW4/KFwiW1wiPT1uP2hhPSEwOlwiXVwiPT1uJiYoaGE9ITEpLHcrPW4pOk0oXCJJbnZhbGlkIGNvZGUgcG9pbnQgaW4gaG9zdC9ob3N0bmFtZTogXCIrXG5uKTtlbHNlIGlmKHRoaXMubz1iLmNhbGwodGhpcyx3KSx3PVwiXCIseT1cInBvcnRcIixcImhvc3RuYW1lXCI9PUYpYnJlYWsgYTticmVhaztjYXNlIFwicG9ydFwiOmlmKC9bMC05XS8udGVzdChuKSl3Kz1uO2Vsc2UgaWYodm9pZCAwPT1ufHxcIi9cIj09bnx8XCJcXFxcXCI9PW58fFwiP1wiPT1ufHxcIiNcIj09bnx8Ril7XCJcIiE9dyYmKHc9cGFyc2VJbnQodywxMCksdyE9bFt0aGlzLmxdJiYodGhpcy52PXcrXCJcIiksdz1cIlwiKTtpZihGKWJyZWFrIGE7eT1cInJlbGF0aXZlIHBhdGggc3RhcnRcIjtjb250aW51ZX1lbHNlXCJcXHRcIj09bnx8XCJcXG5cIj09bnx8XCJcXHJcIj09bj9NKFwiSW52YWxpZCBjb2RlIHBvaW50IGluIHBvcnQ6IFwiK24pOihmLmNhbGwodGhpcyksdGhpcy5tPSEwKTticmVhaztjYXNlIFwicmVsYXRpdmUgcGF0aCBzdGFydFwiOlwiXFxcXFwiPT1uJiZNKFwiJ1xcXFwnIG5vdCBhbGxvd2VkIGluIHBhdGguXCIpO3k9XCJyZWxhdGl2ZSBwYXRoXCI7aWYoXCIvXCIhPW4mJlwiXFxcXFwiIT1uKWNvbnRpbnVlO2JyZWFrO2Nhc2UgXCJyZWxhdGl2ZSBwYXRoXCI6aWYodm9pZCAwIT1cbm4mJlwiL1wiIT1uJiZcIlxcXFxcIiE9biYmKEZ8fFwiP1wiIT1uJiZcIiNcIiE9bikpXCJcXHRcIiE9biYmXCJcXG5cIiE9biYmXCJcXHJcIiE9biYmKHcrPWMobikpO2Vsc2V7XCJcXFxcXCI9PW4mJk0oXCJcXFxcIG5vdCBhbGxvd2VkIGluIHJlbGF0aXZlIHBhdGguXCIpO2lmKEo9bVt3LnRvTG93ZXJDYXNlKCldKXc9SjtcIi4uXCI9PXc/KHRoaXMucy5wb3AoKSxcIi9cIiE9biYmXCJcXFxcXCIhPW4mJnRoaXMucy5wdXNoKFwiXCIpKTpcIi5cIj09dyYmXCIvXCIhPW4mJlwiXFxcXFwiIT1uP3RoaXMucy5wdXNoKFwiXCIpOlwiLlwiIT13JiYoXCJmaWxlXCI9PXRoaXMubCYmMD09dGhpcy5zLmxlbmd0aCYmMj09dy5sZW5ndGgmJnEudGVzdCh3WzBdKSYmXCJ8XCI9PXdbMV0mJih3PXdbMF0rXCI6XCIpLHRoaXMucy5wdXNoKHcpKTt3PVwiXCI7XCI/XCI9PW4/KHRoaXMuQT1cIj9cIix5PVwicXVlcnlcIik6XCIjXCI9PW4mJih0aGlzLkM9XCIjXCIseT1cImZyYWdtZW50XCIpfWJyZWFrO2Nhc2UgXCJxdWVyeVwiOkZ8fFwiI1wiIT1uP3ZvaWQgMCE9biYmXCJcXHRcIiE9biYmXCJcXG5cIiE9biYmXCJcXHJcIiE9biYmKHRoaXMuQSs9XG5kKG4pKToodGhpcy5DPVwiI1wiLHk9XCJmcmFnbWVudFwiKTticmVhaztjYXNlIFwiZnJhZ21lbnRcIjp2b2lkIDAhPW4mJlwiXFx0XCIhPW4mJlwiXFxuXCIhPW4mJlwiXFxyXCIhPW4mJih0aGlzLkMrPW4pfVcrK319ZnVuY3Rpb24gZigpe3RoaXMuQj10aGlzLnZhPXRoaXMubD1cIlwiO3RoaXMuaj1udWxsO3RoaXMudj10aGlzLm89XCJcIjt0aGlzLnM9W107dGhpcy5DPXRoaXMuQT1cIlwiO3RoaXMuRz10aGlzLm09ITF9ZnVuY3Rpb24gZyh0LEYpe3ZvaWQgMD09PUZ8fEYgaW5zdGFuY2VvZiBnfHwoRj1uZXcgZyhTdHJpbmcoRikpKTt0aGlzLmc9dDtmLmNhbGwodGhpcyk7ZS5jYWxsKHRoaXMsdGhpcy5nLnJlcGxhY2UoL15bIFxcdFxcclxcblxcZl0rfFsgXFx0XFxyXFxuXFxmXSskL2csXCJcIiksbnVsbCxGKX12YXIgaD0hMTt0cnl7dmFyIGs9bmV3IFVSTChcImJcIixcImh0dHA6Ly9hXCIpO2sucGF0aG5hbWU9XCJjJTIwZFwiO2g9XCJodHRwOi8vYS9jJTIwZFwiPT09ay5ocmVmfWNhdGNoKHQpe31pZighaCl7dmFyIGw9T2JqZWN0LmNyZWF0ZShudWxsKTtcbmwuZnRwPTIxO2wuZmlsZT0wO2wuZ29waGVyPTcwO2wuaHR0cD04MDtsLmh0dHBzPTQ0MztsLndzPTgwO2wud3NzPTQ0Mzt2YXIgbT1PYmplY3QuY3JlYXRlKG51bGwpO21bXCIlMmVcIl09XCIuXCI7bVtcIi4lMmVcIl09XCIuLlwiO21bXCIlMmUuXCJdPVwiLi5cIjttW1wiJTJlJTJlXCJdPVwiLi5cIjt2YXIgcT0vW2EtekEtWl0vLEg9L1thLXpBLVowLTkrXFwtLl0vO2cucHJvdG90eXBlPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhyZWZ9LGdldCBocmVmKCl7aWYodGhpcy5tKXJldHVybiB0aGlzLmc7dmFyIHQ9XCJcIjtpZihcIlwiIT10aGlzLkJ8fG51bGwhPXRoaXMuail0PXRoaXMuQisobnVsbCE9dGhpcy5qP1wiOlwiK3RoaXMuajpcIlwiKStcIkBcIjtyZXR1cm4gdGhpcy5wcm90b2NvbCsodGhpcy5HP1wiLy9cIit0K3RoaXMuaG9zdDpcIlwiKSt0aGlzLnBhdGhuYW1lK3RoaXMuQSt0aGlzLkN9LHNldCBocmVmKHQpe2YuY2FsbCh0aGlzKTtlLmNhbGwodGhpcyx0KX0sZ2V0IHByb3RvY29sKCl7cmV0dXJuIHRoaXMubCtcblwiOlwifSxzZXQgcHJvdG9jb2wodCl7dGhpcy5tfHxlLmNhbGwodGhpcyx0K1wiOlwiLFwic2NoZW1lIHN0YXJ0XCIpfSxnZXQgaG9zdCgpe3JldHVybiB0aGlzLm0/XCJcIjp0aGlzLnY/dGhpcy5vK1wiOlwiK3RoaXMudjp0aGlzLm99LHNldCBob3N0KHQpeyF0aGlzLm0mJnRoaXMuRyYmZS5jYWxsKHRoaXMsdCxcImhvc3RcIil9LGdldCBob3N0bmFtZSgpe3JldHVybiB0aGlzLm99LHNldCBob3N0bmFtZSh0KXshdGhpcy5tJiZ0aGlzLkcmJmUuY2FsbCh0aGlzLHQsXCJob3N0bmFtZVwiKX0sZ2V0IHBvcnQoKXtyZXR1cm4gdGhpcy52fSxzZXQgcG9ydCh0KXshdGhpcy5tJiZ0aGlzLkcmJmUuY2FsbCh0aGlzLHQsXCJwb3J0XCIpfSxnZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5tP1wiXCI6dGhpcy5HP1wiL1wiK3RoaXMucy5qb2luKFwiL1wiKTp0aGlzLnZhfSxzZXQgcGF0aG5hbWUodCl7IXRoaXMubSYmdGhpcy5HJiYodGhpcy5zPVtdLGUuY2FsbCh0aGlzLHQsXCJyZWxhdGl2ZSBwYXRoIHN0YXJ0XCIpKX0sZ2V0IHNlYXJjaCgpe3JldHVybiB0aGlzLm18fFxuIXRoaXMuQXx8XCI/XCI9PXRoaXMuQT9cIlwiOnRoaXMuQX0sc2V0IHNlYXJjaCh0KXshdGhpcy5tJiZ0aGlzLkcmJih0aGlzLkE9XCI/XCIsXCI/XCI9PXRbMF0mJih0PXQuc2xpY2UoMSkpLGUuY2FsbCh0aGlzLHQsXCJxdWVyeVwiKSl9LGdldCBoYXNoKCl7cmV0dXJuIHRoaXMubXx8IXRoaXMuQ3x8XCIjXCI9PXRoaXMuQz9cIlwiOnRoaXMuQ30sc2V0IGhhc2godCl7dGhpcy5tfHwodD8odGhpcy5DPVwiI1wiLFwiI1wiPT10WzBdJiYodD10LnNsaWNlKDEpKSxlLmNhbGwodGhpcyx0LFwiZnJhZ21lbnRcIikpOnRoaXMuQz1cIlwiKX0sZ2V0IG9yaWdpbigpe3ZhciB0O2lmKHRoaXMubXx8IXRoaXMubClyZXR1cm5cIlwiO3N3aXRjaCh0aGlzLmwpe2Nhc2UgXCJkYXRhXCI6Y2FzZSBcImZpbGVcIjpjYXNlIFwiamF2YXNjcmlwdFwiOmNhc2UgXCJtYWlsdG9cIjpyZXR1cm5cIm51bGxcIn1yZXR1cm4odD10aGlzLmhvc3QpP3RoaXMubCtcIjovL1wiK3Q6XCJcIn19O3ZhciBDPWEuVVJMO0MmJihnLmNyZWF0ZU9iamVjdFVSTD1mdW5jdGlvbih0KXtyZXR1cm4gQy5jcmVhdGVPYmplY3RVUkwuYXBwbHkoQyxcbmFyZ3VtZW50cyl9LGcucmV2b2tlT2JqZWN0VVJMPWZ1bmN0aW9uKHQpe0MucmV2b2tlT2JqZWN0VVJMKHQpfSk7YS5VUkw9Z319KSh3aW5kb3cpOy8qXG5cbkNvcHlyaWdodCAoYykgMjAxOCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5UaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG5UaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG5Db2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiovXG52YXIgaGo9d2luZG93LmN1c3RvbUVsZW1lbnRzLGlqPSExLGpqPW51bGw7aGoucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayYmaGoucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayhmdW5jdGlvbihhKXtqaj1hO2lqJiZhKCl9KTtmdW5jdGlvbiBraigpe3dpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50LmJvb3RzdHJhcCYmd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQuYm9vdHN0cmFwKHdpbmRvdy5kb2N1bWVudCk7amomJmpqKCk7aWo9ITA7d2luZG93LldlYkNvbXBvbmVudHMucmVhZHk9ITA7ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJXZWJDb21wb25lbnRzUmVhZHlcIix7YnViYmxlczohMH0pKX1cblwiY29tcGxldGVcIiE9PWRvY3VtZW50LnJlYWR5U3RhdGU/KHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLGtqKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIixmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLGtqKTtraigpfSkpOmtqKCk7fSkuY2FsbCh0aGlzKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2ViY29tcG9uZW50cy1idW5kbGUuanMubWFwXG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiBCYXNpYyBmbG93IG9mIHRoZSBsb2FkZXIgcHJvY2Vzc1xuICAgKlxuICAgKiBUaGVyZSBhcmUgNCBmbG93cyB0aGUgbG9hZGVyIGNhbiB0YWtlIHdoZW4gYm9vdGluZyB1cFxuICAgKlxuICAgKiAtIFN5bmNocm9ub3VzIHNjcmlwdCwgbm8gcG9seWZpbGxzIG5lZWRlZFxuICAgKiAgIC0gd2FpdCBmb3IgYERPTUNvbnRlbnRMb2FkZWRgXG4gICAqICAgLSBmaXJlIFdDUiBldmVudCwgYXMgdGhlcmUgY291bGQgbm90IGJlIGFueSBjYWxsYmFja3MgcGFzc2VkIHRvIGB3YWl0Rm9yYFxuICAgKlxuICAgKiAtIFN5bmNocm9ub3VzIHNjcmlwdCwgcG9seWZpbGxzIG5lZWRlZFxuICAgKiAgIC0gZG9jdW1lbnQud3JpdGUgdGhlIHBvbHlmaWxsIGJ1bmRsZVxuICAgKiAgIC0gd2FpdCBvbiB0aGUgYGxvYWRgIGV2ZW50IG9mIHRoZSBidW5kbGUgdG8gYmF0Y2ggQ3VzdG9tIEVsZW1lbnQgdXBncmFkZXNcbiAgICogICAtIHdhaXQgZm9yIGBET01Db250ZW50TG9hZGVkYFxuICAgKiAgIC0gcnVuIGNhbGxiYWNrcyBwYXNzZWQgdG8gYHdhaXRGb3JgXG4gICAqICAgLSBmaXJlIFdDUiBldmVudFxuICAgKlxuICAgKiAtIEFzeW5jaHJvbm91cyBzY3JpcHQsIG5vIHBvbHlmaWxscyBuZWVkZWRcbiAgICogICAtIHdhaXQgZm9yIGBET01Db250ZW50TG9hZGVkYFxuICAgKiAgIC0gcnVuIGNhbGxiYWNrcyBwYXNzZWQgdG8gYHdhaXRGb3JgXG4gICAqICAgLSBmaXJlIFdDUiBldmVudFxuICAgKlxuICAgKiAtIEFzeW5jaHJvbm91cyBzY3JpcHQsIHBvbHlmaWxscyBuZWVkZWRcbiAgICogICAtIEFwcGVuZCB0aGUgcG9seWZpbGwgYnVuZGxlIHNjcmlwdFxuICAgKiAgIC0gd2FpdCBmb3IgYGxvYWRgIGV2ZW50IG9mIHRoZSBidW5kbGVcbiAgICogICAtIGJhdGNoIEN1c3RvbSBFbGVtZW50IFVwZ3JhZGVzXG4gICAqICAgLSBydW4gY2FsbGJhY2tzIHBhc3MgdG8gYHdhaXRGb3JgXG4gICAqICAgLSBmaXJlIFdDUiBldmVudFxuICAgKi9cblxuICB2YXIgcG9seWZpbGxzTG9hZGVkID0gZmFsc2U7XG4gIHZhciB3aGVuTG9hZGVkRm5zID0gW107XG4gIHZhciBhbGxvd1VwZ3JhZGVzID0gZmFsc2U7XG4gIHZhciBmbHVzaEZuO1xuXG4gIGZ1bmN0aW9uIGZpcmVFdmVudCgpIHtcbiAgICB3aW5kb3cuV2ViQ29tcG9uZW50cy5yZWFkeSA9IHRydWU7XG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBDdXN0b21FdmVudCgnV2ViQ29tcG9uZW50c1JlYWR5Jywge2J1YmJsZXM6IHRydWV9KVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBiYXRjaEN1c3RvbUVsZW1lbnRzKCkge1xuICAgIGlmICh3aW5kb3cuY3VzdG9tRWxlbWVudHMgJiYgY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjaykge1xuICAgICAgY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayhmdW5jdGlvbiAoZmx1c2hDYWxsYmFjaykge1xuICAgICAgICBmbHVzaEZuID0gZmx1c2hDYWxsYmFjaztcbiAgICAgICAgaWYgKGFsbG93VXBncmFkZXMpIHtcbiAgICAgICAgICBmbHVzaEZuKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFzeW5jUmVhZHkoKSB7XG4gICAgYmF0Y2hDdXN0b21FbGVtZW50cygpO1xuICAgIHJlYWR5KCk7XG4gIH1cblxuICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAvLyBib290c3RyYXAgPHRlbXBsYXRlPiBlbGVtZW50cyBiZWZvcmUgY3VzdG9tIGVsZW1lbnRzXG4gICAgaWYgKHdpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50ICYmIEhUTUxUZW1wbGF0ZUVsZW1lbnQuYm9vdHN0cmFwKSB7XG4gICAgICBIVE1MVGVtcGxhdGVFbGVtZW50LmJvb3RzdHJhcCh3aW5kb3cuZG9jdW1lbnQpO1xuICAgIH1cbiAgICBwb2x5ZmlsbHNMb2FkZWQgPSB0cnVlO1xuICAgIHJ1bldoZW5Mb2FkZWRGbnMoKS50aGVuKGZpcmVFdmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBydW5XaGVuTG9hZGVkRm5zKCkge1xuICAgIGFsbG93VXBncmFkZXMgPSBmYWxzZTtcbiAgICB2YXIgZm5zTWFwID0gd2hlbkxvYWRlZEZucy5tYXAoZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZm4gaW5zdGFuY2VvZiBGdW5jdGlvbiA/IGZuKCkgOiBmbjtcbiAgICB9KTtcbiAgICB3aGVuTG9hZGVkRm5zID0gW107XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGZuc01hcClcbiAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYWxsb3dVcGdyYWRlcyA9IHRydWU7XG4gICAgICAgIGZsdXNoRm4gJiYgZmx1c2hGbigpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgd2luZG93LldlYkNvbXBvbmVudHMgPSB3aW5kb3cuV2ViQ29tcG9uZW50cyB8fCB7fTtcbiAgd2luZG93LldlYkNvbXBvbmVudHMucmVhZHkgPSB3aW5kb3cuV2ViQ29tcG9uZW50cy5yZWFkeSB8fCBmYWxzZTtcbiAgd2luZG93LldlYkNvbXBvbmVudHMud2FpdEZvciA9XG4gICAgd2luZG93LldlYkNvbXBvbmVudHMud2FpdEZvciB8fFxuICAgIGZ1bmN0aW9uICh3YWl0Rm4pIHtcbiAgICAgIGlmICghd2FpdEZuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHdoZW5Mb2FkZWRGbnMucHVzaCh3YWl0Rm4pO1xuICAgICAgaWYgKHBvbHlmaWxsc0xvYWRlZCkge1xuICAgICAgICBydW5XaGVuTG9hZGVkRm5zKCk7XG4gICAgICB9XG4gICAgfTtcbiAgd2luZG93LldlYkNvbXBvbmVudHMuX2JhdGNoQ3VzdG9tRWxlbWVudHMgPSBiYXRjaEN1c3RvbUVsZW1lbnRzO1xuXG4gIHZhciBuYW1lID0gJ3dlYmNvbXBvbmVudHMtbG9hZGVyLmpzJztcbiAgLy8gRmVhdHVyZSBkZXRlY3Qgd2hpY2ggcG9seWZpbGwgbmVlZHMgdG8gYmUgaW1wb3J0ZWQuXG4gIHZhciBwb2x5ZmlsbHMgPSBbXTtcbiAgaWYgKFxuICAgICEoXG4gICAgICAnYXR0YWNoU2hhZG93JyBpbiBFbGVtZW50LnByb3RvdHlwZSAmJiAnZ2V0Um9vdE5vZGUnIGluIEVsZW1lbnQucHJvdG90eXBlXG4gICAgKSB8fFxuICAgICh3aW5kb3cuU2hhZHlET00gJiYgd2luZG93LlNoYWR5RE9NLmZvcmNlKVxuICApIHtcbiAgICBwb2x5ZmlsbHMucHVzaCgnc2QnKTtcbiAgfVxuICBpZiAoIXdpbmRvdy5jdXN0b21FbGVtZW50cyB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZm9yY2VQb2x5ZmlsbCkge1xuICAgIHBvbHlmaWxscy5wdXNoKCdjZScpO1xuICB9XG5cbiAgdmFyIG5lZWRzVGVtcGxhdGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIC8vIG5vIHJlYWwgPHRlbXBsYXRlPiBiZWNhdXNlIG5vIGBjb250ZW50YCBwcm9wZXJ0eSAoSUUgYW5kIG9sZGVyIGJyb3dzZXJzKVxuICAgIHZhciB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcbiAgICBpZiAoISgnY29udGVudCcgaW4gdCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBicm9rZW4gZG9jIGZyYWdtZW50IChvbGRlciBFZGdlKVxuICAgIGlmICghKHQuY29udGVudC5jbG9uZU5vZGUoKSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gYnJva2VuIDx0ZW1wbGF0ZT4gY2xvbmluZyAoRWRnZSB1cCB0byBhdCBsZWFzdCB2ZXJzaW9uIDE3KVxuICAgIHZhciB0MiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgdDIuY29udGVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgdC5jb250ZW50LmFwcGVuZENoaWxkKHQyKTtcbiAgICB2YXIgY2xvbmUgPSB0LmNsb25lTm9kZSh0cnVlKTtcbiAgICByZXR1cm4gKFxuICAgICAgY2xvbmUuY29udGVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgY2xvbmUuY29udGVudC5maXJzdENoaWxkLmNvbnRlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDBcbiAgICApO1xuICB9KSgpO1xuXG4gIC8vIE5PVEU6IGFueSBicm93c2VyIHRoYXQgZG9lcyBub3QgaGF2ZSB0ZW1wbGF0ZSBvciBFUzYgZmVhdHVyZXNcbiAgLy8gbXVzdCBsb2FkIHRoZSBmdWxsIHN1aXRlIG9mIHBvbHlmaWxscy5cbiAgaWYgKFxuICAgICF3aW5kb3cuUHJvbWlzZSB8fFxuICAgICFBcnJheS5mcm9tIHx8XG4gICAgIXdpbmRvdy5VUkwgfHxcbiAgICAhd2luZG93LlN5bWJvbCB8fFxuICAgIG5lZWRzVGVtcGxhdGVcbiAgKSB7XG4gICAgcG9seWZpbGxzID0gWydzZC1jZS1wZiddO1xuICB9XG5cbiAgaWYgKHBvbHlmaWxscy5sZW5ndGgpIHtcbiAgICB2YXIgdXJsO1xuICAgIHZhciBwb2x5ZmlsbEZpbGUgPSAnYnVuZGxlcy93ZWJjb21wb25lbnRzLScgKyBwb2x5ZmlsbHMuam9pbignLScpICsgJy5qcyc7XG5cbiAgICAvLyBMb2FkIGl0IGZyb20gdGhlIHJpZ2h0IHBsYWNlLlxuICAgIGlmICh3aW5kb3cuV2ViQ29tcG9uZW50cy5yb290KSB7XG4gICAgICB1cmwgPSB3aW5kb3cuV2ViQ29tcG9uZW50cy5yb290ICsgcG9seWZpbGxGaWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2NyaXB0W3NyYyo9XCInICsgbmFtZSArICdcIl0nKTtcbiAgICAgIC8vIExvYWQgaXQgZnJvbSB0aGUgcmlnaHQgcGxhY2UuXG4gICAgICB1cmwgPSBzY3JpcHQuc3JjLnJlcGxhY2UobmFtZSwgcG9seWZpbGxGaWxlKTtcbiAgICB9XG5cbiAgICB2YXIgbmV3U2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgbmV3U2NyaXB0LnNyYyA9IHVybDtcbiAgICAvLyBpZiByZWFkeVN0YXRlIGlzICdsb2FkaW5nJywgdGhpcyBzY3JpcHQgaXMgc3luY2hyb25vdXNcbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICAvLyBtYWtlIHN1cmUgY3VzdG9tIGVsZW1lbnRzIGFyZSBiYXRjaGVkIHdoZW5ldmVyIHBhcnNlciBnZXRzIHRvIHRoZSBpbmplY3RlZCBzY3JpcHRcbiAgICAgIG5ld1NjcmlwdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICdvbmxvYWQnLFxuICAgICAgICAnd2luZG93LldlYkNvbXBvbmVudHMuX2JhdGNoQ3VzdG9tRWxlbWVudHMoKSdcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC53cml0ZShuZXdTY3JpcHQub3V0ZXJIVE1MKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCByZWFkeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1NjcmlwdC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBhc3luY1JlYWR5KCk7XG4gICAgICB9KTtcbiAgICAgIG5ld1NjcmlwdC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgbG9hZCBwb2x5ZmlsbCBidW5kbGUnICsgdXJsKTtcbiAgICAgIH0pO1xuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChuZXdTY3JpcHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBpZiByZWFkeVN0YXRlIGlzICdjb21wbGV0ZScsIHNjcmlwdCBpcyBsb2FkZWQgaW1wZXJhdGl2ZWx5IG9uIGEgc3BlYy1jb21wbGlhbnQgYnJvd3Nlciwgc28ganVzdCBmaXJlIFdDUlxuICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7XG4gICAgICBwb2x5ZmlsbHNMb2FkZWQgPSB0cnVlO1xuICAgICAgZmlyZUV2ZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMgc2NyaXB0IG1heSBjb21lIGJldHdlZW4gRENMIGFuZCBsb2FkLCBzbyBsaXN0ZW4gZm9yIGJvdGgsIGFuZCBjYW5jZWwgbG9hZCBsaXN0ZW5lciBpZiBEQ0wgZmlyZXNcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgcmVhZHkpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgcmVhZHkpO1xuICAgICAgICByZWFkeSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59KSgpO1xuIiwiLypcbiAqIEludGVybmF0aW9uYWwgVGVsZXBob25lIElucHV0IHYxNi4xLjBcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qYWNrb2Nuci9pbnRsLXRlbC1pbnB1dC5naXRcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG5cbi8vIHdyYXAgaW4gVU1EXG4oZnVuY3Rpb24oZmFjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIG1vZHVsZS5leHBvcnRzKSBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTsgZWxzZSB3aW5kb3cuaW50bFRlbElucHV0ID0gZmFjdG9yeSgpO1xufSkoZnVuY3Rpb24odW5kZWZpbmVkKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBBcnJheSBvZiBjb3VudHJ5IG9iamVjdHMgZm9yIHRoZSBmbGFnIGRyb3Bkb3duLlxuICAgICAgICAvLyBIZXJlIGlzIHRoZSBjcml0ZXJpYSBmb3IgdGhlIHBsdWdpbiB0byBzdXBwb3J0IGEgZ2l2ZW4gY291bnRyeS90ZXJyaXRvcnlcbiAgICAgICAgLy8gLSBJdCBoYXMgYW4gaXNvMiBjb2RlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fMzE2Ni0xX2FscGhhLTJcbiAgICAgICAgLy8gLSBJdCBoYXMgaXQncyBvd24gY291bnRyeSBjYWxsaW5nIGNvZGUgKGl0IGlzIG5vdCBhIHN1Yi1yZWdpb24gb2YgYW5vdGhlciBjb3VudHJ5KTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9jb3VudHJ5X2NhbGxpbmdfY29kZXNcbiAgICAgICAgLy8gLSBJdCBoYXMgYSBmbGFnIGluIHRoZSByZWdpb24tZmxhZ3MgcHJvamVjdDogaHR0cHM6Ly9naXRodWIuY29tL2JlaGRhZC9yZWdpb24tZmxhZ3MvdHJlZS9naC1wYWdlcy9wbmdcbiAgICAgICAgLy8gLSBJdCBpcyBzdXBwb3J0ZWQgYnkgbGlicGhvbmVudW1iZXIgKGl0IG11c3QgYmUgbGlzdGVkIG9uIHRoaXMgcGFnZSk6IGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGVpMThuL2xpYnBob25lbnVtYmVyL2Jsb2IvbWFzdGVyL3Jlc291cmNlcy9TaG9ydE51bWJlck1ldGFkYXRhLnhtbFxuICAgICAgICAvLyBFYWNoIGNvdW50cnkgYXJyYXkgaGFzIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246XG4gICAgICAgIC8vIFtcbiAgICAgICAgLy8gICAgQ291bnRyeSBuYW1lLFxuICAgICAgICAvLyAgICBpc28yIGNvZGUsXG4gICAgICAgIC8vICAgIEludGVybmF0aW9uYWwgZGlhbCBjb2RlLFxuICAgICAgICAvLyAgICBPcmRlciAoaWYgPjEgY291bnRyeSB3aXRoIHNhbWUgZGlhbCBjb2RlKSxcbiAgICAgICAgLy8gICAgQXJlYSBjb2Rlc1xuICAgICAgICAvLyBdXG4gICAgICAgIHZhciBhbGxDb3VudHJpZXMgPSBbIFsgXCJBZmdoYW5pc3RhbiAo4oCr2KfZgdi62KfZhtiz2KrYp9mG4oCs4oCOKVwiLCBcImFmXCIsIFwiOTNcIiBdLCBbIFwiQWxiYW5pYSAoU2hxaXDDq3JpKVwiLCBcImFsXCIsIFwiMzU1XCIgXSwgWyBcIkFsZ2VyaWEgKOKAq9in2YTYrNiy2KfYptix4oCs4oCOKVwiLCBcImR6XCIsIFwiMjEzXCIgXSwgWyBcIkFtZXJpY2FuIFNhbW9hXCIsIFwiYXNcIiwgXCIxXCIsIDUsIFsgXCI2ODRcIiBdIF0sIFsgXCJBbmRvcnJhXCIsIFwiYWRcIiwgXCIzNzZcIiBdLCBbIFwiQW5nb2xhXCIsIFwiYW9cIiwgXCIyNDRcIiBdLCBbIFwiQW5ndWlsbGFcIiwgXCJhaVwiLCBcIjFcIiwgNiwgWyBcIjI2NFwiIF0gXSwgWyBcIkFudGlndWEgYW5kIEJhcmJ1ZGFcIiwgXCJhZ1wiLCBcIjFcIiwgNywgWyBcIjI2OFwiIF0gXSwgWyBcIkFyZ2VudGluYVwiLCBcImFyXCIsIFwiNTRcIiBdLCBbIFwiQXJtZW5pYSAo1YDVodW11aHVvdW/1aHVtilcIiwgXCJhbVwiLCBcIjM3NFwiIF0sIFsgXCJBcnViYVwiLCBcImF3XCIsIFwiMjk3XCIgXSwgWyBcIkF1c3RyYWxpYVwiLCBcImF1XCIsIFwiNjFcIiwgMCBdLCBbIFwiQXVzdHJpYSAow5ZzdGVycmVpY2gpXCIsIFwiYXRcIiwgXCI0M1wiIF0sIFsgXCJBemVyYmFpamFuIChBesmZcmJheWNhbilcIiwgXCJhelwiLCBcIjk5NFwiIF0sIFsgXCJCYWhhbWFzXCIsIFwiYnNcIiwgXCIxXCIsIDgsIFsgXCIyNDJcIiBdIF0sIFsgXCJCYWhyYWluICjigKvYp9mE2KjYrdix2YrZhuKArOKAjilcIiwgXCJiaFwiLCBcIjk3M1wiIF0sIFsgXCJCYW5nbGFkZXNoICjgpqzgpr7gpoLgprLgpr7gpqbgp4fgprYpXCIsIFwiYmRcIiwgXCI4ODBcIiBdLCBbIFwiQmFyYmFkb3NcIiwgXCJiYlwiLCBcIjFcIiwgOSwgWyBcIjI0NlwiIF0gXSwgWyBcIkJlbGFydXMgKNCR0LXQu9Cw0YDRg9GB0YwpXCIsIFwiYnlcIiwgXCIzNzVcIiBdLCBbIFwiQmVsZ2l1bSAoQmVsZ2nDqylcIiwgXCJiZVwiLCBcIjMyXCIgXSwgWyBcIkJlbGl6ZVwiLCBcImJ6XCIsIFwiNTAxXCIgXSwgWyBcIkJlbmluIChCw6luaW4pXCIsIFwiYmpcIiwgXCIyMjlcIiBdLCBbIFwiQmVybXVkYVwiLCBcImJtXCIsIFwiMVwiLCAxMCwgWyBcIjQ0MVwiIF0gXSwgWyBcIkJodXRhbiAo4L2g4L2W4L6y4L204L2CKVwiLCBcImJ0XCIsIFwiOTc1XCIgXSwgWyBcIkJvbGl2aWFcIiwgXCJib1wiLCBcIjU5MVwiIF0sIFsgXCJCb3NuaWEgYW5kIEhlcnplZ292aW5hICjQkdC+0YHQvdCwINC4INCl0LXRgNGG0LXQs9C+0LLQuNC90LApXCIsIFwiYmFcIiwgXCIzODdcIiBdLCBbIFwiQm90c3dhbmFcIiwgXCJid1wiLCBcIjI2N1wiIF0sIFsgXCJCcmF6aWwgKEJyYXNpbClcIiwgXCJiclwiLCBcIjU1XCIgXSwgWyBcIkJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnJpdG9yeVwiLCBcImlvXCIsIFwiMjQ2XCIgXSwgWyBcIkJyaXRpc2ggVmlyZ2luIElzbGFuZHNcIiwgXCJ2Z1wiLCBcIjFcIiwgMTEsIFsgXCIyODRcIiBdIF0sIFsgXCJCcnVuZWlcIiwgXCJiblwiLCBcIjY3M1wiIF0sIFsgXCJCdWxnYXJpYSAo0JHRitC70LPQsNGA0LjRjylcIiwgXCJiZ1wiLCBcIjM1OVwiIF0sIFsgXCJCdXJraW5hIEZhc29cIiwgXCJiZlwiLCBcIjIyNlwiIF0sIFsgXCJCdXJ1bmRpIChVYnVydW5kaSlcIiwgXCJiaVwiLCBcIjI1N1wiIF0sIFsgXCJDYW1ib2RpYSAo4Z6A4Z6Y4Z+S4Z6W4Z674Z6H4Z62KVwiLCBcImtoXCIsIFwiODU1XCIgXSwgWyBcIkNhbWVyb29uIChDYW1lcm91bilcIiwgXCJjbVwiLCBcIjIzN1wiIF0sIFsgXCJDYW5hZGFcIiwgXCJjYVwiLCBcIjFcIiwgMSwgWyBcIjIwNFwiLCBcIjIyNlwiLCBcIjIzNlwiLCBcIjI0OVwiLCBcIjI1MFwiLCBcIjI4OVwiLCBcIjMwNlwiLCBcIjM0M1wiLCBcIjM2NVwiLCBcIjM4N1wiLCBcIjQwM1wiLCBcIjQxNlwiLCBcIjQxOFwiLCBcIjQzMVwiLCBcIjQzN1wiLCBcIjQzOFwiLCBcIjQ1MFwiLCBcIjUwNlwiLCBcIjUxNFwiLCBcIjUxOVwiLCBcIjU0OFwiLCBcIjU3OVwiLCBcIjU4MVwiLCBcIjU4N1wiLCBcIjYwNFwiLCBcIjYxM1wiLCBcIjYzOVwiLCBcIjY0N1wiLCBcIjY3MlwiLCBcIjcwNVwiLCBcIjcwOVwiLCBcIjc0MlwiLCBcIjc3OFwiLCBcIjc4MFwiLCBcIjc4MlwiLCBcIjgwN1wiLCBcIjgxOVwiLCBcIjgyNVwiLCBcIjg2N1wiLCBcIjg3M1wiLCBcIjkwMlwiLCBcIjkwNVwiIF0gXSwgWyBcIkNhcGUgVmVyZGUgKEthYnUgVmVyZGkpXCIsIFwiY3ZcIiwgXCIyMzhcIiBdLCBbIFwiQ2FyaWJiZWFuIE5ldGhlcmxhbmRzXCIsIFwiYnFcIiwgXCI1OTlcIiwgMSwgWyBcIjNcIiwgXCI0XCIsIFwiN1wiIF0gXSwgWyBcIkNheW1hbiBJc2xhbmRzXCIsIFwia3lcIiwgXCIxXCIsIDEyLCBbIFwiMzQ1XCIgXSBdLCBbIFwiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljIChSw6lwdWJsaXF1ZSBjZW50cmFmcmljYWluZSlcIiwgXCJjZlwiLCBcIjIzNlwiIF0sIFsgXCJDaGFkIChUY2hhZClcIiwgXCJ0ZFwiLCBcIjIzNVwiIF0sIFsgXCJDaGlsZVwiLCBcImNsXCIsIFwiNTZcIiBdLCBbIFwiQ2hpbmEgKOS4reWbvSlcIiwgXCJjblwiLCBcIjg2XCIgXSwgWyBcIkNocmlzdG1hcyBJc2xhbmRcIiwgXCJjeFwiLCBcIjYxXCIsIDIgXSwgWyBcIkNvY29zIChLZWVsaW5nKSBJc2xhbmRzXCIsIFwiY2NcIiwgXCI2MVwiLCAxIF0sIFsgXCJDb2xvbWJpYVwiLCBcImNvXCIsIFwiNTdcIiBdLCBbIFwiQ29tb3JvcyAo4oCr2KzYstixINin2YTZgtmF2LHigKzigI4pXCIsIFwia21cIiwgXCIyNjlcIiBdLCBbIFwiQ29uZ28gKERSQykgKEphbWh1cmkgeWEgS2lkZW1va3Jhc2lhIHlhIEtvbmdvKVwiLCBcImNkXCIsIFwiMjQzXCIgXSwgWyBcIkNvbmdvIChSZXB1YmxpYykgKENvbmdvLUJyYXp6YXZpbGxlKVwiLCBcImNnXCIsIFwiMjQyXCIgXSwgWyBcIkNvb2sgSXNsYW5kc1wiLCBcImNrXCIsIFwiNjgyXCIgXSwgWyBcIkNvc3RhIFJpY2FcIiwgXCJjclwiLCBcIjUwNlwiIF0sIFsgXCJDw7R0ZSBk4oCZSXZvaXJlXCIsIFwiY2lcIiwgXCIyMjVcIiBdLCBbIFwiQ3JvYXRpYSAoSHJ2YXRza2EpXCIsIFwiaHJcIiwgXCIzODVcIiBdLCBbIFwiQ3ViYVwiLCBcImN1XCIsIFwiNTNcIiBdLCBbIFwiQ3VyYcOnYW9cIiwgXCJjd1wiLCBcIjU5OVwiLCAwIF0sIFsgXCJDeXBydXMgKM6az43PgM+Bzr/PgilcIiwgXCJjeVwiLCBcIjM1N1wiIF0sIFsgXCJDemVjaCBSZXB1YmxpYyAoxIxlc2vDoSByZXB1Ymxpa2EpXCIsIFwiY3pcIiwgXCI0MjBcIiBdLCBbIFwiRGVubWFyayAoRGFubWFyaylcIiwgXCJka1wiLCBcIjQ1XCIgXSwgWyBcIkRqaWJvdXRpXCIsIFwiZGpcIiwgXCIyNTNcIiBdLCBbIFwiRG9taW5pY2FcIiwgXCJkbVwiLCBcIjFcIiwgMTMsIFsgXCI3NjdcIiBdIF0sIFsgXCJEb21pbmljYW4gUmVwdWJsaWMgKFJlcMO6YmxpY2EgRG9taW5pY2FuYSlcIiwgXCJkb1wiLCBcIjFcIiwgMiwgWyBcIjgwOVwiLCBcIjgyOVwiLCBcIjg0OVwiIF0gXSwgWyBcIkVjdWFkb3JcIiwgXCJlY1wiLCBcIjU5M1wiIF0sIFsgXCJFZ3lwdCAo4oCr2YXYtdix4oCs4oCOKVwiLCBcImVnXCIsIFwiMjBcIiBdLCBbIFwiRWwgU2FsdmFkb3JcIiwgXCJzdlwiLCBcIjUwM1wiIF0sIFsgXCJFcXVhdG9yaWFsIEd1aW5lYSAoR3VpbmVhIEVjdWF0b3JpYWwpXCIsIFwiZ3FcIiwgXCIyNDBcIiBdLCBbIFwiRXJpdHJlYVwiLCBcImVyXCIsIFwiMjkxXCIgXSwgWyBcIkVzdG9uaWEgKEVlc3RpKVwiLCBcImVlXCIsIFwiMzcyXCIgXSwgWyBcIkV0aGlvcGlhXCIsIFwiZXRcIiwgXCIyNTFcIiBdLCBbIFwiRmFsa2xhbmQgSXNsYW5kcyAoSXNsYXMgTWFsdmluYXMpXCIsIFwiZmtcIiwgXCI1MDBcIiBdLCBbIFwiRmFyb2UgSXNsYW5kcyAoRsO4cm95YXIpXCIsIFwiZm9cIiwgXCIyOThcIiBdLCBbIFwiRmlqaVwiLCBcImZqXCIsIFwiNjc5XCIgXSwgWyBcIkZpbmxhbmQgKFN1b21pKVwiLCBcImZpXCIsIFwiMzU4XCIsIDAgXSwgWyBcIkZyYW5jZVwiLCBcImZyXCIsIFwiMzNcIiBdLCBbIFwiRnJlbmNoIEd1aWFuYSAoR3V5YW5lIGZyYW7Dp2Fpc2UpXCIsIFwiZ2ZcIiwgXCI1OTRcIiBdLCBbIFwiRnJlbmNoIFBvbHluZXNpYSAoUG9seW7DqXNpZSBmcmFuw6dhaXNlKVwiLCBcInBmXCIsIFwiNjg5XCIgXSwgWyBcIkdhYm9uXCIsIFwiZ2FcIiwgXCIyNDFcIiBdLCBbIFwiR2FtYmlhXCIsIFwiZ21cIiwgXCIyMjBcIiBdLCBbIFwiR2VvcmdpYSAo4YOh4YOQ4YOl4YOQ4YOg4YOX4YOV4YOU4YOa4YOdKVwiLCBcImdlXCIsIFwiOTk1XCIgXSwgWyBcIkdlcm1hbnkgKERldXRzY2hsYW5kKVwiLCBcImRlXCIsIFwiNDlcIiBdLCBbIFwiR2hhbmEgKEdhYW5hKVwiLCBcImdoXCIsIFwiMjMzXCIgXSwgWyBcIkdpYnJhbHRhclwiLCBcImdpXCIsIFwiMzUwXCIgXSwgWyBcIkdyZWVjZSAozpXOu867zqzOtM6xKVwiLCBcImdyXCIsIFwiMzBcIiBdLCBbIFwiR3JlZW5sYW5kIChLYWxhYWxsaXQgTnVuYWF0KVwiLCBcImdsXCIsIFwiMjk5XCIgXSwgWyBcIkdyZW5hZGFcIiwgXCJnZFwiLCBcIjFcIiwgMTQsIFsgXCI0NzNcIiBdIF0sIFsgXCJHdWFkZWxvdXBlXCIsIFwiZ3BcIiwgXCI1OTBcIiwgMCBdLCBbIFwiR3VhbVwiLCBcImd1XCIsIFwiMVwiLCAxNSwgWyBcIjY3MVwiIF0gXSwgWyBcIkd1YXRlbWFsYVwiLCBcImd0XCIsIFwiNTAyXCIgXSwgWyBcIkd1ZXJuc2V5XCIsIFwiZ2dcIiwgXCI0NFwiLCAxLCBbIFwiMTQ4MVwiLCBcIjc3ODFcIiwgXCI3ODM5XCIsIFwiNzkxMVwiIF0gXSwgWyBcIkd1aW5lYSAoR3VpbsOpZSlcIiwgXCJnblwiLCBcIjIyNFwiIF0sIFsgXCJHdWluZWEtQmlzc2F1IChHdWluw6kgQmlzc2F1KVwiLCBcImd3XCIsIFwiMjQ1XCIgXSwgWyBcIkd1eWFuYVwiLCBcImd5XCIsIFwiNTkyXCIgXSwgWyBcIkhhaXRpXCIsIFwiaHRcIiwgXCI1MDlcIiBdLCBbIFwiSG9uZHVyYXNcIiwgXCJoblwiLCBcIjUwNFwiIF0sIFsgXCJIb25nIEtvbmcgKOmmmea4rylcIiwgXCJoa1wiLCBcIjg1MlwiIF0sIFsgXCJIdW5nYXJ5IChNYWd5YXJvcnN6w6FnKVwiLCBcImh1XCIsIFwiMzZcIiBdLCBbIFwiSWNlbGFuZCAow41zbGFuZClcIiwgXCJpc1wiLCBcIjM1NFwiIF0sIFsgXCJJbmRpYSAo4KSt4KS+4KSw4KSkKVwiLCBcImluXCIsIFwiOTFcIiBdLCBbIFwiSW5kb25lc2lhXCIsIFwiaWRcIiwgXCI2MlwiIF0sIFsgXCJJcmFuICjigKvYp9uM2LHYp9mG4oCs4oCOKVwiLCBcImlyXCIsIFwiOThcIiBdLCBbIFwiSXJhcSAo4oCr2KfZhNi52LHYp9mC4oCs4oCOKVwiLCBcImlxXCIsIFwiOTY0XCIgXSwgWyBcIklyZWxhbmRcIiwgXCJpZVwiLCBcIjM1M1wiIF0sIFsgXCJJc2xlIG9mIE1hblwiLCBcImltXCIsIFwiNDRcIiwgMiwgWyBcIjE2MjRcIiwgXCI3NDU3NlwiLCBcIjc1MjRcIiwgXCI3OTI0XCIsIFwiNzYyNFwiIF0gXSwgWyBcIklzcmFlbCAo4oCr15nXqdeo15DXnOKArOKAjilcIiwgXCJpbFwiLCBcIjk3MlwiIF0sIFsgXCJJdGFseSAoSXRhbGlhKVwiLCBcIml0XCIsIFwiMzlcIiwgMCBdLCBbIFwiSmFtYWljYVwiLCBcImptXCIsIFwiMVwiLCA0LCBbIFwiODc2XCIsIFwiNjU4XCIgXSBdLCBbIFwiSmFwYW4gKOaXpeacrClcIiwgXCJqcFwiLCBcIjgxXCIgXSwgWyBcIkplcnNleVwiLCBcImplXCIsIFwiNDRcIiwgMywgWyBcIjE1MzRcIiwgXCI3NTA5XCIsIFwiNzcwMFwiLCBcIjc3OTdcIiwgXCI3ODI5XCIsIFwiNzkzN1wiIF0gXSwgWyBcIkpvcmRhbiAo4oCr2KfZhNij2LHYr9mG4oCs4oCOKVwiLCBcImpvXCIsIFwiOTYyXCIgXSwgWyBcIkthemFraHN0YW4gKNCa0LDQt9Cw0YXRgdGC0LDQvSlcIiwgXCJrelwiLCBcIjdcIiwgMSwgWyBcIjMzXCIsIFwiN1wiIF0gXSwgWyBcIktlbnlhXCIsIFwia2VcIiwgXCIyNTRcIiBdLCBbIFwiS2lyaWJhdGlcIiwgXCJraVwiLCBcIjY4NlwiIF0sIFsgXCJLb3Nvdm9cIiwgXCJ4a1wiLCBcIjM4M1wiIF0sIFsgXCJLdXdhaXQgKOKAq9in2YTZg9mI2YrYquKArOKAjilcIiwgXCJrd1wiLCBcIjk2NVwiIF0sIFsgXCJLeXJneXpzdGFuICjQmtGL0YDQs9GL0LfRgdGC0LDQvSlcIiwgXCJrZ1wiLCBcIjk5NlwiIF0sIFsgXCJMYW9zICjguqXgurLguqcpXCIsIFwibGFcIiwgXCI4NTZcIiBdLCBbIFwiTGF0dmlhIChMYXR2aWphKVwiLCBcImx2XCIsIFwiMzcxXCIgXSwgWyBcIkxlYmFub24gKOKAq9mE2KjZhtin2YbigKzigI4pXCIsIFwibGJcIiwgXCI5NjFcIiBdLCBbIFwiTGVzb3Rob1wiLCBcImxzXCIsIFwiMjY2XCIgXSwgWyBcIkxpYmVyaWFcIiwgXCJsclwiLCBcIjIzMVwiIF0sIFsgXCJMaWJ5YSAo4oCr2YTZitio2YrYp+KArOKAjilcIiwgXCJseVwiLCBcIjIxOFwiIF0sIFsgXCJMaWVjaHRlbnN0ZWluXCIsIFwibGlcIiwgXCI0MjNcIiBdLCBbIFwiTGl0aHVhbmlhIChMaWV0dXZhKVwiLCBcImx0XCIsIFwiMzcwXCIgXSwgWyBcIkx1eGVtYm91cmdcIiwgXCJsdVwiLCBcIjM1MlwiIF0sIFsgXCJNYWNhdSAo5r6z6ZaAKVwiLCBcIm1vXCIsIFwiODUzXCIgXSwgWyBcIk1hY2Vkb25pYSAoRllST00pICjQnNCw0LrQtdC00L7QvdC40ZjQsClcIiwgXCJta1wiLCBcIjM4OVwiIF0sIFsgXCJNYWRhZ2FzY2FyIChNYWRhZ2FzaWthcmEpXCIsIFwibWdcIiwgXCIyNjFcIiBdLCBbIFwiTWFsYXdpXCIsIFwibXdcIiwgXCIyNjVcIiBdLCBbIFwiTWFsYXlzaWFcIiwgXCJteVwiLCBcIjYwXCIgXSwgWyBcIk1hbGRpdmVzXCIsIFwibXZcIiwgXCI5NjBcIiBdLCBbIFwiTWFsaVwiLCBcIm1sXCIsIFwiMjIzXCIgXSwgWyBcIk1hbHRhXCIsIFwibXRcIiwgXCIzNTZcIiBdLCBbIFwiTWFyc2hhbGwgSXNsYW5kc1wiLCBcIm1oXCIsIFwiNjkyXCIgXSwgWyBcIk1hcnRpbmlxdWVcIiwgXCJtcVwiLCBcIjU5NlwiIF0sIFsgXCJNYXVyaXRhbmlhICjigKvZhdmI2LHZitiq2KfZhtmK2KfigKzigI4pXCIsIFwibXJcIiwgXCIyMjJcIiBdLCBbIFwiTWF1cml0aXVzIChNb3JpcylcIiwgXCJtdVwiLCBcIjIzMFwiIF0sIFsgXCJNYXlvdHRlXCIsIFwieXRcIiwgXCIyNjJcIiwgMSwgWyBcIjI2OVwiLCBcIjYzOVwiIF0gXSwgWyBcIk1leGljbyAoTcOpeGljbylcIiwgXCJteFwiLCBcIjUyXCIgXSwgWyBcIk1pY3JvbmVzaWFcIiwgXCJmbVwiLCBcIjY5MVwiIF0sIFsgXCJNb2xkb3ZhIChSZXB1YmxpY2EgTW9sZG92YSlcIiwgXCJtZFwiLCBcIjM3M1wiIF0sIFsgXCJNb25hY29cIiwgXCJtY1wiLCBcIjM3N1wiIF0sIFsgXCJNb25nb2xpYSAo0JzQvtC90LPQvtC7KVwiLCBcIm1uXCIsIFwiOTc2XCIgXSwgWyBcIk1vbnRlbmVncm8gKENybmEgR29yYSlcIiwgXCJtZVwiLCBcIjM4MlwiIF0sIFsgXCJNb250c2VycmF0XCIsIFwibXNcIiwgXCIxXCIsIDE2LCBbIFwiNjY0XCIgXSBdLCBbIFwiTW9yb2NjbyAo4oCr2KfZhNmF2LrYsdio4oCs4oCOKVwiLCBcIm1hXCIsIFwiMjEyXCIsIDAgXSwgWyBcIk1vemFtYmlxdWUgKE1vw6dhbWJpcXVlKVwiLCBcIm16XCIsIFwiMjU4XCIgXSwgWyBcIk15YW5tYXIgKEJ1cm1hKSAo4YCZ4YC84YCU4YC64YCZ4YCsKVwiLCBcIm1tXCIsIFwiOTVcIiBdLCBbIFwiTmFtaWJpYSAoTmFtaWJpw6spXCIsIFwibmFcIiwgXCIyNjRcIiBdLCBbIFwiTmF1cnVcIiwgXCJuclwiLCBcIjY3NFwiIF0sIFsgXCJOZXBhbCAo4KSo4KWH4KSq4KS+4KSyKVwiLCBcIm5wXCIsIFwiOTc3XCIgXSwgWyBcIk5ldGhlcmxhbmRzIChOZWRlcmxhbmQpXCIsIFwibmxcIiwgXCIzMVwiIF0sIFsgXCJOZXcgQ2FsZWRvbmlhIChOb3V2ZWxsZS1DYWzDqWRvbmllKVwiLCBcIm5jXCIsIFwiNjg3XCIgXSwgWyBcIk5ldyBaZWFsYW5kXCIsIFwibnpcIiwgXCI2NFwiIF0sIFsgXCJOaWNhcmFndWFcIiwgXCJuaVwiLCBcIjUwNVwiIF0sIFsgXCJOaWdlciAoTmlqYXIpXCIsIFwibmVcIiwgXCIyMjdcIiBdLCBbIFwiTmlnZXJpYVwiLCBcIm5nXCIsIFwiMjM0XCIgXSwgWyBcIk5pdWVcIiwgXCJudVwiLCBcIjY4M1wiIF0sIFsgXCJOb3Jmb2xrIElzbGFuZFwiLCBcIm5mXCIsIFwiNjcyXCIgXSwgWyBcIk5vcnRoIEtvcmVhICjsobDshKAg66+87KO87KO87J2YIOyduOuvvCDqs7XtmZTqta0pXCIsIFwia3BcIiwgXCI4NTBcIiBdLCBbIFwiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXCIsIFwibXBcIiwgXCIxXCIsIDE3LCBbIFwiNjcwXCIgXSBdLCBbIFwiTm9yd2F5IChOb3JnZSlcIiwgXCJub1wiLCBcIjQ3XCIsIDAgXSwgWyBcIk9tYW4gKOKAq9i52Y/Zhdin2YbigKzigI4pXCIsIFwib21cIiwgXCI5NjhcIiBdLCBbIFwiUGFraXN0YW4gKOKAq9m+2Kfaqdiz2KrYp9mG4oCs4oCOKVwiLCBcInBrXCIsIFwiOTJcIiBdLCBbIFwiUGFsYXVcIiwgXCJwd1wiLCBcIjY4MFwiIF0sIFsgXCJQYWxlc3RpbmUgKOKAq9mB2YTYs9i32YrZhuKArOKAjilcIiwgXCJwc1wiLCBcIjk3MFwiIF0sIFsgXCJQYW5hbWEgKFBhbmFtw6EpXCIsIFwicGFcIiwgXCI1MDdcIiBdLCBbIFwiUGFwdWEgTmV3IEd1aW5lYVwiLCBcInBnXCIsIFwiNjc1XCIgXSwgWyBcIlBhcmFndWF5XCIsIFwicHlcIiwgXCI1OTVcIiBdLCBbIFwiUGVydSAoUGVyw7opXCIsIFwicGVcIiwgXCI1MVwiIF0sIFsgXCJQaGlsaXBwaW5lc1wiLCBcInBoXCIsIFwiNjNcIiBdLCBbIFwiUG9sYW5kIChQb2xza2EpXCIsIFwicGxcIiwgXCI0OFwiIF0sIFsgXCJQb3J0dWdhbFwiLCBcInB0XCIsIFwiMzUxXCIgXSwgWyBcIlB1ZXJ0byBSaWNvXCIsIFwicHJcIiwgXCIxXCIsIDMsIFsgXCI3ODdcIiwgXCI5MzlcIiBdIF0sIFsgXCJRYXRhciAo4oCr2YLYt9ix4oCs4oCOKVwiLCBcInFhXCIsIFwiOTc0XCIgXSwgWyBcIlLDqXVuaW9uIChMYSBSw6l1bmlvbilcIiwgXCJyZVwiLCBcIjI2MlwiLCAwIF0sIFsgXCJSb21hbmlhIChSb23Dom5pYSlcIiwgXCJyb1wiLCBcIjQwXCIgXSwgWyBcIlJ1c3NpYSAo0KDQvtGB0YHQuNGPKVwiLCBcInJ1XCIsIFwiN1wiLCAwIF0sIFsgXCJSd2FuZGFcIiwgXCJyd1wiLCBcIjI1MFwiIF0sIFsgXCJTYWludCBCYXJ0aMOpbGVteVwiLCBcImJsXCIsIFwiNTkwXCIsIDEgXSwgWyBcIlNhaW50IEhlbGVuYVwiLCBcInNoXCIsIFwiMjkwXCIgXSwgWyBcIlNhaW50IEtpdHRzIGFuZCBOZXZpc1wiLCBcImtuXCIsIFwiMVwiLCAxOCwgWyBcIjg2OVwiIF0gXSwgWyBcIlNhaW50IEx1Y2lhXCIsIFwibGNcIiwgXCIxXCIsIDE5LCBbIFwiNzU4XCIgXSBdLCBbIFwiU2FpbnQgTWFydGluIChTYWludC1NYXJ0aW4gKHBhcnRpZSBmcmFuw6dhaXNlKSlcIiwgXCJtZlwiLCBcIjU5MFwiLCAyIF0sIFsgXCJTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uIChTYWludC1QaWVycmUtZXQtTWlxdWVsb24pXCIsIFwicG1cIiwgXCI1MDhcIiBdLCBbIFwiU2FpbnQgVmluY2VudCBhbmQgdGhlIEdyZW5hZGluZXNcIiwgXCJ2Y1wiLCBcIjFcIiwgMjAsIFsgXCI3ODRcIiBdIF0sIFsgXCJTYW1vYVwiLCBcIndzXCIsIFwiNjg1XCIgXSwgWyBcIlNhbiBNYXJpbm9cIiwgXCJzbVwiLCBcIjM3OFwiIF0sIFsgXCJTw6NvIFRvbcOpIGFuZCBQcsOtbmNpcGUgKFPDo28gVG9tw6kgZSBQcsOtbmNpcGUpXCIsIFwic3RcIiwgXCIyMzlcIiBdLCBbIFwiU2F1ZGkgQXJhYmlhICjigKvYp9mE2YXZhdmE2YPYqSDYp9mE2LnYsdio2YrYqSDYp9mE2LPYudmI2K/Zitip4oCs4oCOKVwiLCBcInNhXCIsIFwiOTY2XCIgXSwgWyBcIlNlbmVnYWwgKFPDqW7DqWdhbClcIiwgXCJzblwiLCBcIjIyMVwiIF0sIFsgXCJTZXJiaWEgKNCh0YDQsdC40ZjQsClcIiwgXCJyc1wiLCBcIjM4MVwiIF0sIFsgXCJTZXljaGVsbGVzXCIsIFwic2NcIiwgXCIyNDhcIiBdLCBbIFwiU2llcnJhIExlb25lXCIsIFwic2xcIiwgXCIyMzJcIiBdLCBbIFwiU2luZ2Fwb3JlXCIsIFwic2dcIiwgXCI2NVwiIF0sIFsgXCJTaW50IE1hYXJ0ZW5cIiwgXCJzeFwiLCBcIjFcIiwgMjEsIFsgXCI3MjFcIiBdIF0sIFsgXCJTbG92YWtpYSAoU2xvdmVuc2tvKVwiLCBcInNrXCIsIFwiNDIxXCIgXSwgWyBcIlNsb3ZlbmlhIChTbG92ZW5pamEpXCIsIFwic2lcIiwgXCIzODZcIiBdLCBbIFwiU29sb21vbiBJc2xhbmRzXCIsIFwic2JcIiwgXCI2NzdcIiBdLCBbIFwiU29tYWxpYSAoU29vbWFhbGl5YSlcIiwgXCJzb1wiLCBcIjI1MlwiIF0sIFsgXCJTb3V0aCBBZnJpY2FcIiwgXCJ6YVwiLCBcIjI3XCIgXSwgWyBcIlNvdXRoIEtvcmVhICjrjIDtlZzrr7zqta0pXCIsIFwia3JcIiwgXCI4MlwiIF0sIFsgXCJTb3V0aCBTdWRhbiAo4oCr2KzZhtmI2Kgg2KfZhNiz2YjYr9in2YbigKzigI4pXCIsIFwic3NcIiwgXCIyMTFcIiBdLCBbIFwiU3BhaW4gKEVzcGHDsWEpXCIsIFwiZXNcIiwgXCIzNFwiIF0sIFsgXCJTcmkgTGFua2EgKOC3geC3iuKAjeC2u+C3kyDgtr3gtoLgtprgt4/gt4ApXCIsIFwibGtcIiwgXCI5NFwiIF0sIFsgXCJTdWRhbiAo4oCr2KfZhNiz2YjYr9in2YbigKzigI4pXCIsIFwic2RcIiwgXCIyNDlcIiBdLCBbIFwiU3VyaW5hbWVcIiwgXCJzclwiLCBcIjU5N1wiIF0sIFsgXCJTdmFsYmFyZCBhbmQgSmFuIE1heWVuXCIsIFwic2pcIiwgXCI0N1wiLCAxLCBbIFwiNzlcIiBdIF0sIFsgXCJTd2F6aWxhbmRcIiwgXCJzelwiLCBcIjI2OFwiIF0sIFsgXCJTd2VkZW4gKFN2ZXJpZ2UpXCIsIFwic2VcIiwgXCI0NlwiIF0sIFsgXCJTd2l0emVybGFuZCAoU2Nod2VpeilcIiwgXCJjaFwiLCBcIjQxXCIgXSwgWyBcIlN5cmlhICjigKvYs9mI2LHZitin4oCs4oCOKVwiLCBcInN5XCIsIFwiOTYzXCIgXSwgWyBcIlRhaXdhbiAo5Y+w54GjKVwiLCBcInR3XCIsIFwiODg2XCIgXSwgWyBcIlRhamlraXN0YW5cIiwgXCJ0alwiLCBcIjk5MlwiIF0sIFsgXCJUYW56YW5pYVwiLCBcInR6XCIsIFwiMjU1XCIgXSwgWyBcIlRoYWlsYW5kICjguYTguJfguKIpXCIsIFwidGhcIiwgXCI2NlwiIF0sIFsgXCJUaW1vci1MZXN0ZVwiLCBcInRsXCIsIFwiNjcwXCIgXSwgWyBcIlRvZ29cIiwgXCJ0Z1wiLCBcIjIyOFwiIF0sIFsgXCJUb2tlbGF1XCIsIFwidGtcIiwgXCI2OTBcIiBdLCBbIFwiVG9uZ2FcIiwgXCJ0b1wiLCBcIjY3NlwiIF0sIFsgXCJUcmluaWRhZCBhbmQgVG9iYWdvXCIsIFwidHRcIiwgXCIxXCIsIDIyLCBbIFwiODY4XCIgXSBdLCBbIFwiVHVuaXNpYSAo4oCr2KrZiNmG2LPigKzigI4pXCIsIFwidG5cIiwgXCIyMTZcIiBdLCBbIFwiVHVya2V5IChUw7xya2l5ZSlcIiwgXCJ0clwiLCBcIjkwXCIgXSwgWyBcIlR1cmttZW5pc3RhblwiLCBcInRtXCIsIFwiOTkzXCIgXSwgWyBcIlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kc1wiLCBcInRjXCIsIFwiMVwiLCAyMywgWyBcIjY0OVwiIF0gXSwgWyBcIlR1dmFsdVwiLCBcInR2XCIsIFwiNjg4XCIgXSwgWyBcIlUuUy4gVmlyZ2luIElzbGFuZHNcIiwgXCJ2aVwiLCBcIjFcIiwgMjQsIFsgXCIzNDBcIiBdIF0sIFsgXCJVZ2FuZGFcIiwgXCJ1Z1wiLCBcIjI1NlwiIF0sIFsgXCJVa3JhaW5lICjQo9C60YDQsNGX0L3QsClcIiwgXCJ1YVwiLCBcIjM4MFwiIF0sIFsgXCJVbml0ZWQgQXJhYiBFbWlyYXRlcyAo4oCr2KfZhNil2YXYp9ix2KfYqiDYp9mE2LnYsdio2YrYqSDYp9mE2YXYqtit2K/YqeKArOKAjilcIiwgXCJhZVwiLCBcIjk3MVwiIF0sIFsgXCJVbml0ZWQgS2luZ2RvbVwiLCBcImdiXCIsIFwiNDRcIiwgMCBdLCBbIFwiVW5pdGVkIFN0YXRlc1wiLCBcInVzXCIsIFwiMVwiLCAwIF0sIFsgXCJVcnVndWF5XCIsIFwidXlcIiwgXCI1OThcIiBdLCBbIFwiVXpiZWtpc3RhbiAoT8q7emJla2lzdG9uKVwiLCBcInV6XCIsIFwiOTk4XCIgXSwgWyBcIlZhbnVhdHVcIiwgXCJ2dVwiLCBcIjY3OFwiIF0sIFsgXCJWYXRpY2FuIENpdHkgKENpdHTDoCBkZWwgVmF0aWNhbm8pXCIsIFwidmFcIiwgXCIzOVwiLCAxLCBbIFwiMDY2OThcIiBdIF0sIFsgXCJWZW5lenVlbGFcIiwgXCJ2ZVwiLCBcIjU4XCIgXSwgWyBcIlZpZXRuYW0gKFZp4buHdCBOYW0pXCIsIFwidm5cIiwgXCI4NFwiIF0sIFsgXCJXYWxsaXMgYW5kIEZ1dHVuYSAoV2FsbGlzLWV0LUZ1dHVuYSlcIiwgXCJ3ZlwiLCBcIjY4MVwiIF0sIFsgXCJXZXN0ZXJuIFNhaGFyYSAo4oCr2KfZhNi12K3Ysdin2KEg2KfZhNi62LHYqNmK2KnigKzigI4pXCIsIFwiZWhcIiwgXCIyMTJcIiwgMSwgWyBcIjUyODhcIiwgXCI1Mjg5XCIgXSBdLCBbIFwiWWVtZW4gKOKAq9in2YTZitmF2YbigKzigI4pXCIsIFwieWVcIiwgXCI5NjdcIiBdLCBbIFwiWmFtYmlhXCIsIFwiem1cIiwgXCIyNjBcIiBdLCBbIFwiWmltYmFid2VcIiwgXCJ6d1wiLCBcIjI2M1wiIF0sIFsgXCLDhWxhbmQgSXNsYW5kc1wiLCBcImF4XCIsIFwiMzU4XCIsIDEsIFsgXCIxOFwiIF0gXSBdO1xuICAgICAgICAvLyBsb29wIG92ZXIgYWxsIG9mIHRoZSBjb3VudHJpZXMgYWJvdmUsIHJlc3RydWN0dXJpbmcgdGhlIGRhdGEgdG8gYmUgb2JqZWN0cyB3aXRoIG5hbWVkIGtleXNcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxDb3VudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjID0gYWxsQ291bnRyaWVzW2ldO1xuICAgICAgICAgICAgYWxsQ291bnRyaWVzW2ldID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGNbMF0sXG4gICAgICAgICAgICAgICAgaXNvMjogY1sxXSxcbiAgICAgICAgICAgICAgICBkaWFsQ29kZTogY1syXSxcbiAgICAgICAgICAgICAgICBwcmlvcml0eTogY1szXSB8fCAwLFxuICAgICAgICAgICAgICAgIGFyZWFDb2RlczogY1s0XSB8fCBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgICAgICAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICAgICAgICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW50bFRlbElucHV0R2xvYmFscyA9IHtcbiAgICAgICAgICAgIGdldEluc3RhbmNlOiBmdW5jdGlvbiBnZXRJbnN0YW5jZShpbnB1dCkge1xuICAgICAgICAgICAgICAgIHZhciBpZCA9IGlucHV0LmdldEF0dHJpYnV0ZShcImRhdGEtaW50bC10ZWwtaW5wdXQtaWRcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5pbnRsVGVsSW5wdXRHbG9iYWxzLmluc3RhbmNlc1tpZF07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5zdGFuY2VzOiB7fVxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgd2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMgPSBpbnRsVGVsSW5wdXRHbG9iYWxzO1xuICAgICAgICAvLyB0aGVzZSB2YXJzIHBlcnNpc3QgdGhyb3VnaCBhbGwgaW5zdGFuY2VzIG9mIHRoZSBwbHVnaW5cbiAgICAgICAgdmFyIGlkID0gMDtcbiAgICAgICAgdmFyIGRlZmF1bHRzID0ge1xuICAgICAgICAgICAgLy8gd2hldGhlciBvciBub3QgdG8gYWxsb3cgdGhlIGRyb3Bkb3duXG4gICAgICAgICAgICBhbGxvd0Ryb3Bkb3duOiB0cnVlLFxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMganVzdCBhIGRpYWwgY29kZSBpbiB0aGUgaW5wdXQ6IHJlbW92ZSBpdCBvbiBibHVyXG4gICAgICAgICAgICBhdXRvSGlkZURpYWxDb2RlOiB0cnVlLFxuICAgICAgICAgICAgLy8gYWRkIGEgcGxhY2Vob2xkZXIgaW4gdGhlIGlucHV0IHdpdGggYW4gZXhhbXBsZSBudW1iZXIgZm9yIHRoZSBzZWxlY3RlZCBjb3VudHJ5XG4gICAgICAgICAgICBhdXRvUGxhY2Vob2xkZXI6IFwicG9saXRlXCIsXG4gICAgICAgICAgICAvLyBtb2RpZnkgdGhlIHBhcmVudENsYXNzXG4gICAgICAgICAgICBjdXN0b21Db250YWluZXI6IFwiXCIsXG4gICAgICAgICAgICAvLyBtb2RpZnkgdGhlIGF1dG8gcGxhY2Vob2xkZXJcbiAgICAgICAgICAgIGN1c3RvbVBsYWNlaG9sZGVyOiBudWxsLFxuICAgICAgICAgICAgLy8gYXBwZW5kIG1lbnUgdG8gc3BlY2lmaWVkIGVsZW1lbnRcbiAgICAgICAgICAgIGRyb3Bkb3duQ29udGFpbmVyOiBudWxsLFxuICAgICAgICAgICAgLy8gZG9uJ3QgZGlzcGxheSB0aGVzZSBjb3VudHJpZXNcbiAgICAgICAgICAgIGV4Y2x1ZGVDb3VudHJpZXM6IFtdLFxuICAgICAgICAgICAgLy8gZm9ybWF0IHRoZSBpbnB1dCB2YWx1ZSBkdXJpbmcgaW5pdGlhbGlzYXRpb24gYW5kIG9uIHNldE51bWJlclxuICAgICAgICAgICAgZm9ybWF0T25EaXNwbGF5OiB0cnVlLFxuICAgICAgICAgICAgLy8gZ2VvSXAgbG9va3VwIGZ1bmN0aW9uXG4gICAgICAgICAgICBnZW9JcExvb2t1cDogbnVsbCxcbiAgICAgICAgICAgIC8vIGluamVjdCBhIGhpZGRlbiBpbnB1dCB3aXRoIHRoaXMgbmFtZSwgYW5kIG9uIHN1Ym1pdCwgcG9wdWxhdGUgaXQgd2l0aCB0aGUgcmVzdWx0IG9mIGdldE51bWJlclxuICAgICAgICAgICAgaGlkZGVuSW5wdXQ6IFwiXCIsXG4gICAgICAgICAgICAvLyBpbml0aWFsIGNvdW50cnlcbiAgICAgICAgICAgIGluaXRpYWxDb3VudHJ5OiBcIlwiLFxuICAgICAgICAgICAgLy8gbG9jYWxpemVkIGNvdW50cnkgbmFtZXMgZS5nLiB7ICdkZSc6ICdEZXV0c2NobGFuZCcgfVxuICAgICAgICAgICAgbG9jYWxpemVkQ291bnRyaWVzOiBudWxsLFxuICAgICAgICAgICAgLy8gZG9uJ3QgaW5zZXJ0IGludGVybmF0aW9uYWwgZGlhbCBjb2Rlc1xuICAgICAgICAgICAgbmF0aW9uYWxNb2RlOiB0cnVlLFxuICAgICAgICAgICAgLy8gZGlzcGxheSBvbmx5IHRoZXNlIGNvdW50cmllc1xuICAgICAgICAgICAgb25seUNvdW50cmllczogW10sXG4gICAgICAgICAgICAvLyBudW1iZXIgdHlwZSB0byB1c2UgZm9yIHBsYWNlaG9sZGVyc1xuICAgICAgICAgICAgcGxhY2Vob2xkZXJOdW1iZXJUeXBlOiBcIk1PQklMRVwiLFxuICAgICAgICAgICAgLy8gdGhlIGNvdW50cmllcyBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0LiBkZWZhdWx0cyB0byB1bml0ZWQgc3RhdGVzIGFuZCB1bml0ZWQga2luZ2RvbVxuICAgICAgICAgICAgcHJlZmVycmVkQ291bnRyaWVzOiBbIFwidXNcIiwgXCJnYlwiIF0sXG4gICAgICAgICAgICAvLyBkaXNwbGF5IHRoZSBjb3VudHJ5IGRpYWwgY29kZSBuZXh0IHRvIHRoZSBzZWxlY3RlZCBmbGFnIHNvIGl0J3Mgbm90IHBhcnQgb2YgdGhlIHR5cGVkIG51bWJlclxuICAgICAgICAgICAgc2VwYXJhdGVEaWFsQ29kZTogZmFsc2UsXG4gICAgICAgICAgICAvLyBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSBsaWJwaG9uZW51bWJlciBzY3JpcHQgdG8gZW5hYmxlIHZhbGlkYXRpb24vZm9ybWF0dGluZ1xuICAgICAgICAgICAgdXRpbHNTY3JpcHQ6IFwiXCJcbiAgICAgICAgfTtcbiAgICAgICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9Ob3J0aF9BbWVyaWNhbl9OdW1iZXJpbmdfUGxhbl9hcmVhX2NvZGVzI05vbi1nZW9ncmFwaGljX2FyZWFfY29kZXNcbiAgICAgICAgdmFyIHJlZ2lvbmxlc3NOYW5wTnVtYmVycyA9IFsgXCI4MDBcIiwgXCI4MjJcIiwgXCI4MzNcIiwgXCI4NDRcIiwgXCI4NTVcIiwgXCI4NjZcIiwgXCI4NzdcIiwgXCI4ODBcIiwgXCI4ODFcIiwgXCI4ODJcIiwgXCI4ODNcIiwgXCI4ODRcIiwgXCI4ODVcIiwgXCI4ODZcIiwgXCI4ODdcIiwgXCI4ODhcIiwgXCI4ODlcIiBdO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgLy8ga2VlcCB0cmFjayBvZiBpZiB0aGUgd2luZG93LmxvYWQgZXZlbnQgaGFzIGZpcmVkIGFzIGltcG9zc2libGUgdG8gY2hlY2sgYWZ0ZXIgdGhlIGZhY3RcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAvLyBVUERBVEU6IHVzZSBhIHB1YmxpYyBzdGF0aWMgZmllbGQgc28gd2UgY2FuIGZ1ZGdlIGl0IGluIHRoZSB0ZXN0c1xuICAgICAgICAgICAgICAgIHdpbmRvdy5pbnRsVGVsSW5wdXRHbG9iYWxzLndpbmRvd0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB1dGlsaXR5IGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhbiBvYmplY3QuIGNhbid0IHVzZSBPYmplY3QuZW50cmllcyBvciBuYXRpdmUgZm9yRWFjaCBiZWNhdXNlXG4gICAgICAgIC8vIG9mIElFMTFcbiAgICAgICAgdmFyIGZvckVhY2hQcm9wID0gZnVuY3Rpb24gZm9yRWFjaFByb3Aob2JqLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soa2V5c1tpXSwgb2JqW2tleXNbaV1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gcnVuIGEgbWV0aG9kIG9uIGVhY2ggaW5zdGFuY2Ugb2YgdGhlIHBsdWdpblxuICAgICAgICB2YXIgZm9yRWFjaEluc3RhbmNlID0gZnVuY3Rpb24gZm9yRWFjaEluc3RhbmNlKG1ldGhvZCkge1xuICAgICAgICAgICAgZm9yRWFjaFByb3Aod2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMuaW5zdGFuY2VzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuaW50bFRlbElucHV0R2xvYmFscy5pbnN0YW5jZXNba2V5XVttZXRob2RdKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gdGhpcyBpcyBvdXIgcGx1Z2luIGNsYXNzIHRoYXQgd2Ugd2lsbCBjcmVhdGUgYW4gaW5zdGFuY2Ugb2ZcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICAgIHZhciBJdGkgPSAvKiNfX1BVUkVfXyovXG4gICAgICAgIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gSXRpKGlucHV0LCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSXRpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gaWQrKztcbiAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0ID0gaW5wdXQ7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVJdGVtID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodGVkSXRlbSA9IG51bGw7XG4gICAgICAgICAgICAgICAgLy8gcHJvY2VzcyBzcGVjaWZpZWQgb3B0aW9ucyAvIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgLy8gYWx0ZXJuYXRpdmUgdG8gT2JqZWN0LmFzc2lnbiwgd2hpY2ggaXNuJ3Qgc3VwcG9ydGVkIGJ5IElFMTFcbiAgICAgICAgICAgICAgICB2YXIgY3VzdG9tT3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgZm9yRWFjaFByb3AoZGVmYXVsdHMsIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMub3B0aW9uc1trZXldID0gY3VzdG9tT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpID8gY3VzdG9tT3B0aW9uc1trZXldIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYWRJbml0aWFsUGxhY2Vob2xkZXIgPSBCb29sZWFuKGlucHV0LmdldEF0dHJpYnV0ZShcInBsYWNlaG9sZGVyXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhJdGksIFsge1xuICAgICAgICAgICAgICAgIGtleTogXCJfaW5pdFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5pdCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIGluIG5hdGlvbmFsTW9kZSwgZGlzYWJsZSBvcHRpb25zIHJlbGF0aW5nIHRvIGRpYWwgY29kZXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5uYXRpb25hbE1vZGUpIHRoaXMub3B0aW9ucy5hdXRvSGlkZURpYWxDb2RlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHNlcGFyYXRlRGlhbENvZGUgdGhlbiBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gQSkgaW5zZXJ0IGRpYWwgY29kZSBpbnRvIGlucHV0XG4gICAgICAgICAgICAgICAgICAgIC8vIChhdXRvSGlkZURpYWxDb2RlKSwgYW5kIEIpIGRpc3BsYXkgbmF0aW9uYWwgbnVtYmVycyAoYmVjYXVzZSB3ZSdyZSBkaXNwbGF5aW5nIHRoZSBjb3VudHJ5XG4gICAgICAgICAgICAgICAgICAgIC8vIGRpYWwgY29kZSBuZXh0IHRvIHRoZW0pXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VwYXJhdGVEaWFsQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmF1dG9IaWRlRGlhbENvZGUgPSB0aGlzLm9wdGlvbnMubmF0aW9uYWxNb2RlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgY2Fubm90IGp1c3QgdGVzdCBzY3JlZW4gc2l6ZSBhcyBzb21lIHNtYXJ0cGhvbmVzL3dlYnNpdGUgbWV0YSB0YWdzIHdpbGwgcmVwb3J0IGRlc2t0b3BcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzb2x1dGlvbnNcbiAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogZm9yIHNvbWUgcmVhc29uIGphc21pbmUgYnJlYWtzIGlmIHlvdSBwdXQgdGhpcyBpbiB0aGUgbWFpbiBQbHVnaW4gZnVuY3Rpb24gd2l0aCB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzdCBvZiB0aGVzZSBkZWNsYXJhdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogdG8gdGFyZ2V0IEFuZHJvaWQgTW9iaWxlcyAoYW5kIG5vdCBUYWJsZXRzKSwgd2UgbXVzdCBmaW5kICdBbmRyb2lkJyBhbmQgJ01vYmlsZSdcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01vYmlsZSA9IC9BbmRyb2lkLitNb2JpbGV8d2ViT1N8aVBob25lfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyaWdnZXIgdGhlIG1vYmlsZSBkcm9wZG93biBjc3NcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcIml0aS1tb2JpbGVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbiBtb2JpbGUsIHdlIHdhbnQgYSBmdWxsIHNjcmVlbiBkcm9wZG93biwgc28gd2UgbXVzdCBhcHBlbmQgaXQgdG8gdGhlIGJvZHlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmRyb3Bkb3duQ29udGFpbmVyKSB0aGlzLm9wdGlvbnMuZHJvcGRvd25Db250YWluZXIgPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZXNlIHByb21pc2VzIGdldCByZXNvbHZlZCB3aGVuIHRoZWlyIGluZGl2aWR1YWwgcmVxdWVzdHMgY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB3YXkgdGhlIGRldiBjYW4gZG8gc29tZXRoaW5nIGxpa2UgaXRpLnByb21pc2UudGhlbiguLi4pIHRvIGtub3cgd2hlbiBhbGwgcmVxdWVzdHMgYXJlXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF1dG9Db3VudHJ5UHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5yZXNvbHZlQXV0b0NvdW50cnlQcm9taXNlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIucmVqZWN0QXV0b0NvdW50cnlQcm9taXNlID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXRpbHNTY3JpcHRQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLnJlc29sdmVVdGlsc1NjcmlwdFByb21pc2UgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5yZWplY3RVdGlsc1NjcmlwdFByb21pc2UgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZSA9IFByb21pc2UuYWxsKFsgYXV0b0NvdW50cnlQcm9taXNlLCB1dGlsc1NjcmlwdFByb21pc2UgXSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGVycm9ycyB3aGVuIFByb21pc2UgZG9lc24ndCBleGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlQXV0b0NvdW50cnlQcm9taXNlID0gdGhpcy5yZWplY3RBdXRvQ291bnRyeVByb21pc2UgPSBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlVXRpbHNTY3JpcHRQcm9taXNlID0gdGhpcy5yZWplY3RVdGlsc1NjcmlwdFByb21pc2UgPSBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGluIHZhcmlvdXMgc2l0dWF0aW9ucyB0aGVyZSBjb3VsZCBiZSBubyBjb3VudHJ5IHNlbGVjdGVkIGluaXRpYWxseSwgYnV0IHdlIG5lZWQgdG8gYmUgYWJsZVxuICAgICAgICAgICAgICAgICAgICAvLyB0byBhc3N1bWUgdGhpcyB2YXJpYWJsZSBleGlzdHNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhID0ge307XG4gICAgICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MgYWxsIHRoZSBkYXRhOiBvbmx5Q291bnRyaWVzLCBleGNsdWRlQ291bnRyaWVzLCBwcmVmZXJyZWRDb3VudHJpZXMgZXRjXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NDb3VudHJ5RGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBnZW5lcmF0ZSB0aGUgbWFya3VwXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlTWFya3VwKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgaW5wdXQgdmFsdWUgYW5kIHRoZSBzZWxlY3RlZCBmbGFnXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEluaXRpYWxTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBzdGFydCBhbGwgb2YgdGhlIGV2ZW50IGxpc3RlbmVyczogYXV0b0hpZGVEaWFsQ29kZSwgaW5wdXQga2V5ZG93biwgc2VsZWN0ZWRGbGFnIGNsaWNrXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luaXRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXRpbHMgc2NyaXB0LCBhbmQgYXV0byBjb3VudHJ5XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luaXRSZXF1ZXN0cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3Byb2Nlc3NDb3VudHJ5RGF0YVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcHJvY2Vzc0NvdW50cnlEYXRhKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIG9ubHlDb3VudHJpZXMgb3IgZXhjbHVkZUNvdW50cmllcyBhcnJheSBpZiBwcmVzZW50XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBbGxDb3VudHJpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJvY2VzcyB0aGUgY291bnRyeUNvZGVzIG1hcFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzQ291bnRyeUNvZGVzKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MgdGhlIHByZWZlcnJlZENvdW50cmllc1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzUHJlZmVycmVkQ291bnRyaWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zbGF0ZSBjb3VudHJpZXMgYWNjb3JkaW5nIHRvIGxvY2FsaXplZENvdW50cmllcyBvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhbGl6ZWRDb3VudHJpZXMpIHRoaXMuX3RyYW5zbGF0ZUNvdW50cmllc0J5TG9jYWxlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNvcnQgY291bnRyaWVzIGJ5IG5hbWVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5vbmx5Q291bnRyaWVzLmxlbmd0aCB8fCB0aGlzLm9wdGlvbnMubG9jYWxpemVkQ291bnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cmllcy5zb3J0KHRoaXMuX2NvdW50cnlOYW1lU29ydCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9hZGRDb3VudHJ5Q29kZVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfYWRkQ291bnRyeUNvZGUoaXNvMiwgZGlhbENvZGUsIHByaW9yaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkaWFsQ29kZS5sZW5ndGggPiB0aGlzLmRpYWxDb2RlTWF4TGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxDb2RlTWF4TGVuID0gZGlhbENvZGUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb3VudHJ5Q29kZXMuaGFzT3duUHJvcGVydHkoZGlhbENvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlDb2Rlc1tkaWFsQ29kZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBiYWlsIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGlzIGNvdW50cnkgZm9yIHRoaXMgZGlhbENvZGVcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvdW50cnlDb2Rlc1tkaWFsQ29kZV0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvdW50cnlDb2Rlc1tkaWFsQ29kZV1baV0gPT09IGlzbzIpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgdW5kZWZpbmVkIGFzIDAgaXMgZmFsc3lcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gcHJpb3JpdHkgIT09IHVuZGVmaW5lZCA/IHByaW9yaXR5IDogdGhpcy5jb3VudHJ5Q29kZXNbZGlhbENvZGVdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudHJ5Q29kZXNbZGlhbENvZGVdW2luZGV4XSA9IGlzbzI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfcHJvY2Vzc0FsbENvdW50cmllc1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcHJvY2Vzc0FsbENvdW50cmllcygpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5vbmx5Q291bnRyaWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvd2VyQ2FzZU9ubHlDb3VudHJpZXMgPSB0aGlzLm9wdGlvbnMub25seUNvdW50cmllcy5tYXAoZnVuY3Rpb24oY291bnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3VudHJ5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRyaWVzID0gYWxsQ291bnRyaWVzLmZpbHRlcihmdW5jdGlvbihjb3VudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvd2VyQ2FzZU9ubHlDb3VudHJpZXMuaW5kZXhPZihjb3VudHJ5LmlzbzIpID4gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZXhjbHVkZUNvdW50cmllcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb3dlckNhc2VFeGNsdWRlQ291bnRyaWVzID0gdGhpcy5vcHRpb25zLmV4Y2x1ZGVDb3VudHJpZXMubWFwKGZ1bmN0aW9uKGNvdW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY291bnRyeS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cmllcyA9IGFsbENvdW50cmllcy5maWx0ZXIoZnVuY3Rpb24oY291bnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb3dlckNhc2VFeGNsdWRlQ291bnRyaWVzLmluZGV4T2YoY291bnRyeS5pc28yKSA9PT0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRyaWVzID0gYWxsQ291bnRyaWVzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfdHJhbnNsYXRlQ291bnRyaWVzQnlMb2NhbGVcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3RyYW5zbGF0ZUNvdW50cmllc0J5TG9jYWxlKCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY291bnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNvID0gdGhpcy5jb3VudHJpZXNbaV0uaXNvMi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhbGl6ZWRDb3VudHJpZXMuaGFzT3duUHJvcGVydHkoaXNvKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRyaWVzW2ldLm5hbWUgPSB0aGlzLm9wdGlvbnMubG9jYWxpemVkQ291bnRyaWVzW2lzb107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9jb3VudHJ5TmFtZVNvcnRcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2NvdW50cnlOYW1lU29ydChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3Byb2Nlc3NDb3VudHJ5Q29kZXNcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3Byb2Nlc3NDb3VudHJ5Q29kZXMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbENvZGVNYXhMZW4gPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlDb2RlcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAvLyBmaXJzdDogYWRkIGRpYWwgY29kZXNcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvdW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSB0aGlzLmNvdW50cmllc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZENvdW50cnlDb2RlKGMuaXNvMiwgYy5kaWFsQ29kZSwgYy5wcmlvcml0eSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gbmV4dDogYWRkIGFyZWEgY29kZXNcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhIHNlY29uZCBsb29wIG92ZXIgY291bnRyaWVzLCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhbGwgb2YgdGhlIFwicm9vdFwiIGNvdW50cmllc1xuICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGluIHRoZSBtYXAsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVtLCBhcyBlYWNoIHRpbWUgd2UgYWRkIGFuIGFyZWEgY29kZSBzdWJzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIG1hcCwgd2UgYWxzbyBuZWVkIHRvIGluY2x1ZGUgdGhlIFwicm9vdFwiIGNvdW50cnkncyBjb2RlLCBhcyB0aGF0IGFsc28gbWF0Y2hlc1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdGhpcy5jb3VudHJpZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2MgPSB0aGlzLmNvdW50cmllc1tfaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhcmVhIGNvZGVzXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2MuYXJlYUNvZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvb3RDb3VudHJ5Q29kZSA9IHRoaXMuY291bnRyeUNvZGVzW19jLmRpYWxDb2RlXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZWFjaCBhcmVhIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IF9jLmFyZWFDb2Rlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJlYUNvZGUgPSBfYy5hcmVhQ29kZXNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlYWNoIGRpZ2l0IGluIHRoZSBhcmVhIGNvZGUgdG8gYWRkIGFsbCBwYXJ0aWFsIG1hdGNoZXMgYXMgd2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMTsgayA8IGFyZWFDb2RlLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFydGlhbERpYWxDb2RlID0gX2MuZGlhbENvZGUgKyBhcmVhQ29kZS5zdWJzdHIoMCwgayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFydCB3aXRoIHRoZSByb290IGNvdW50cnksIGFzIHRoYXQgYWxzbyBtYXRjaGVzIHRoaXMgZGlhbCBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRDb3VudHJ5Q29kZShyb290Q291bnRyeUNvZGUsIHBhcnRpYWxEaWFsQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRDb3VudHJ5Q29kZShfYy5pc28yLCBwYXJ0aWFsRGlhbENvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgZnVsbCBhcmVhIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkQ291bnRyeUNvZGUoX2MuaXNvMiwgX2MuZGlhbENvZGUgKyBhcmVhQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfcHJvY2Vzc1ByZWZlcnJlZENvdW50cmllc1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcHJvY2Vzc1ByZWZlcnJlZENvdW50cmllcygpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRDb3VudHJpZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMucHJlZmVycmVkQ291bnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnRyeUNvZGUgPSB0aGlzLm9wdGlvbnMucHJlZmVycmVkQ291bnRyaWVzW2ldLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnRyeURhdGEgPSB0aGlzLl9nZXRDb3VudHJ5RGF0YShjb3VudHJ5Q29kZSwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50cnlEYXRhKSB0aGlzLnByZWZlcnJlZENvdW50cmllcy5wdXNoKGNvdW50cnlEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2NyZWF0ZUVsXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9jcmVhdGVFbChuYW1lLCBhdHRycywgY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRycykgZm9yRWFjaFByb3AoYXR0cnMsIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyKSBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWwpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfZ2VuZXJhdGVNYXJrdXBcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2dlbmVyYXRlTWFya3VwKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBhdXRvY29tcGxldGUgZG9lcyBub3QgZXhpc3Qgb24gdGhlIGVsZW1lbnQgYW5kIGl0cyBmb3JtLCB0aGVuXG4gICAgICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgYXV0b2NvbXBsZXRlIGFzIHRoZXJlJ3Mgbm8gc2FmZSwgY3Jvc3MtYnJvd3NlciBldmVudCB3ZSBjYW4gcmVhY3QgdG8sIHNvIGl0IGNhblxuICAgICAgICAgICAgICAgICAgICAvLyBlYXNpbHkgcHV0IHRoZSBwbHVnaW4gaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGUuZy4gdGhlIHdyb25nIGZsYWcgc2VsZWN0ZWQgZm9yIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyBhdXRvY29tcGxldGVkIG51bWJlciwgd2hpY2ggb24gc3VibWl0IGNvdWxkIG1lYW4gd3JvbmcgbnVtYmVyIGlzIHNhdmVkIChlc3AgaW4gbmF0aW9uYWxNb2RlKVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGVsSW5wdXQuaGFzQXR0cmlidXRlKFwiYXV0b2NvbXBsZXRlXCIpICYmICEodGhpcy50ZWxJbnB1dC5mb3JtICYmIHRoaXMudGVsSW5wdXQuZm9ybS5oYXNBdHRyaWJ1dGUoXCJhdXRvY29tcGxldGVcIikpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LnNldEF0dHJpYnV0ZShcImF1dG9jb21wbGV0ZVwiLCBcIm9mZlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBjb250YWluZXJzIChtb3N0bHkgZm9yIHBvc2l0aW9uaW5nKVxuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50Q2xhc3MgPSBcIml0aVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFsbG93RHJvcGRvd24pIHBhcmVudENsYXNzICs9IFwiIGl0aS0tYWxsb3ctZHJvcGRvd25cIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZXBhcmF0ZURpYWxDb2RlKSBwYXJlbnRDbGFzcyArPSBcIiBpdGktLXNlcGFyYXRlLWRpYWwtY29kZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmN1c3RvbUNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q2xhc3MgKz0gXCIgXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDbGFzcyArPSB0aGlzLm9wdGlvbnMuY3VzdG9tQ29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gdGhpcy5fY3JlYXRlRWwoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiOiBwYXJlbnRDbGFzc1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLCB0aGlzLnRlbElucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mbGFnc0NvbnRhaW5lciA9IHRoaXMuX2NyZWF0ZUVsKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIjogXCJpdGlfX2ZsYWctY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHBlcik7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy50ZWxJbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGZsYWcgKGRpc3BsYXllZCB0byBsZWZ0IG9mIGlucHV0KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxhZyA9IHRoaXMuX2NyZWF0ZUVsKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIjogXCJpdGlfX3NlbGVjdGVkLWZsYWdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IFwiY29tYm9ib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1vd25zXCI6IFwiY291bnRyeS1saXN0Ym94XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogXCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuZmxhZ3NDb250YWluZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxhZ0lubmVyID0gdGhpcy5fY3JlYXRlRWwoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiOiBcIml0aV9fZmxhZ1wiXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuc2VsZWN0ZWRGbGFnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZXBhcmF0ZURpYWxDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGlhbENvZGUgPSB0aGlzLl9jcmVhdGVFbChcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiOiBcIml0aV9fc2VsZWN0ZWQtZGlhbC1jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuc2VsZWN0ZWRGbGFnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFsbG93RHJvcGRvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2UgZWxlbWVudCBmb2N1c2FibGUgYW5kIHRhYiBuYXZpZ2FibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIFwiMFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25BcnJvdyA9IHRoaXMuX2NyZWF0ZUVsKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCI6IFwiaXRpX19hcnJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLnNlbGVjdGVkRmxhZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3VudHJ5IGRyb3Bkb3duOiBwcmVmZXJyZWQgY291bnRyaWVzLCB0aGVuIGRpdmlkZXIsIHRoZW4gYWxsIGNvdW50cmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudHJ5TGlzdCA9IHRoaXMuX2NyZWF0ZUVsKFwidWxcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIjogXCJpdGlfX2NvdW50cnktbGlzdCBpdGlfX2hpZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJjb3VudHJ5LWxpc3Rib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlOiBcImxpc3Rib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVmZXJyZWRDb3VudHJpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kTGlzdEl0ZW1zKHRoaXMucHJlZmVycmVkQ291bnRyaWVzLCBcIml0aV9fcHJlZmVycmVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUVsKFwibGlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCI6IFwiaXRpX19kaXZpZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IFwic2VwYXJhdG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBcInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuY291bnRyeUxpc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kTGlzdEl0ZW1zKHRoaXMuY291bnRyaWVzLCBcIml0aV9fc3RhbmRhcmRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgZHJvcGRvd25Db250YWluZXIgbWFya3VwXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRyb3Bkb3duQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93biA9IHRoaXMuX2NyZWF0ZUVsKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiOiBcIml0aSBpdGktLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5hcHBlbmRDaGlsZCh0aGlzLmNvdW50cnlMaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mbGFnc0NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmNvdW50cnlMaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhpZGRlbklucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGlkZGVuSW5wdXROYW1lID0gdGhpcy5vcHRpb25zLmhpZGRlbklucHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSB0aGlzLnRlbElucHV0LmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gbmFtZS5sYXN0SW5kZXhPZihcIltcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgaW5wdXQgbmFtZSBjb250YWlucyBzcXVhcmUgYnJhY2tldHMsIHRoZW4gZ2l2ZSB0aGUgaGlkZGVuIGlucHV0IHRoZSBzYW1lIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVwbGFjaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgbGFzdCBzZXQgb2YgYnJhY2tldHMgd2l0aCB0aGUgZ2l2ZW4gaGlkZGVuSW5wdXQgbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICE9PSAtMSkgaGlkZGVuSW5wdXROYW1lID0gXCJcIi5jb25jYXQobmFtZS5zdWJzdHIoMCwgaSksIFwiW1wiKS5jb25jYXQoaGlkZGVuSW5wdXROYW1lLCBcIl1cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGRlbklucHV0ID0gdGhpcy5fY3JlYXRlRWwoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBoaWRkZW5JbnB1dE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLmhpZGRlbklucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2FwcGVuZExpc3RJdGVtc1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfYXBwZW5kTGlzdEl0ZW1zKGNvdW50cmllcywgY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGNyZWF0ZSBzbyBtYW55IERPTSBlbGVtZW50cywgaXQgaXMgZmFzdGVyIHRvIGJ1aWxkIGEgdGVtcCBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZW4gYWRkIGV2ZXJ5dGhpbmcgdG8gdGhlIERPTSBpbiBvbmUgZ28gYXQgdGhlIGVuZFxuICAgICAgICAgICAgICAgICAgICB2YXIgdG1wID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggY291bnRyeVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBjb3VudHJpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvcGVuIHRoZSBsaXN0IGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcCArPSBcIjxsaSBjbGFzcz0naXRpX19jb3VudHJ5IFwiLmNvbmNhdChjbGFzc05hbWUsIFwiJyB0YWJJbmRleD0nLTEnIGlkPSdpdGktaXRlbS1cIikuY29uY2F0KGMuaXNvMiwgXCInIHJvbGU9J29wdGlvbicgZGF0YS1kaWFsLWNvZGU9J1wiKS5jb25jYXQoYy5kaWFsQ29kZSwgXCInIGRhdGEtY291bnRyeS1jb2RlPSdcIikuY29uY2F0KGMuaXNvMiwgXCInPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgZmxhZ1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wICs9IFwiPGRpdiBjbGFzcz0naXRpX19mbGFnLWJveCc+PGRpdiBjbGFzcz0naXRpX19mbGFnIGl0aV9fXCIuY29uY2F0KGMuaXNvMiwgXCInPjwvZGl2PjwvZGl2PlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY291bnRyeSBuYW1lIGFuZCBkaWFsIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcCArPSBcIjxzcGFuIGNsYXNzPSdpdGlfX2NvdW50cnktbmFtZSc+XCIuY29uY2F0KGMubmFtZSwgXCI8L3NwYW4+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wICs9IFwiPHNwYW4gY2xhc3M9J2l0aV9fZGlhbC1jb2RlJz4rXCIuY29uY2F0KGMuZGlhbENvZGUsIFwiPC9zcGFuPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBsaXN0IGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcCArPSBcIjwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudHJ5TGlzdC5pbnNlcnRBZGphY2VudEhUTUwoXCJiZWZvcmVlbmRcIiwgdG1wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9zZXRJbml0aWFsU3RhdGVcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3NldEluaXRpYWxTdGF0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMudGVsSW5wdXQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkaWFsQ29kZSA9IHRoaXMuX2dldERpYWxDb2RlKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1JlZ2lvbmxlc3NOYW5wID0gdGhpcy5faXNSZWdpb25sZXNzTmFucCh2YWwpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMkb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgaW5pdGlhbENvdW50cnkgPSBfdGhpcyRvcHRpb25zLmluaXRpYWxDb3VudHJ5LCBuYXRpb25hbE1vZGUgPSBfdGhpcyRvcHRpb25zLm5hdGlvbmFsTW9kZSwgYXV0b0hpZGVEaWFsQ29kZSA9IF90aGlzJG9wdGlvbnMuYXV0b0hpZGVEaWFsQ29kZSwgc2VwYXJhdGVEaWFsQ29kZSA9IF90aGlzJG9wdGlvbnMuc2VwYXJhdGVEaWFsQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgYWxyZWFkeSBoYXZlIGEgZGlhbCBjb2RlLCBhbmQgaXQncyBub3QgYSByZWdpb25sZXNzTmFucCwgd2UgY2FuIGdvIGFoZWFkIGFuZCBzZXQgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsYWcsIGVsc2UgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGNvdW50cnlcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRpYWxDb2RlICYmICFpc1JlZ2lvbmxlc3NOYW5wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVGbGFnRnJvbU51bWJlcih2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluaXRpYWxDb3VudHJ5ICE9PSBcImF1dG9cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VlIGlmIHdlIHNob3VsZCBzZWxlY3QgYSBmbGFnXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbENvdW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRGbGFnKGluaXRpYWxDb3VudHJ5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlhbENvZGUgJiYgaXNSZWdpb25sZXNzTmFucCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXMgaW50bCBkaWFsIGNvZGUsIGlzIHJlZ2lvbmxlc3MgbmFucCwgYW5kIG5vIGluaXRpYWxDb3VudHJ5LCBzbyBkZWZhdWx0IHRvIFVTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEZsYWcoXCJ1c1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBkaWFsIGNvZGUgYW5kIG5vIGluaXRpYWxDb3VudHJ5LCBzbyBkZWZhdWx0IHRvIGZpcnN0IGluIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q291bnRyeSA9IHRoaXMucHJlZmVycmVkQ291bnRyaWVzLmxlbmd0aCA/IHRoaXMucHJlZmVycmVkQ291bnRyaWVzWzBdLmlzbzIgOiB0aGlzLmNvdW50cmllc1swXS5pc28yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0RmxhZyh0aGlzLmRlZmF1bHRDb3VudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGVtcHR5IGFuZCBubyBuYXRpb25hbE1vZGUgYW5kIG5vIGF1dG9IaWRlRGlhbENvZGUgdGhlbiBpbnNlcnQgdGhlIGRlZmF1bHQgZGlhbCBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbCAmJiAhbmF0aW9uYWxNb2RlICYmICFhdXRvSGlkZURpYWxDb2RlICYmICFzZXBhcmF0ZURpYWxDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC52YWx1ZSA9IFwiK1wiLmNvbmNhdCh0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuZGlhbENvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGlmIGluaXRpYWxDb3VudHJ5IGlzIHNldCB0byBhdXRvLCB0aGF0IHdpbGwgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcm1hdCAtIG5vdGUgdGhpcyB3b250IGJlIHJ1biBhZnRlciBfdXBkYXRlRGlhbENvZGUgYXMgdGhhdCdzIG9ubHkgY2FsbGVkIGlmIG5vIHZhbFxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsKSB0aGlzLl91cGRhdGVWYWxGcm9tTnVtYmVyKHZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfaW5pdExpc3RlbmVyc1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5pdExpc3RlbmVycygpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdEtleUxpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9IaWRlRGlhbENvZGUpIHRoaXMuX2luaXRCbHVyTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dEcm9wZG93bikgdGhpcy5faW5pdERyb3Bkb3duTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhpZGRlbklucHV0KSB0aGlzLl9pbml0SGlkZGVuSW5wdXRMaXN0ZW5lcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2luaXRIaWRkZW5JbnB1dExpc3RlbmVyXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9pbml0SGlkZGVuSW5wdXRMaXN0ZW5lcigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUhpZGRlbklucHV0U3VibWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuaGlkZGVuSW5wdXQudmFsdWUgPSBfdGhpczMuZ2V0TnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRlbElucHV0LmZvcm0pIHRoaXMudGVsSW5wdXQuZm9ybS5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIHRoaXMuX2hhbmRsZUhpZGRlbklucHV0U3VibWl0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9nZXRDbG9zZXN0TGFiZWxcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2dldENsb3Nlc3RMYWJlbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsID0gdGhpcy50ZWxJbnB1dDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVsICYmIGVsLnRhZ05hbWUgIT09IFwiTEFCRUxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWwgPSBlbC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9pbml0RHJvcGRvd25MaXN0ZW5lcnNcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2luaXREcm9wZG93bkxpc3RlbmVycygpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIC8vIGhhY2sgZm9yIGlucHV0IG5lc3RlZCBpbnNpZGUgbGFiZWwgKHdoaWNoIGlzIHZhbGlkIG1hcmt1cCk6IGNsaWNraW5nIHRoZSBzZWxlY3RlZC1mbGFnIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vIG9wZW4gdGhlIGRyb3Bkb3duIHdvdWxkIHRoZW4gYXV0b21hdGljYWxseSB0cmlnZ2VyIGEgMm5kIGNsaWNrIG9uIHRoZSBpbnB1dCB3aGljaCB3b3VsZFxuICAgICAgICAgICAgICAgICAgICAvLyBjbG9zZSBpdCBhZ2FpblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVMYWJlbENsaWNrID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGRyb3Bkb3duIGlzIGNsb3NlZCwgdGhlbiBmb2N1cyB0aGUgaW5wdXQsIGVsc2UgaWdub3JlIHRoZSBjbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzNC5jb3VudHJ5TGlzdC5jbGFzc0xpc3QuY29udGFpbnMoXCJpdGlfX2hpZGVcIikpIF90aGlzNC50ZWxJbnB1dC5mb2N1cygpOyBlbHNlIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhYmVsID0gdGhpcy5fZ2V0Q2xvc2VzdExhYmVsKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYWJlbCkgbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX2hhbmRsZUxhYmVsQ2xpY2spO1xuICAgICAgICAgICAgICAgICAgICAvLyB0b2dnbGUgY291bnRyeSBkcm9wZG93biBvbiBjbGlja1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDbGlja1NlbGVjdGVkRmxhZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBpbnRlcmNlcHQgdGhpcyBldmVudCBpZiB3ZSdyZSBvcGVuaW5nIHRoZSBkcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSBsZXQgaXQgYnViYmxlIHVwIHRvIHRoZSB0b3AgKFwiY2xpY2stb2ZmLXRvLWNsb3NlXCIgbGlzdGVuZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjYW5ub3QganVzdCBzdG9wUHJvcGFnYXRpb24gYXMgaXQgbWF5IGJlIG5lZWRlZCB0byBjbG9zZSBhbm90aGVyIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM0LmNvdW50cnlMaXN0LmNsYXNzTGlzdC5jb250YWlucyhcIml0aV9faGlkZVwiKSAmJiAhX3RoaXM0LnRlbElucHV0LmRpc2FibGVkICYmICFfdGhpczQudGVsSW5wdXQucmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQuX3Nob3dEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxhZy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlQ2xpY2tTZWxlY3RlZEZsYWcpO1xuICAgICAgICAgICAgICAgICAgICAvLyBvcGVuIGRyb3Bkb3duIGxpc3QgaWYgY3VycmVudGx5IGZvY3VzZWRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlRmxhZ3NDb250YWluZXJLZXlkb3duID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzRHJvcGRvd25IaWRkZW4gPSBfdGhpczQuY291bnRyeUxpc3QuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaXRpX19oaWRlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRHJvcGRvd25IaWRkZW4gJiYgWyBcIkFycm93VXBcIiwgXCJVcFwiLCBcIkFycm93RG93blwiLCBcIkRvd25cIiwgXCIgXCIsIFwiRW50ZXJcIiBdLmluZGV4T2YoZS5rZXkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZm9ybSBmcm9tIGJlaW5nIHN1Ym1pdHRlZCBpZiBcIkVOVEVSXCIgd2FzIHByZXNzZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJldmVudCBldmVudCBmcm9tIGJlaW5nIGhhbmRsZWQgYWdhaW4gYnkgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5fc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGxvdyBuYXZpZ2F0aW9uIGZyb20gZHJvcGRvd24gdG8gaW5wdXQgb24gVEFCXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiVGFiXCIpIF90aGlzNC5fY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZsYWdzQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2hhbmRsZUZsYWdzQ29udGFpbmVyS2V5ZG93bik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfaW5pdFJlcXVlc3RzXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9pbml0UmVxdWVzdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIHRoZSBwYXRoIHRvIHRoZSB1dGlscyBzY3JpcHQsIGZldGNoIGl0IG9uIHdpbmRvdy5sb2FkLCBlbHNlIHJlc29sdmVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy51dGlsc1NjcmlwdCAmJiAhd2luZG93LmludGxUZWxJbnB1dFV0aWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcGx1Z2luIGlzIGJlaW5nIGluaXRpYWxpc2VkIGFmdGVyIHRoZSB3aW5kb3cubG9hZCBldmVudCBoYXMgYWxyZWFkeSBiZWVuIGZpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMud2luZG93TG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMubG9hZFV0aWxzKHRoaXMub3B0aW9ucy51dGlsc1NjcmlwdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGxvYWQgZXZlbnQgc28gd2UgZG9uJ3QgYmxvY2sgYW55IG90aGVyIHJlcXVlc3RzIGUuZy4gdGhlIGZsYWdzIGltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuaW50bFRlbElucHV0R2xvYmFscy5sb2FkVXRpbHMoX3RoaXM1Lm9wdGlvbnMudXRpbHNTY3JpcHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgdGhpcy5yZXNvbHZlVXRpbHNTY3JpcHRQcm9taXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW5pdGlhbENvdW50cnkgPT09IFwiYXV0b1wiKSB0aGlzLl9sb2FkQXV0b0NvdW50cnkoKTsgZWxzZSB0aGlzLnJlc29sdmVBdXRvQ291bnRyeVByb21pc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9sb2FkQXV0b0NvdW50cnlcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2xvYWRBdXRvQ291bnRyeSgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gMyBvcHRpb25zOlxuICAgICAgICAgICAgICAgICAgICAvLyAxKSBhbHJlYWR5IGxvYWRlZCAod2UncmUgZG9uZSlcbiAgICAgICAgICAgICAgICAgICAgLy8gMikgbm90IGFscmVhZHkgc3RhcnRlZCBsb2FkaW5nIChzdGFydClcbiAgICAgICAgICAgICAgICAgICAgLy8gMykgYWxyZWFkeSBzdGFydGVkIGxvYWRpbmcgKGRvIG5vdGhpbmcgLSBqdXN0IHdhaXQgZm9yIGxvYWRpbmcgY2FsbGJhY2sgdG8gZmlyZSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRsVGVsSW5wdXRHbG9iYWxzLmF1dG9Db3VudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUF1dG9Db3VudHJ5KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXdpbmRvdy5pbnRsVGVsSW5wdXRHbG9iYWxzLnN0YXJ0ZWRMb2FkaW5nQXV0b0NvdW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IGRvIHRoaXMgdHdpY2UhXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuaW50bFRlbElucHV0R2xvYmFscy5zdGFydGVkTG9hZGluZ0F1dG9Db3VudHJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmdlb0lwTG9va3VwID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuZ2VvSXBMb29rdXAoZnVuY3Rpb24oY291bnRyeUNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMuYXV0b0NvdW50cnkgPSBjb3VudHJ5Q29kZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZWxsIGFsbCBpbnN0YW5jZXMgdGhlIGF1dG8gY291bnRyeSBpcyByZWFkeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBqdXN0IGJlIHRoZSBjdXJyZW50IGluc3RhbmNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVUERBVEU6IHVzZSBzZXRUaW1lb3V0IGluIGNhc2UgdGhlaXIgZ2VvSXBMb29rdXAgZnVuY3Rpb24gY2FsbHMgdGhpcyBjYWxsYmFjayBzdHJhaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhd2F5IChlLmcuIGlmIHRoZXkgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIGdlbyBpcCBsb29rdXAgc29tZXdoZXJlIGVsc2UpLiBVc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXRUaW1lb3V0IG1lYW5zIHRoYXQgdGhlIGN1cnJlbnQgdGhyZWFkIG9mIGV4ZWN1dGlvbiB3aWxsIGZpbmlzaCBiZWZvcmUgZXhlY3V0aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMsIHdoaWNoIGFsbG93cyB0aGUgcGx1Z2luIHRvIGZpbmlzaCBpbml0aWFsaXNpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9yRWFjaEluc3RhbmNlKFwiaGFuZGxlQXV0b0NvdW50cnlcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9yRWFjaEluc3RhbmNlKFwicmVqZWN0QXV0b0NvdW50cnlQcm9taXNlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfaW5pdEtleUxpc3RlbmVyc1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5pdEtleUxpc3RlbmVycygpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBmbGFnIG9uIGtleXVwXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUtleXVwRXZlbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczYuX3VwZGF0ZUZsYWdGcm9tTnVtYmVyKF90aGlzNi50ZWxJbnB1dC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuX3RyaWdnZXJDb3VudHJ5Q2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHRoaXMuX2hhbmRsZUtleXVwRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgZmxhZyBvbiBjdXQvcGFzdGUgZXZlbnRzIChub3cgc3VwcG9ydGVkIGluIGFsbCBtYWpvciBicm93c2VycylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2xpcGJvYXJkRXZlbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhY2sgYmVjYXVzZSBcInBhc3RlXCIgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIGlucHV0IGlzIHVwZGF0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoX3RoaXM2Ll9oYW5kbGVLZXl1cEV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY3V0XCIsIHRoaXMuX2hhbmRsZUNsaXBib2FyZEV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwicGFzdGVcIiwgdGhpcy5faGFuZGxlQ2xpcGJvYXJkRXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2NhcFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfY2FwKG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ID0gdGhpcy50ZWxJbnB1dC5nZXRBdHRyaWJ1dGUoXCJtYXhsZW5ndGhcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXggJiYgbnVtYmVyLmxlbmd0aCA+IG1heCA/IG51bWJlci5zdWJzdHIoMCwgbWF4KSA6IG51bWJlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9pbml0Qmx1ckxpc3RlbmVyc1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5pdEJsdXJMaXN0ZW5lcnMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczcgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAvLyBvbiBibHVyIG9yIGZvcm0gc3VibWl0OiBpZiBqdXN0IGEgZGlhbCBjb2RlIHRoZW4gcmVtb3ZlIGl0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZVN1Ym1pdE9yQmx1ckV2ZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpczcuX3JlbW92ZUVtcHR5RGlhbENvZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGVsSW5wdXQuZm9ybSkgdGhpcy50ZWxJbnB1dC5mb3JtLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgdGhpcy5faGFuZGxlU3VibWl0T3JCbHVyRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIHRoaXMuX2hhbmRsZVN1Ym1pdE9yQmx1ckV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9yZW1vdmVFbXB0eURpYWxDb2RlXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9yZW1vdmVFbXB0eURpYWxDb2RlKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50ZWxJbnB1dC52YWx1ZS5jaGFyQXQoMCkgPT09IFwiK1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtZXJpYyA9IHRoaXMuX2dldE51bWVyaWModGhpcy50ZWxJbnB1dC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBqdXN0IGEgcGx1cywgb3IgaWYganVzdCBhIGRpYWwgY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFudW1lcmljIHx8IHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5kaWFsQ29kZSA9PT0gbnVtZXJpYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfZ2V0TnVtZXJpY1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0TnVtZXJpYyhzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl90cmlnZ2VyXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF90cmlnZ2VyKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSB0byB1c2Ugb2xkIHNjaG9vbCBkb2N1bWVudC5jcmVhdGVFdmVudCBhcyBJRTExIGRvZXNuJ3Qgc3VwcG9ydCBgbmV3IEV2ZW50KClgIHN5bnRheFxuICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgICAgICAgICAgICAgICAgIGUuaW5pdEV2ZW50KG5hbWUsIHRydWUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAvLyBjYW4gYnViYmxlLCBhbmQgaXMgY2FuY2VsbGFibGVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5kaXNwYXRjaEV2ZW50KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3Nob3dEcm9wZG93blwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc2hvd0Ryb3Bkb3duKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlMaXN0LmNsYXNzTGlzdC5yZW1vdmUoXCJpdGlfX2hpZGVcIik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgXCJ0cnVlXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXREcm9wZG93blBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBoaWdobGlnaHRpbmcgYW5kIHNjcm9sbCB0byBhY3RpdmUgbGlzdCBpdGVtXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodExpc3RJdGVtKHRoaXMuYWN0aXZlSXRlbSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG8odGhpcy5hY3RpdmVJdGVtLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBiaW5kIGFsbCB0aGUgZHJvcGRvd24tcmVsYXRlZCBsaXN0ZW5lcnM6IG1vdXNlb3ZlciwgY2xpY2ssIGNsaWNrLW9mZiwga2V5ZG93blxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9iaW5kRHJvcGRvd25MaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBhcnJvd1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duQXJyb3cuY2xhc3NMaXN0LmFkZChcIml0aV9fYXJyb3ctLXVwXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyKFwib3Blbjpjb3VudHJ5ZHJvcGRvd25cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfdG9nZ2xlQ2xhc3NcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3RvZ2dsZUNsYXNzKGVsLCBjbGFzc05hbWUsIHNob3VsZEhhdmVDbGFzcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkSGF2ZUNsYXNzICYmICFlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkgZWwuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpOyBlbHNlIGlmICghc2hvdWxkSGF2ZUNsYXNzICYmIGVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSBlbC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfc2V0RHJvcGRvd25Qb3NpdGlvblwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0RHJvcGRvd25Qb3NpdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzOCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZHJvcGRvd25Db250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kcm9wZG93bkNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmRyb3Bkb3duKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3MgPSB0aGlzLnRlbElucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2luZG93VG9wIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE0Mzg0MDkxLzIxNzg2NlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpbmRvd1RvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0VG9wID0gcG9zLnRvcCArIHdpbmRvd1RvcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcm9wZG93bkhlaWdodCA9IHRoaXMuY291bnRyeUxpc3Qub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJvcGRvd25GaXRzQmVsb3cgPSAoZHJvcGRvd25Cb3R0b20gPCB3aW5kb3dCb3R0b20pXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHJvcGRvd25GaXRzQmVsb3cgPSBpbnB1dFRvcCArIHRoaXMudGVsSW5wdXQub2Zmc2V0SGVpZ2h0ICsgZHJvcGRvd25IZWlnaHQgPCB3aW5kb3dUb3AgKyB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHJvcGRvd25GaXRzQWJvdmUgPSBpbnB1dFRvcCAtIGRyb3Bkb3duSGVpZ2h0ID4gd2luZG93VG9wO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgZGVmYXVsdCwgdGhlIGRyb3Bkb3duIHdpbGwgYmUgYmVsb3cgdGhlIGlucHV0LiBJZiB3ZSB3YW50IHRvIHBvc2l0aW9uIGl0IGFib3ZlIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5wdXQsIHdlIGFkZCB0aGUgZHJvcHVwIGNsYXNzLlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy5jb3VudHJ5TGlzdCwgXCJpdGlfX2NvdW50cnktbGlzdC0tZHJvcHVwXCIsICFkcm9wZG93bkZpdHNCZWxvdyAmJiBkcm9wZG93bkZpdHNBYm92ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBkcm9wZG93bkNvbnRhaW5lciBpcyBlbmFibGVkLCBjYWxjdWxhdGUgcG9zdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kcm9wZG93bkNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IGRlZmF1bHQgdGhlIGRyb3Bkb3duIHdpbGwgYmUgZGlyZWN0bHkgb3ZlciB0aGUgaW5wdXQgYmVjYXVzZSBpdCdzIG5vdCBpbiB0aGUgZmxvdy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSB3YW50IHRvIHBvc2l0aW9uIGl0IGJlbG93LCB3ZSBuZWVkIHRvIGFkZCBzb21lIGV4dHJhIHRvcCB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0cmFUb3AgPSAhZHJvcGRvd25GaXRzQmVsb3cgJiYgZHJvcGRvd25GaXRzQWJvdmUgPyAwIDogdGhpcy50ZWxJbnB1dC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHBsYWNlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uc3R5bGUudG9wID0gXCJcIi5jb25jYXQoaW5wdXRUb3AgKyBleHRyYVRvcCwgXCJweFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duLnN0eWxlLmxlZnQgPSBcIlwiLmNvbmNhdChwb3MubGVmdCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCwgXCJweFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9zZSBtZW51IG9uIHdpbmRvdyBzY3JvbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVXaW5kb3dTY3JvbGwgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzOC5fY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5faGFuZGxlV2luZG93U2Nyb2xsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2dldENsb3Nlc3RMaXN0SXRlbVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0Q2xvc2VzdExpc3RJdGVtKHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZWwgPSB0YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChlbCAmJiBlbCAhPT0gdGhpcy5jb3VudHJ5TGlzdCAmJiAhZWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaXRpX19jb3VudHJ5XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbCA9IGVsLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgcmVhY2hlZCB0aGUgY291bnRyeUxpc3QgZWxlbWVudCwgdGhlbiByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWwgPT09IHRoaXMuY291bnRyeUxpc3QgPyBudWxsIDogZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfYmluZERyb3Bkb3duTGlzdGVuZXJzXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9iaW5kRHJvcGRvd25MaXN0ZW5lcnMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczkgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIG1vdXNlIG92ZXIgYSBsaXN0IGl0ZW0sIGp1c3QgaGlnaGxpZ2h0IHRoYXQgb25lXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGFkZCB0aGUgY2xhc3MgXCJoaWdobGlnaHRcIiwgc28gaWYgdGhleSBoaXQgXCJlbnRlclwiIHdlIGtub3cgd2hpY2ggb25lIHRvIHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVNb3VzZW92ZXJDb3VudHJ5TGlzdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBldmVudCBkZWxlZ2F0aW9uLCBhcyB3ZSdyZSBsaXN0ZW5pbmcgZm9yIHRoaXMgZXZlbnQgb24gdGhlIGNvdW50cnlMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdEl0ZW0gPSBfdGhpczkuX2dldENsb3Nlc3RMaXN0SXRlbShlLnRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW0pIF90aGlzOS5faGlnaGxpZ2h0TGlzdEl0ZW0obGlzdEl0ZW0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudHJ5TGlzdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdmVyXCIsIHRoaXMuX2hhbmRsZU1vdXNlb3ZlckNvdW50cnlMaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gbGlzdGVuIGZvciBjb3VudHJ5IHNlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDbGlja0NvdW50cnlMaXN0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3RJdGVtID0gX3RoaXM5Ll9nZXRDbG9zZXN0TGlzdEl0ZW0oZS50YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RJdGVtKSBfdGhpczkuX3NlbGVjdExpc3RJdGVtKGxpc3RJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudHJ5TGlzdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlQ2xpY2tDb3VudHJ5TGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNsaWNrIG9mZiB0byBjbG9zZVxuICAgICAgICAgICAgICAgICAgICAvLyAoZXhjZXB0IHdoZW4gdGhpcyBpbml0aWFsIG9wZW5pbmcgY2xpY2sgaXMgYnViYmxpbmcgdXApXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGNhbm5vdCBqdXN0IHN0b3BQcm9wYWdhdGlvbiBhcyBpdCBtYXkgYmUgbmVlZGVkIHRvIGNsb3NlIGFub3RoZXIgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzT3BlbmluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNsaWNrT2ZmVG9DbG9zZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09wZW5pbmcpIF90aGlzOS5fY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNPcGVuaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlQ2xpY2tPZmZUb0Nsb3NlKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gbGlzdGVuIGZvciB1cC9kb3duIHNjcm9sbGluZywgZW50ZXIgdG8gc2VsZWN0LCBvciBsZXR0ZXJzIHRvIGp1bXAgdG8gY291bnRyeSBuYW1lLlxuICAgICAgICAgICAgICAgICAgICAvLyB1c2Uga2V5ZG93biBhcyBrZXlwcmVzcyBkb2Vzbid0IGZpcmUgZm9yIG5vbi1jaGFyIGtleXMgYW5kIHdlIHdhbnQgdG8gY2F0Y2ggaWYgdGhleVxuICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGhpdCBkb3duIGFuZCBob2xkIGl0IHRvIHNjcm9sbCBkb3duIChubyBrZXl1cCBldmVudCkuXG4gICAgICAgICAgICAgICAgICAgIC8vIGxpc3RlbiBvbiB0aGUgZG9jdW1lbnQgYmVjYXVzZSB0aGF0J3Mgd2hlcmUga2V5IGV2ZW50cyBhcmUgdHJpZ2dlcmVkIGlmIG5vIGlucHV0IGhhcyBmb2N1c1xuICAgICAgICAgICAgICAgICAgICB2YXIgcXVlcnkgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcXVlcnlUaW1lciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUtleWRvd25PbkRyb3Bkb3duID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJldmVudCBkb3duIGtleSBmcm9tIHNjcm9sbGluZyB0aGUgd2hvbGUgcGFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBlbnRlciBrZXkgZnJvbSBzdWJtaXR0aW5nIGEgZm9ybSBldGNcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVwIGFuZCBkb3duIHRvIG5hdmlnYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiQXJyb3dVcFwiIHx8IGUua2V5ID09PSBcIlVwXCIgfHwgZS5rZXkgPT09IFwiQXJyb3dEb3duXCIgfHwgZS5rZXkgPT09IFwiRG93blwiKSBfdGhpczkuX2hhbmRsZVVwRG93bktleShlLmtleSk7IGVsc2UgaWYgKGUua2V5ID09PSBcIkVudGVyXCIpIF90aGlzOS5faGFuZGxlRW50ZXJLZXkoKTsgZWxzZSBpZiAoZS5rZXkgPT09IFwiRXNjYXBlXCIpIF90aGlzOS5fY2xvc2VEcm9wZG93bigpOyBlbHNlIGlmICgvXlthLXpBLVrDgC3Dv9CwLdGP0JAt0K8gXSQvLnRlc3QoZS5rZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVtcCB0byBjb3VudHJpZXMgdGhhdCBzdGFydCB3aXRoIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnlUaW1lcikgY2xlYXJUaW1lb3V0KHF1ZXJ5VGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ICs9IGUua2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM5Ll9zZWFyY2hGb3JDb3VudHJ5KHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdGltZXIgaGl0cyAxIHNlY29uZCwgcmVzZXQgdGhlIHF1ZXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxZTMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLl9oYW5kbGVLZXlkb3duT25Ecm9wZG93bik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfaGFuZGxlVXBEb3duS2V5XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9oYW5kbGVVcERvd25LZXkoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0ga2V5ID09PSBcIkFycm93VXBcIiB8fCBrZXkgPT09IFwiVXBcIiA/IHRoaXMuaGlnaGxpZ2h0ZWRJdGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgOiB0aGlzLmhpZ2hsaWdodGVkSXRlbS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBza2lwIHRoZSBkaXZpZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dC5jbGFzc0xpc3QuY29udGFpbnMoXCJpdGlfX2RpdmlkZXJcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0ga2V5ID09PSBcIkFycm93VXBcIiB8fCBrZXkgPT09IFwiVXBcIiA/IG5leHQucHJldmlvdXNFbGVtZW50U2libGluZyA6IG5leHQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0TGlzdEl0ZW0obmV4dCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9oYW5kbGVFbnRlcktleVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaGFuZGxlRW50ZXJLZXkoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodGVkSXRlbSkgdGhpcy5fc2VsZWN0TGlzdEl0ZW0odGhpcy5oaWdobGlnaHRlZEl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3NlYXJjaEZvckNvdW50cnlcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3NlYXJjaEZvckNvdW50cnkocXVlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvdW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXJ0c1dpdGgodGhpcy5jb3VudHJpZXNbaV0ubmFtZSwgcXVlcnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3RJdGVtID0gdGhpcy5jb3VudHJ5TGlzdC5xdWVyeVNlbGVjdG9yKFwiI2l0aS1pdGVtLVwiLmNvbmNhdCh0aGlzLmNvdW50cmllc1tpXS5pc28yKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIGhpZ2hsaWdodGluZyBhbmQgc2Nyb2xsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0TGlzdEl0ZW0obGlzdEl0ZW0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY3JvbGxUbyhsaXN0SXRlbSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9zdGFydHNXaXRoXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9zdGFydHNXaXRoKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuc3Vic3RyKDAsIGIubGVuZ3RoKS50b0xvd2VyQ2FzZSgpID09PSBiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3VwZGF0ZVZhbEZyb21OdW1iZXJcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3VwZGF0ZVZhbEZyb21OdW1iZXIob3JpZ2luYWxOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bWJlciA9IG9yaWdpbmFsTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZvcm1hdE9uRGlzcGxheSAmJiB3aW5kb3cuaW50bFRlbElucHV0VXRpbHMgJiYgdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXNlTmF0aW9uYWwgPSAhdGhpcy5vcHRpb25zLnNlcGFyYXRlRGlhbENvZGUgJiYgKHRoaXMub3B0aW9ucy5uYXRpb25hbE1vZGUgfHwgbnVtYmVyLmNoYXJBdCgwKSAhPT0gXCIrXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pbnRsVGVsSW5wdXRVdGlscyRudSA9IGludGxUZWxJbnB1dFV0aWxzLm51bWJlckZvcm1hdCwgTkFUSU9OQUwgPSBfaW50bFRlbElucHV0VXRpbHMkbnUuTkFUSU9OQUwsIElOVEVSTkFUSU9OQUwgPSBfaW50bFRlbElucHV0VXRpbHMkbnUuSU5URVJOQVRJT05BTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtYXQgPSB1c2VOYXRpb25hbCA/IE5BVElPTkFMIDogSU5URVJOQVRJT05BTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciA9IGludGxUZWxJbnB1dFV0aWxzLmZvcm1hdE51bWJlcihudW1iZXIsIHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5pc28yLCBmb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG51bWJlciA9IHRoaXMuX2JlZm9yZVNldE51bWJlcihudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LnZhbHVlID0gbnVtYmVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX3VwZGF0ZUZsYWdGcm9tTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF91cGRhdGVGbGFnRnJvbU51bWJlcihvcmlnaW5hbE51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBpbiBuYXRpb25hbE1vZGUgYW5kIHdlIGFscmVhZHkgaGF2ZSBVUy9DYW5hZGEgc2VsZWN0ZWQsIG1ha2Ugc3VyZSB0aGUgbnVtYmVyIHN0YXJ0c1xuICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGEgKzEgc28gX2dldERpYWxDb2RlIHdpbGwgYmUgYWJsZSB0byBleHRyYWN0IHRoZSBhcmVhIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlOiBpZiB3ZSBkb250IHlldCBoYXZlIHNlbGVjdGVkQ291bnRyeURhdGEsIGJ1dCB3ZSdyZSBoZXJlICh0cnlpbmcgdG8gdXBkYXRlIHRoZSBmbGFnXG4gICAgICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIG51bWJlciksIHRoYXQgbWVhbnMgd2UncmUgaW5pdGlhbGlzaW5nIHRoZSBwbHVnaW4gd2l0aCBhIG51bWJlciB0aGF0IGFscmVhZHkgaGFzIGFcbiAgICAgICAgICAgICAgICAgICAgLy8gZGlhbCBjb2RlLCBzbyBmaW5lIHRvIGlnbm9yZSB0aGlzIGJpdFxuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtYmVyID0gb3JpZ2luYWxOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZERpYWxDb2RlID0gdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmRpYWxDb2RlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNOYW5wID0gc2VsZWN0ZWREaWFsQ29kZSA9PT0gXCIxXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIgJiYgdGhpcy5vcHRpb25zLm5hdGlvbmFsTW9kZSAmJiBpc05hbnAgJiYgbnVtYmVyLmNoYXJBdCgwKSAhPT0gXCIrXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIuY2hhckF0KDApICE9PSBcIjFcIikgbnVtYmVyID0gXCIxXCIuY29uY2F0KG51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBcIitcIi5jb25jYXQobnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgZmxhZyBpZiB1c2VyIHR5cGVzIGFyZWEgY29kZSBmb3IgYW5vdGhlciBjb3VudHJ5XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VwYXJhdGVEaWFsQ29kZSAmJiBzZWxlY3RlZERpYWxDb2RlICYmIG51bWJlci5jaGFyQXQoMCkgIT09IFwiK1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBcIitcIi5jb25jYXQoc2VsZWN0ZWREaWFsQ29kZSkuY29uY2F0KG51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IGFuZCBleHRyYWN0IHZhbGlkIGRpYWwgY29kZSBmcm9tIGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHZhciBkaWFsQ29kZSA9IHRoaXMuX2dldERpYWxDb2RlKG51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBudW1lcmljID0gdGhpcy5fZ2V0TnVtZXJpYyhudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY291bnRyeUNvZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGlhbENvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudHJ5Q29kZXMgPSB0aGlzLmNvdW50cnlDb2Rlc1t0aGlzLl9nZXROdW1lcmljKGRpYWxDb2RlKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgcmlnaHQgY291bnRyeSBpcyBhbHJlYWR5IHNlbGVjdGVkLiB0aGlzIHNob3VsZCBiZSBmYWxzZSBpZiB0aGUgbnVtYmVyIGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb25nZXIgdGhhbiB0aGUgbWF0Y2hlZCBkaWFsIGNvZGUgYmVjYXVzZSBpbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpZlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlcmUgYXJlIG11bHRpcGxlIGNvdW50cnkgbWF0Y2hlcywgdGhhdCB0aGUgZmlyc3Qgb25lIGlzIHNlbGVjdGVkIChub3RlOiB3ZSBjb3VsZFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBjaGVjayB0aGF0IGhlcmUsIGJ1dCBpdCByZXF1aXJlcyB0aGUgc2FtZSBsb29wIHRoYXQgd2UgYWxyZWFkeSBoYXZlIGxhdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFscmVhZHlTZWxlY3RlZCA9IGNvdW50cnlDb2Rlcy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5pc28yKSAhPT0gLTEgJiYgbnVtZXJpYy5sZW5ndGggPD0gZGlhbENvZGUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1JlZ2lvbmxlc3NOYW5wTnVtYmVyID0gc2VsZWN0ZWREaWFsQ29kZSA9PT0gXCIxXCIgJiYgdGhpcy5faXNSZWdpb25sZXNzTmFucChudW1lcmljKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgdXBkYXRlIHRoZSBmbGFnIGlmOlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSkgTk9UICh3ZSBjdXJyZW50bHkgaGF2ZSBhIE5BTlAgZmxhZyBzZWxlY3RlZCwgYW5kIHRoZSBudW1iZXIgaXMgYSByZWdpb25sZXNzTmFucClcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFORFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQikgdGhlIHJpZ2h0IGNvdW50cnkgaXMgbm90IGFscmVhZHkgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNSZWdpb25sZXNzTmFucE51bWJlciAmJiAhYWxyZWFkeVNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdXNpbmcgb25seUNvdW50cmllcyBvcHRpb24sIGNvdW50cnlDb2Rlc1swXSBtYXkgYmUgZW1wdHksIHNvIHdlIG11c3QgZmluZCB0aGUgZmlyc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub24tZW1wdHkgaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvdW50cnlDb2Rlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRyeUNvZGVzW2pdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5Q29kZSA9IGNvdW50cnlDb2Rlc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlci5jaGFyQXQoMCkgPT09IFwiK1wiICYmIG51bWVyaWMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnZhbGlkIGRpYWwgY29kZSwgc28gZW1wdHlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IHVzZSBnZXROdW1lcmljIGhlcmUgYmVjYXVzZSB0aGUgbnVtYmVyIGhhcyBub3QgYmVlbiBmb3JtYXR0ZWQgeWV0LCBzbyBjb3VsZCBjb250YWluXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBiYWQgY2hhcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbnVtYmVyIHx8IG51bWJlciA9PT0gXCIrXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVtcHR5LCBvciBqdXN0IGEgcGx1cywgc28gZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGUgPSB0aGlzLmRlZmF1bHRDb3VudHJ5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHJ5Q29kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NldEZsYWcoY291bnRyeUNvZGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9pc1JlZ2lvbmxlc3NOYW5wXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9pc1JlZ2lvbmxlc3NOYW5wKG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtZXJpYyA9IHRoaXMuX2dldE51bWVyaWMobnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWVyaWMuY2hhckF0KDApID09PSBcIjFcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZWFDb2RlID0gbnVtZXJpYy5zdWJzdHIoMSwgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVnaW9ubGVzc05hbnBOdW1iZXJzLmluZGV4T2YoYXJlYUNvZGUpICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfaGlnaGxpZ2h0TGlzdEl0ZW1cIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2hpZ2hsaWdodExpc3RJdGVtKGxpc3RJdGVtLCBzaG91bGRGb2N1cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJldkl0ZW0gPSB0aGlzLmhpZ2hsaWdodGVkSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZJdGVtKSBwcmV2SXRlbS5jbGFzc0xpc3QucmVtb3ZlKFwiaXRpX19oaWdobGlnaHRcIik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gbGlzdEl0ZW07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtLmNsYXNzTGlzdC5hZGQoXCJpdGlfX2hpZ2hsaWdodFwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEZvY3VzKSB0aGlzLmhpZ2hsaWdodGVkSXRlbS5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2dldENvdW50cnlEYXRhXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRDb3VudHJ5RGF0YShjb3VudHJ5Q29kZSwgaWdub3JlT25seUNvdW50cmllc09wdGlvbiwgYWxsb3dGYWlsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb3VudHJ5TGlzdCA9IGlnbm9yZU9ubHlDb3VudHJpZXNPcHRpb24gPyBhbGxDb3VudHJpZXMgOiB0aGlzLmNvdW50cmllcztcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudHJ5TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50cnlMaXN0W2ldLmlzbzIgPT09IGNvdW50cnlDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50cnlMaXN0W2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd0ZhaWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvdW50cnkgZGF0YSBmb3IgJ1wiLmNvbmNhdChjb3VudHJ5Q29kZSwgXCInXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9zZXRGbGFnXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9zZXRGbGFnKGNvdW50cnlDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmV2Q291bnRyeSA9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5pc28yID8gdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhIDoge307XG4gICAgICAgICAgICAgICAgICAgIC8vIGRvIHRoaXMgZmlyc3QgYXMgaXQgd2lsbCB0aHJvdyBhbiBlcnJvciBhbmQgc3RvcCBpZiBjb3VudHJ5Q29kZSBpcyBpbnZhbGlkXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YSA9IGNvdW50cnlDb2RlID8gdGhpcy5fZ2V0Q291bnRyeURhdGEoY291bnRyeUNvZGUsIGZhbHNlLCBmYWxzZSkgOiB7fTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBkZWZhdWx0Q291bnRyeSAtIHdlIG9ubHkgbmVlZCB0aGUgaXNvMiBmcm9tIG5vdyBvbiwgc28ganVzdCBzdG9yZSB0aGF0XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuaXNvMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q291bnRyeSA9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5pc28yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnSW5uZXIuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJpdGlfX2ZsYWcgaXRpX19cIi5jb25jYXQoY291bnRyeUNvZGUpKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBzZWxlY3RlZCBjb3VudHJ5J3MgdGl0bGUgYXR0cmlidXRlXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGNvdW50cnlDb2RlID8gXCJcIi5jb25jYXQodGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLm5hbWUsIFwiOiArXCIpLmNvbmNhdCh0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuZGlhbENvZGUpIDogXCJVbmtub3duXCI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnLnNldEF0dHJpYnV0ZShcInRpdGxlXCIsIHRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZXBhcmF0ZURpYWxDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlhbENvZGUgPSB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuZGlhbENvZGUgPyBcIitcIi5jb25jYXQodGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmRpYWxDb2RlKSA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGlhbENvZGUuaW5uZXJIVE1MID0gZGlhbENvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXRXaWR0aCBpcyB6ZXJvIGlmIGlucHV0IGlzIGluIGEgaGlkZGVuIGNvbnRhaW5lciBkdXJpbmcgaW5pdGlhbGlzYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZEZsYWdXaWR0aCA9IHRoaXMuc2VsZWN0ZWRGbGFnLm9mZnNldFdpZHRoIHx8IHRoaXMuX2dldEhpZGRlblNlbGVjdGVkRmxhZ1dpZHRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgNnB4IG9mIHBhZGRpbmcgYWZ0ZXIgdGhlIGdyZXkgc2VsZWN0ZWQtZGlhbC1jb2RlIGJveCwgYXMgdGhpcyBpcyB3aGF0IHdlIHVzZSBpbiB0aGUgY3NzXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LnN0eWxlLnBhZGRpbmdMZWZ0ID0gXCJcIi5jb25jYXQoc2VsZWN0ZWRGbGFnV2lkdGggKyA2LCBcInB4XCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgaW5wdXQncyBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVQbGFjZWhvbGRlcigpO1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGFjdGl2ZSBsaXN0IGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hbGxvd0Ryb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldkl0ZW0gPSB0aGlzLmFjdGl2ZUl0ZW07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldkl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2SXRlbS5jbGFzc0xpc3QucmVtb3ZlKFwiaXRpX19hY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldkl0ZW0uc2V0QXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiLCBcImZhbHNlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50cnlDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRJdGVtID0gdGhpcy5jb3VudHJ5TGlzdC5xdWVyeVNlbGVjdG9yKFwiI2l0aS1pdGVtLVwiLmNvbmNhdChjb3VudHJ5Q29kZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJdGVtLnNldEF0dHJpYnV0ZShcImFyaWEtc2VsZWN0ZWRcIiwgXCJ0cnVlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJdGVtLmNsYXNzTGlzdC5hZGQoXCJpdGlfX2FjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUl0ZW0gPSBuZXh0SXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxhZy5zZXRBdHRyaWJ1dGUoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiwgbmV4dEl0ZW0uZ2V0QXR0cmlidXRlKFwiaWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBpZiB0aGUgZmxhZyBoYXMgY2hhbmdlZCBvciBub3RcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZDb3VudHJ5LmlzbzIgIT09IGNvdW50cnlDb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2dldEhpZGRlblNlbGVjdGVkRmxhZ1dpZHRoXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRIaWRkZW5TZWxlY3RlZEZsYWdXaWR0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdG8gZ2V0IHRoZSByaWdodCBzdHlsaW5nIHRvIGFwcGx5LCBhbGwgd2UgbmVlZCBpcyBhIHNoYWxsb3cgY2xvbmUgb2YgdGhlIGNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZW4gdG8gaW5qZWN0IGEgZGVlcCBjbG9uZSBvZiB0aGUgc2VsZWN0ZWRGbGFnIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lckNsb25lID0gdGhpcy50ZWxJbnB1dC5wYXJlbnROb2RlLmNsb25lTm9kZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJDbG9uZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXJDbG9uZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZEZsYWdDbG9uZSA9IHRoaXMuc2VsZWN0ZWRGbGFnLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyQ2xvbmUuYXBwZW5kQ2hpbGQoc2VsZWN0ZWRGbGFnQ2xvbmUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBzZWxlY3RlZEZsYWdDbG9uZS5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyQ2xvbmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250YWluZXJDbG9uZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3aWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl91cGRhdGVQbGFjZWhvbGRlclwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfdXBkYXRlUGxhY2Vob2xkZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRTZXRQbGFjZWhvbGRlciA9IHRoaXMub3B0aW9ucy5hdXRvUGxhY2Vob2xkZXIgPT09IFwiYWdncmVzc2l2ZVwiIHx8ICF0aGlzLmhhZEluaXRpYWxQbGFjZWhvbGRlciAmJiB0aGlzLm9wdGlvbnMuYXV0b1BsYWNlaG9sZGVyID09PSBcInBvbGl0ZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmludGxUZWxJbnB1dFV0aWxzICYmIHNob3VsZFNldFBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtYmVyVHlwZSA9IGludGxUZWxJbnB1dFV0aWxzLm51bWJlclR5cGVbdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyTnVtYmVyVHlwZV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGxhY2Vob2xkZXIgPSB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuaXNvMiA/IGludGxUZWxJbnB1dFV0aWxzLmdldEV4YW1wbGVOdW1iZXIodGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmlzbzIsIHRoaXMub3B0aW9ucy5uYXRpb25hbE1vZGUsIG51bWJlclR5cGUpIDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyID0gdGhpcy5fYmVmb3JlU2V0TnVtYmVyKHBsYWNlaG9sZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmN1c3RvbVBsYWNlaG9sZGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlciA9IHRoaXMub3B0aW9ucy5jdXN0b21QbGFjZWhvbGRlcihwbGFjZWhvbGRlciwgdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQuc2V0QXR0cmlidXRlKFwicGxhY2Vob2xkZXJcIiwgcGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfc2VsZWN0TGlzdEl0ZW1cIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3NlbGVjdExpc3RJdGVtKGxpc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBzZWxlY3RlZCBmbGFnIGFuZCBhY3RpdmUgbGlzdCBpdGVtXG4gICAgICAgICAgICAgICAgICAgIHZhciBmbGFnQ2hhbmdlZCA9IHRoaXMuX3NldEZsYWcobGlzdEl0ZW0uZ2V0QXR0cmlidXRlKFwiZGF0YS1jb3VudHJ5LWNvZGVcIikpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZURpYWxDb2RlKGxpc3RJdGVtLmdldEF0dHJpYnV0ZShcImRhdGEtZGlhbC1jb2RlXCIpLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9jdXMgdGhlIGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcHV0IGN1cnNvciBhdCBlbmQgLSB0aGlzIGZpeCBpcyByZXF1aXJlZCBmb3IgRkYgYW5kIElFMTEgKHdpdGggbmF0aW9uYWxNb2RlPWZhbHNlIGkuZS4gYXV0b1xuICAgICAgICAgICAgICAgICAgICAvLyBpbnNlcnRpbmcgZGlhbCBjb2RlKSwgd2hvIHRyeSB0byBwdXQgdGhlIGN1cnNvciBhdCB0aGUgYmVnaW5uaW5nIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW4gPSB0aGlzLnRlbElucHV0LnZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShsZW4sIGxlbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmbGFnQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlckNvdW50cnlDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2Nsb3NlRHJvcGRvd25cIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2Nsb3NlRHJvcGRvd24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRyeUxpc3QuY2xhc3NMaXN0LmFkZChcIml0aV9faGlkZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZsYWcuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBcImZhbHNlXCIpO1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGFycm93XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25BcnJvdy5jbGFzc0xpc3QucmVtb3ZlKFwiaXRpX19hcnJvdy0tdXBcIik7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVuYmluZCBrZXkgZXZlbnRzXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2hhbmRsZUtleWRvd25PbkRyb3Bkb3duKTtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oYW5kbGVDbGlja09mZlRvQ2xvc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlMaXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgdGhpcy5faGFuZGxlTW91c2VvdmVyQ291bnRyeUxpc3QpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlMaXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oYW5kbGVDbGlja0NvdW50cnlMaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG1lbnUgZnJvbSBjb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kcm9wZG93bkNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlKSB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLl9oYW5kbGVXaW5kb3dTY3JvbGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJvcGRvd24ucGFyZW50Tm9kZSkgdGhpcy5kcm9wZG93bi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZHJvcGRvd24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoXCJjbG9zZTpjb3VudHJ5ZHJvcGRvd25cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfc2Nyb2xsVG9cIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3Njcm9sbFRvKGVsZW1lbnQsIG1pZGRsZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5jb3VudHJ5TGlzdDtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2luZG93VG9wIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE0Mzg0MDkxLzIxNzg2NlxuICAgICAgICAgICAgICAgICAgICB2YXIgd2luZG93VG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250YWluZXJIZWlnaHQgPSBjb250YWluZXIub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyVG9wID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHdpbmRvd1RvcDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lckJvdHRvbSA9IGNvbnRhaW5lclRvcCArIGNvbnRhaW5lckhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRIZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRUb3AgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHdpbmRvd1RvcDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRCb3R0b20gPSBlbGVtZW50VG9wICsgZWxlbWVudEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1Njcm9sbFRvcCA9IGVsZW1lbnRUb3AgLSBjb250YWluZXJUb3AgKyBjb250YWluZXIuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWlkZGxlT2Zmc2V0ID0gY29udGFpbmVySGVpZ2h0IC8gMiAtIGVsZW1lbnRIZWlnaHQgLyAyO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFRvcCA8IGNvbnRhaW5lclRvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2Nyb2xsIHVwXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWlkZGxlKSBuZXdTY3JvbGxUb3AgLT0gbWlkZGxlT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCA9IG5ld1Njcm9sbFRvcDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50Qm90dG9tID4gY29udGFpbmVyQm90dG9tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzY3JvbGwgZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pZGRsZSkgbmV3U2Nyb2xsVG9wICs9IG1pZGRsZU9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHREaWZmZXJlbmNlID0gY29udGFpbmVySGVpZ2h0IC0gZWxlbWVudEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBuZXdTY3JvbGxUb3AgLSBoZWlnaHREaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfdXBkYXRlRGlhbENvZGVcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3VwZGF0ZURpYWxDb2RlKG5ld0RpYWxDb2RlQmFyZSwgaGFzU2VsZWN0ZWRMaXN0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXRWYWwgPSB0aGlzLnRlbElucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBzYXZlIGhhdmluZyB0byBwYXNzIHRoaXMgZXZlcnkgdGltZVxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3RGlhbENvZGUgPSBcIitcIi5jb25jYXQobmV3RGlhbENvZGVCYXJlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld051bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0VmFsLmNoYXJBdCgwKSA9PT0gXCIrXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlJ3MgYSBwbHVzIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHJlcGxhY2VtZW50IChkb2Vzbid0IG1hdHRlciBpZiBuYXRpb25hbE1vZGUgb3Igbm90KVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZEaWFsQ29kZSA9IHRoaXMuX2dldERpYWxDb2RlKGlucHV0VmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2RGlhbENvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjdXJyZW50IG51bWJlciBjb250YWlucyBhIHZhbGlkIGRpYWwgY29kZSwgc28gcmVwbGFjZSBpdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld051bWJlciA9IGlucHV0VmFsLnJlcGxhY2UocHJldkRpYWxDb2RlLCBuZXdEaWFsQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgbnVtYmVyIGNvbnRhaW5zIGFuIGludmFsaWQgZGlhbCBjb2RlLCBzbyBkaXRjaCBpdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChubyB3YXkgdG8gZGV0ZXJtaW5lIHdoZXJlIHRoZSBpbnZhbGlkIGRpYWwgY29kZSBlbmRzIGFuZCB0aGUgcmVzdCBvZiB0aGUgbnVtYmVyIGJlZ2lucylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOdW1iZXIgPSBuZXdEaWFsQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMubmF0aW9uYWxNb2RlIHx8IHRoaXMub3B0aW9ucy5zZXBhcmF0ZURpYWxDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBkbyBhbnl0aGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmF0aW9uYWxNb2RlIGlzIGRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVyZSBpcyBhbiBleGlzdGluZyB2YWx1ZSB3aXRoIG5vIGRpYWwgY29kZTogcHJlZml4IHRoZSBuZXcgZGlhbCBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3TnVtYmVyID0gbmV3RGlhbENvZGUgKyBpbnB1dFZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzU2VsZWN0ZWRMaXN0SXRlbSB8fCAhdGhpcy5vcHRpb25zLmF1dG9IaWRlRGlhbENvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBleGlzdGluZyB2YWx1ZSBhbmQgZWl0aGVyIHRoZXkndmUganVzdCBzZWxlY3RlZCBhIGxpc3QgaXRlbSwgb3IgYXV0b0hpZGVEaWFsQ29kZSBpc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGVkOiBpbnNlcnQgbmV3IGRpYWwgY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld051bWJlciA9IG5ld0RpYWxDb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC52YWx1ZSA9IG5ld051bWJlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl9nZXREaWFsQ29kZVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0RGlhbENvZGUobnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkaWFsQ29kZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgaW50ZXJlc3RlZCBpbiBpbnRlcm5hdGlvbmFsIG51bWJlcnMgKHN0YXJ0aW5nIHdpdGggYSBwbHVzKVxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyLmNoYXJBdCgwKSA9PT0gXCIrXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1lcmljQ2hhcnMgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0ZSBvdmVyIGNoYXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gbnVtYmVyLmNoYXJBdChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBjaGFyIGlzIG51bWJlciAoaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzg5MzU2NDkvMjE3ODY2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4ocGFyc2VJbnQoYywgMTApKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljQ2hhcnMgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgY3VycmVudCBudW1lcmljQ2hhcnMgbWFrZSBhIHZhbGlkIGRpYWwgY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3VudHJ5Q29kZXNbbnVtZXJpY0NoYXJzXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmUgdGhlIGFjdHVhbCByYXcgc3RyaW5nICh1c2VmdWwgZm9yIG1hdGNoaW5nIGxhdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhbENvZGUgPSBudW1iZXIuc3Vic3RyKDAsIGkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtZXJpY0NoYXJzLmxlbmd0aCA9PT0gdGhpcy5kaWFsQ29kZU1heExlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpYWxDb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiX2dldEZ1bGxOdW1iZXJcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2dldEZ1bGxOdW1iZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnRlbElucHV0LnZhbHVlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpYWxDb2RlID0gdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmRpYWxDb2RlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJlZml4O1xuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtZXJpY1ZhbCA9IHRoaXMuX2dldE51bWVyaWModmFsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZXBhcmF0ZURpYWxDb2RlICYmIHZhbC5jaGFyQXQoMCkgIT09IFwiK1wiICYmIGRpYWxDb2RlICYmIG51bWVyaWNWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gdXNpbmcgc2VwYXJhdGVEaWFsQ29kZSwgaXQgaXMgdmlzaWJsZSBzbyBpcyBlZmZlY3RpdmVseSBwYXJ0IG9mIHRoZSB0eXBlZCBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IFwiK1wiLmNvbmNhdChkaWFsQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJfYmVmb3JlU2V0TnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9iZWZvcmVTZXROdW1iZXIob3JpZ2luYWxOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG51bWJlciA9IG9yaWdpbmFsTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlcGFyYXRlRGlhbENvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWFsQ29kZSA9IHRoaXMuX2dldERpYWxDb2RlKG51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHZhbGlkIGRpYWwgY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpYWxDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gY2FzZSBfZ2V0RGlhbENvZGUgcmV0dXJuZWQgYW4gYXJlYSBjb2RlIGFzIHdlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsQ29kZSA9IFwiK1wiLmNvbmNhdCh0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuZGlhbENvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgbG90IG9mIG51bWJlcnMgd2lsbCBoYXZlIGEgc3BhY2Ugc2VwYXJhdGluZyB0aGUgZGlhbCBjb2RlIGFuZCB0aGUgbWFpbiBudW1iZXIsIGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvbWUgTkFOUCBudW1iZXJzIHdpbGwgaGF2ZSBhIGh5cGhlbiBlLmcuICsxIDY4NC03MzMtMTIzNCAtIGluIGJvdGggY2FzZXMgd2Ugd2FudCB0byBnZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByaWQgb2YgaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBkb24ndCBqdXN0IHRyaW0gYWxsIG5vbi1udW1lcmljcyBhcyBtYXkgd2FudCB0byBwcmVzZXJ2ZSBhbiBvcGVuIHBhcmVudGhlc2lzIGV0Y1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IG51bWJlcltkaWFsQ29kZS5sZW5ndGhdID09PSBcIiBcIiB8fCBudW1iZXJbZGlhbENvZGUubGVuZ3RoXSA9PT0gXCItXCIgPyBkaWFsQ29kZS5sZW5ndGggKyAxIDogZGlhbENvZGUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciA9IG51bWJlci5zdWJzdHIoc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXAobnVtYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIl90cmlnZ2VyQ291bnRyeUNoYW5nZVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfdHJpZ2dlckNvdW50cnlDaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoXCJjb3VudHJ5Y2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiaGFuZGxlQXV0b0NvdW50cnlcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQXV0b0NvdW50cnkoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW5pdGlhbENvdW50cnkgPT09IFwiYXV0b1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBtdXN0IHNldCB0aGlzIGV2ZW4gaWYgdGhlcmUgaXMgYW4gaW5pdGlhbCB2YWwgaW4gdGhlIGlucHV0OiBpbiBjYXNlIHRoZSBpbml0aWFsIHZhbCBpc1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW52YWxpZCBhbmQgdGhleSBkZWxldGUgaXQgLSB0aGV5IHNob3VsZCBzZWUgdGhlaXIgYXV0byBjb3VudHJ5XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRDb3VudHJ5ID0gd2luZG93LmludGxUZWxJbnB1dEdsb2JhbHMuYXV0b0NvdW50cnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIGluaXRpYWwgdmFsdWUgaW4gdGhlIGlucHV0LCB0aGVuIHVwZGF0ZSB0aGUgZmxhZ1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRlbElucHV0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDb3VudHJ5KHRoaXMuZGVmYXVsdENvdW50cnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlQXV0b0NvdW50cnlQcm9taXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImhhbmRsZVV0aWxzXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZVV0aWxzKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bFxuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmludGxUZWxJbnB1dFV0aWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSdzIGFuIGluaXRpYWwgdmFsdWUgaW4gdGhlIGlucHV0LCB0aGVuIGZvcm1hdCBpdFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGVsSW5wdXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVWYWxGcm9tTnVtYmVyKHRoaXMudGVsSW5wdXQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGxhY2Vob2xkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVVdGlsc1NjcmlwdFByb21pc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImRlc3Ryb3lcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm0gPSB0aGlzLnRlbElucHV0LmZvcm07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBkcm9wZG93biBpcyBjbG9zZWQgKGFuZCB1bmJpbmQgbGlzdGVuZXJzKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZsYWcucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX2hhbmRsZUNsaWNrU2VsZWN0ZWRGbGFnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhZ3NDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5faGFuZGxlRmxhZ3NDb250YWluZXJLZXlkb3duKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxhYmVsIGNsaWNrIGhhY2tcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYWJlbCA9IHRoaXMuX2dldENsb3Nlc3RMYWJlbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhYmVsKSBsYWJlbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlTGFiZWxDbGljayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5iaW5kIGhpZGRlbklucHV0IGxpc3RlbmVyc1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oaWRkZW5JbnB1dCAmJiBmb3JtKSBmb3JtLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgdGhpcy5faGFuZGxlSGlkZGVuSW5wdXRTdWJtaXQpO1xuICAgICAgICAgICAgICAgICAgICAvLyB1bmJpbmQgYXV0b0hpZGVEaWFsQ29kZSBsaXN0ZW5lcnNcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvSGlkZURpYWxDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybSkgZm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIHRoaXMuX2hhbmRsZVN1Ym1pdE9yQmx1ckV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgdGhpcy5faGFuZGxlU3VibWl0T3JCbHVyRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIHVuYmluZCBrZXkgZXZlbnRzLCBhbmQgY3V0L3Bhc3RlIGV2ZW50c1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCB0aGlzLl9oYW5kbGVLZXl1cEV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY3V0XCIsIHRoaXMuX2hhbmRsZUNsaXBib2FyZEV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZWxJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKFwicGFzdGVcIiwgdGhpcy5faGFuZGxlQ2xpcGJvYXJkRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgYXR0cmlidXRlIG9mIGlkIGluc3RhbmNlOiBkYXRhLWludGwtdGVsLWlucHV0LWlkXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVsSW5wdXQucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1pbnRsLXRlbC1pbnB1dC1pZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG1hcmt1cCAoYnV0IGxlYXZlIHRoZSBvcmlnaW5hbCBpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSB0aGlzLnRlbElucHV0LnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy50ZWxJbnB1dCwgd3JhcHBlcik7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh3cmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHdpbmRvdy5pbnRsVGVsSW5wdXRHbG9iYWxzLmluc3RhbmNlc1t0aGlzLmlkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAga2V5OiBcImdldEV4dGVuc2lvblwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRFeHRlbnNpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50bFRlbElucHV0VXRpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRsVGVsSW5wdXRVdGlscy5nZXRFeHRlbnNpb24odGhpcy5fZ2V0RnVsbE51bWJlcigpLCB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEuaXNvMik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJnZXROdW1iZXJcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TnVtYmVyKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmludGxUZWxJbnB1dFV0aWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNvMiA9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5pc28yO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGxUZWxJbnB1dFV0aWxzLmZvcm1hdE51bWJlcih0aGlzLl9nZXRGdWxsTnVtYmVyKCksIGlzbzIsIGZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJnZXROdW1iZXJUeXBlXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE51bWJlclR5cGUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW50bFRlbElucHV0VXRpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRsVGVsSW5wdXRVdGlscy5nZXROdW1iZXJUeXBlKHRoaXMuX2dldEZ1bGxOdW1iZXIoKSwgdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmlzbzIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtOTk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJnZXRTZWxlY3RlZENvdW50cnlEYXRhXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFNlbGVjdGVkQ291bnRyeURhdGEoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJnZXRWYWxpZGF0aW9uRXJyb3JcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsaWRhdGlvbkVycm9yKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmludGxUZWxJbnB1dFV0aWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNvMiA9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5RGF0YS5pc28yO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGxUZWxJbnB1dFV0aWxzLmdldFZhbGlkYXRpb25FcnJvcih0aGlzLl9nZXRGdWxsTnVtYmVyKCksIGlzbzIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtOTk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJpc1ZhbGlkTnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzVmFsaWROdW1iZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLl9nZXRGdWxsTnVtYmVyKCkudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY291bnRyeUNvZGUgPSB0aGlzLm9wdGlvbnMubmF0aW9uYWxNb2RlID8gdGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmlzbzIgOiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmludGxUZWxJbnB1dFV0aWxzID8gaW50bFRlbElucHV0VXRpbHMuaXNWYWxpZE51bWJlcih2YWwsIGNvdW50cnlDb2RlKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJzZXRDb3VudHJ5XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldENvdW50cnkob3JpZ2luYWxDb3VudHJ5Q29kZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY291bnRyeUNvZGUgPSBvcmlnaW5hbENvdW50cnlDb2RlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGFscmVhZHkgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRmxhZ0lubmVyLmNsYXNzTGlzdC5jb250YWlucyhcIml0aV9fXCIuY29uY2F0KGNvdW50cnlDb2RlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEZsYWcoY291bnRyeUNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlRGlhbENvZGUodGhpcy5zZWxlY3RlZENvdW50cnlEYXRhLmRpYWxDb2RlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyQ291bnRyeUNoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGtleTogXCJzZXROdW1iZXJcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0TnVtYmVyKG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBtdXN0IHVwZGF0ZSB0aGUgZmxhZyBmaXJzdCwgd2hpY2ggdXBkYXRlcyB0aGlzLnNlbGVjdGVkQ291bnRyeURhdGEsIHdoaWNoIGlzIHVzZWQgZm9yXG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcm1hdHRpbmcgdGhlIG51bWJlciBiZWZvcmUgZGlzcGxheWluZyBpdFxuICAgICAgICAgICAgICAgICAgICB2YXIgZmxhZ0NoYW5nZWQgPSB0aGlzLl91cGRhdGVGbGFnRnJvbU51bWJlcihudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVWYWxGcm9tTnVtYmVyKG51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmbGFnQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlckNvdW50cnlDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwic2V0UGxhY2Vob2xkZXJOdW1iZXJUeXBlXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldFBsYWNlaG9sZGVyTnVtYmVyVHlwZSh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlck51bWJlclR5cGUgPSB0eXBlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVQbGFjZWhvbGRlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gXSk7XG4gICAgICAgICAgICByZXR1cm4gSXRpO1xuICAgICAgICB9KCk7XG4gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKlxuICogIFNUQVRJQyBNRVRIT0RTXG4gKioqKioqKioqKioqKioqKioqKiovXG4gICAgICAgIC8vIGdldCB0aGUgY291bnRyeSBkYXRhIG9iamVjdFxuICAgICAgICBpbnRsVGVsSW5wdXRHbG9iYWxzLmdldENvdW50cnlEYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gYWxsQ291bnRyaWVzO1xuICAgICAgICB9O1xuICAgICAgICAvLyBpbmplY3QgYSA8c2NyaXB0PiBlbGVtZW50IHRvIGxvYWQgdXRpbHMuanNcbiAgICAgICAgdmFyIGluamVjdFNjcmlwdCA9IGZ1bmN0aW9uIGluamVjdFNjcmlwdChwYXRoLCBoYW5kbGVTdWNjZXNzLCBoYW5kbGVGYWlsdXJlKSB7XG4gICAgICAgICAgICAvLyBpbmplY3QgYSBuZXcgc2NyaXB0IGVsZW1lbnQgaW50byB0aGUgcGFnZVxuICAgICAgICAgICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICBzY3JpcHQub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgZm9yRWFjaEluc3RhbmNlKFwiaGFuZGxlVXRpbHNcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZVN1Y2Nlc3MpIGhhbmRsZVN1Y2Nlc3MoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzY3JpcHQub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGZvckVhY2hJbnN0YW5jZShcInJlamVjdFV0aWxzU2NyaXB0UHJvbWlzZVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlRmFpbHVyZSkgaGFuZGxlRmFpbHVyZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNjcmlwdC5jbGFzc05hbWUgPSBcIml0aS1sb2FkLXV0aWxzXCI7XG4gICAgICAgICAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgc2NyaXB0LnNyYyA9IHBhdGg7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIGxvYWQgdGhlIHV0aWxzIHNjcmlwdFxuICAgICAgICBpbnRsVGVsSW5wdXRHbG9iYWxzLmxvYWRVdGlscyA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgICAgIC8vIDIgb3B0aW9uczpcbiAgICAgICAgICAgIC8vIDEpIG5vdCBhbHJlYWR5IHN0YXJ0ZWQgbG9hZGluZyAoc3RhcnQpXG4gICAgICAgICAgICAvLyAyKSBhbHJlYWR5IHN0YXJ0ZWQgbG9hZGluZyAoZG8gbm90aGluZyAtIGp1c3Qgd2FpdCBmb3IgdGhlIG9ubG9hZCBjYWxsYmFjayB0byBmaXJlLCB3aGljaCB3aWxsXG4gICAgICAgICAgICAvLyB0cmlnZ2VyIGhhbmRsZVV0aWxzIG9uIGFsbCBpbnN0YW5jZXMsIGludm9raW5nIHRoZWlyIHJlc29sdmVVdGlsc1NjcmlwdFByb21pc2UgZnVuY3Rpb25zKVxuICAgICAgICAgICAgaWYgKCF3aW5kb3cuaW50bFRlbElucHV0VXRpbHMgJiYgIXdpbmRvdy5pbnRsVGVsSW5wdXRHbG9iYWxzLnN0YXJ0ZWRMb2FkaW5nVXRpbHNTY3JpcHQpIHtcbiAgICAgICAgICAgICAgICAvLyBvbmx5IGRvIHRoaXMgb25jZVxuICAgICAgICAgICAgICAgIHdpbmRvdy5pbnRsVGVsSW5wdXRHbG9iYWxzLnN0YXJ0ZWRMb2FkaW5nVXRpbHNTY3JpcHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgcHJvbWlzZXMsIHRoZW4gcmV0dXJuIGEgcHJvbWlzZVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5qZWN0U2NyaXB0KHBhdGgsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbmplY3RTY3JpcHQocGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gZGVmYXVsdCBvcHRpb25zXG4gICAgICAgIGludGxUZWxJbnB1dEdsb2JhbHMuZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICAgICAgLy8gdmVyc2lvblxuICAgICAgICBpbnRsVGVsSW5wdXRHbG9iYWxzLnZlcnNpb24gPSBcIjE2LjEuMFwiO1xuICAgICAgICAvLyBjb252ZW5pZW5jZSB3cmFwcGVyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihpbnB1dCwgb3B0aW9ucykge1xuICAgICAgICAgICAgdmFyIGl0aSA9IG5ldyBJdGkoaW5wdXQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaXRpLl9pbml0KCk7XG4gICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWludGwtdGVsLWlucHV0LWlkXCIsIGl0aS5pZCk7XG4gICAgICAgICAgICB3aW5kb3cuaW50bFRlbElucHV0R2xvYmFscy5pbnN0YW5jZXNbaXRpLmlkXSA9IGl0aTtcbiAgICAgICAgICAgIHJldHVybiBpdGk7XG4gICAgICAgIH07XG4gICAgfSgpO1xufSk7IiwiLyoqXG4gKiBFeHBvc2luZyBpbnRsLXRlbC1pbnB1dCBhcyBhIGNvbXBvbmVudFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL2J1aWxkL2pzL2ludGxUZWxJbnB1dFwiKTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCJ2YXIgbmV4dFRpY2sgPSByZXF1aXJlKCdwcm9jZXNzL2Jyb3dzZXIuanMnKS5uZXh0VGljaztcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBpbW1lZGlhdGVJZHMgPSB7fTtcbnZhciBuZXh0SW1tZWRpYXRlSWQgPSAwO1xuXG4vLyBET00gQVBJcywgZm9yIGNvbXBsZXRlbmVzc1xuXG5leHBvcnRzLnNldFRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0VGltZW91dCwgd2luZG93LCBhcmd1bWVudHMpLCBjbGVhclRpbWVvdXQpO1xufTtcbmV4cG9ydHMuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0SW50ZXJ2YWwsIHdpbmRvdywgYXJndW1lbnRzKSwgY2xlYXJJbnRlcnZhbCk7XG59O1xuZXhwb3J0cy5jbGVhclRpbWVvdXQgPVxuZXhwb3J0cy5jbGVhckludGVydmFsID0gZnVuY3Rpb24odGltZW91dCkgeyB0aW1lb3V0LmNsb3NlKCk7IH07XG5cbmZ1bmN0aW9uIFRpbWVvdXQoaWQsIGNsZWFyRm4pIHtcbiAgdGhpcy5faWQgPSBpZDtcbiAgdGhpcy5fY2xlYXJGbiA9IGNsZWFyRm47XG59XG5UaW1lb3V0LnByb3RvdHlwZS51bnJlZiA9IFRpbWVvdXQucHJvdG90eXBlLnJlZiA9IGZ1bmN0aW9uKCkge307XG5UaW1lb3V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jbGVhckZuLmNhbGwod2luZG93LCB0aGlzLl9pZCk7XG59O1xuXG4vLyBEb2VzIG5vdCBzdGFydCB0aGUgdGltZSwganVzdCBzZXRzIHVwIHRoZSBtZW1iZXJzIG5lZWRlZC5cbmV4cG9ydHMuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSwgbXNlY3MpIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IG1zZWNzO1xufTtcblxuZXhwb3J0cy51bmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IC0xO1xufTtcblxuZXhwb3J0cy5fdW5yZWZBY3RpdmUgPSBleHBvcnRzLmFjdGl2ZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuXG4gIHZhciBtc2VjcyA9IGl0ZW0uX2lkbGVUaW1lb3V0O1xuICBpZiAobXNlY3MgPj0gMCkge1xuICAgIGl0ZW0uX2lkbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAgIGlmIChpdGVtLl9vblRpbWVvdXQpXG4gICAgICAgIGl0ZW0uX29uVGltZW91dCgpO1xuICAgIH0sIG1zZWNzKTtcbiAgfVxufTtcblxuLy8gVGhhdCdzIG5vdCBob3cgbm9kZS5qcyBpbXBsZW1lbnRzIGl0IGJ1dCB0aGUgZXhwb3NlZCBhcGkgaXMgdGhlIHNhbWUuXG5leHBvcnRzLnNldEltbWVkaWF0ZSA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHNldEltbWVkaWF0ZSA6IGZ1bmN0aW9uKGZuKSB7XG4gIHZhciBpZCA9IG5leHRJbW1lZGlhdGVJZCsrO1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gZmFsc2UgOiBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG5cbiAgaW1tZWRpYXRlSWRzW2lkXSA9IHRydWU7XG5cbiAgbmV4dFRpY2soZnVuY3Rpb24gb25OZXh0VGljaygpIHtcbiAgICBpZiAoaW1tZWRpYXRlSWRzW2lkXSkge1xuICAgICAgLy8gZm4uY2FsbCgpIGlzIGZhc3RlciBzbyB3ZSBvcHRpbWl6ZSBmb3IgdGhlIGNvbW1vbiB1c2UtY2FzZVxuICAgICAgLy8gQHNlZSBodHRwOi8vanNwZXJmLmNvbS9jYWxsLWFwcGx5LXNlZ3VcbiAgICAgIGlmIChhcmdzKSB7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm4uY2FsbChudWxsKTtcbiAgICAgIH1cbiAgICAgIC8vIFByZXZlbnQgaWRzIGZyb20gbGVha2luZ1xuICAgICAgZXhwb3J0cy5jbGVhckltbWVkaWF0ZShpZCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaWQ7XG59O1xuXG5leHBvcnRzLmNsZWFySW1tZWRpYXRlID0gdHlwZW9mIGNsZWFySW1tZWRpYXRlID09PSBcImZ1bmN0aW9uXCIgPyBjbGVhckltbWVkaWF0ZSA6IGZ1bmN0aW9uKGlkKSB7XG4gIGRlbGV0ZSBpbW1lZGlhdGVJZHNbaWRdO1xufTsiLCJpbXBvcnQgeyBDdXN0b21JbnB1dEVsZW1lbnQgfSBmcm9tICcuL2ZyYW1ld29yay9DdXN0b21JbnB1dEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBGaWxlRmllbGRFbGVtZW50IH0gZnJvbSAnLi9lbGVtZW50cy9GaWxlRmllbGQvRmlsZUZpZWxkRWxlbWVudCc7XHJcbmltcG9ydCB7IEFycmF5VXRpbCwgTWFrZVJlcXVlc3QgfSBmcm9tICdAbHVmdGJvcm4vdXRpbGl0aWVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21Gb3JtIHtcclxuXHRhY3Rpb246IHN0cmluZztcclxuXHRtZXRob2Q6IHN0cmluZztcclxuXHRfbmF0aXZlSW5wdXRzOiBIVE1MSW5wdXRFbGVtZW50W107XHJcblxyXG5cdHB1YmxpYyBvbnN1Ym1pdDogKCh0aGlzOiBDdXN0b21Gb3JtLCBwcm9taXNlOiBQcm9taXNlPGFueT4pID0+IGFueSkgfCBudWxsO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm06IEhUTUxGb3JtRWxlbWVudCkge1xyXG5cdFx0dGhpcy5hY3Rpb24gPSBmb3JtLmFjdGlvbiB8fCAnJztcclxuXHRcdHRoaXMubWV0aG9kID0gZm9ybS5tZXRob2QgfHwgJ2dldCc7XHJcblx0XHR0aGlzLmF0dGFjaEZvcm0oKTtcclxuXHRcdHRoaXMuYmluR3JvdXBzVG9EZXBlbmRlbmN5KCk7XHJcblx0fVxyXG5cclxuXHRnZXQgaW5wdXRzKCk6IEN1c3RvbUlucHV0RWxlbWVudFtdIHtcclxuXHRcdHJldHVybiBBcnJheVV0aWwuRnJvbU5vZGVMaXN0KHRoaXMuZm9ybS5xdWVyeVNlbGVjdG9yQWxsKCcuZ3JvdXAtY29udGFpbmVyOm5vdChbaGlkZGVuXSkgW2N1c3RvbS1pbnB1dF06bm90KFtoaWRkZW5dKScpKTtcclxuXHR9XHJcblx0Z2V0IG5hdGl2ZUlucHV0cygpOiBIVE1MSW5wdXRFbGVtZW50W10ge1xyXG5cdFx0dGhpcy5fbmF0aXZlSW5wdXRzID1cclxuXHRcdFx0dGhpcy5fbmF0aXZlSW5wdXRzIHx8XHJcblx0XHRcdEFycmF5VXRpbC5Gcm9tTm9kZUxpc3QodGhpcy5mb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0JykpO1xyXG5cdFx0cmV0dXJuIHRoaXMuX25hdGl2ZUlucHV0cztcclxuXHR9XHJcblxyXG5cdGdldCBoYXNGaWxlcygpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmlucHV0cy5zb21lKGlucHV0ID0+IGlucHV0IGluc3RhbmNlb2YgRmlsZUZpZWxkRWxlbWVudCk7XHJcblx0fVxyXG5cclxuXHRhdHRhY2hGb3JtKCkge1xyXG5cdFx0dGhpcy5mb3JtLm9uc3VibWl0ID0gZXZlbnQgPT4ge1xyXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRsZXQgdmFsaWQgPSB0aGlzLnZhbGlkYXRlKCk7XHJcblx0XHRcdGlmICh2YWxpZCkge1xyXG5cdFx0XHRcdGlmICh0aGlzLm9uc3VibWl0KSB7XHJcblx0XHRcdFx0XHR0aGlzLm9uc3VibWl0KHRoaXMuc3VibWl0KCkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG5cdFx0dGhpcy5pbnB1dHMuZm9yRWFjaChpbnB1dCA9PiAoPEN1c3RvbUlucHV0RWxlbWVudD5pbnB1dCkudmFsaWRhdGUoKSk7XHJcblx0XHRyZXR1cm4gdGhpcy5pbnB1dHMuZXZlcnkoaW5wdXQgPT4gKDxDdXN0b21JbnB1dEVsZW1lbnQ+aW5wdXQpLnZhbGlkKTtcclxuXHR9XHJcblxyXG5cdHN1Ym1pdCgpOiBQcm9taXNlPGFueT4ge1xyXG5cdFx0bGV0IGZvcm1EYXRhID0ge307XHJcblx0XHRjb25zdCBoZWFkZXJzOiBhbnkgPSB7fTtcclxuXHRcdHRoaXMuaW5wdXRzLm1hcChpID0+IChmb3JtRGF0YVtpLm5hbWVdID0gaS52YWx1ZSkpO1xyXG5cdFx0Zm9ybURhdGEgPSB0aGlzLmV4dHJhY3REYXRhKCk7XHJcblx0XHRyZXR1cm4gbmV3IE1ha2VSZXF1ZXN0KHRoaXMuYWN0aW9uLCB0aGlzLm1ldGhvZCwgaGVhZGVycykuc2VuZChcclxuXHRcdFx0Zm9ybURhdGEsXHJcblx0XHQpO1xyXG5cdH1cclxuXHRwcml2YXRlIGV4dHJhY3REYXRhKCk6IEZvcm1EYXRhIHtcclxuXHRcdGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG5cdFx0Zm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLmlucHV0cykge1xyXG5cdFx0XHRpZiAoaW5wdXQgaW5zdGFuY2VvZiBGaWxlRmllbGRFbGVtZW50KSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGlucHV0LnZhbHVlLmxlbmd0aDsgaW5kZXgrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZmlsZSA9IGlucHV0LnZhbHVlW2luZGV4XTtcclxuXHRcdFx0XHRcdGZvcm1EYXRhLmFwcGVuZChpbnB1dC5uYW1lLCBmaWxlLCBmaWxlLm5hbWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRmb3JtRGF0YS5hcHBlbmQoYFZhbHVlc1ske2lucHV0Lm5hbWV9XWAsIGlucHV0LnZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Zm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLm5hdGl2ZUlucHV0cykge1xyXG5cdFx0XHRpZiAoaW5wdXQubmFtZSkge1xyXG5cdFx0XHRcdGZvcm1EYXRhLmFwcGVuZChpbnB1dC5uYW1lLCBpbnB1dC52YWx1ZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBmb3JtRGF0YTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYmluR3JvdXBzVG9EZXBlbmRlbmN5KCkge1xyXG5cdFx0bGV0IGdyb3VwQ29udGFpbmVycyA9IHRoaXMuZm9ybS5xdWVyeVNlbGVjdG9yQWxsKCdkaXYuZ3JvdXAtY29udGFpbmVyOm5vdChbZGF0YS1kZXBlbmRzLW9uPVwiXCJdKScsXHJcblx0XHQpO1xyXG5cdFx0Z3JvdXBDb250YWluZXJzLmZvckVhY2goKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XHJcblx0XHRcdGxldCBkZXBlbmRlbnRGaWVsZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWRlcGVuZHMtb24nKTtcclxuXHRcdFx0bGV0IGRlcGVuZGVudFZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGVwZW5kZW50LXZhbHVlJyk7XHJcblx0XHRcdGxldCBjdXN0b21FbGVtZW50OiBDdXN0b21JbnB1dEVsZW1lbnQgPSBkb2N1bWVudC5mb3Jtc1swXS5xdWVyeVNlbGVjdG9yKGBbbmFtZT1cIiR7ZGVwZW5kZW50RmllbGR9XCJdYCkgYXMgQ3VzdG9tSW5wdXRFbGVtZW50O1xyXG5cdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShcImhpZGRlblwiLCBcIlwiKTtcclxuXHRcdFx0Y3VzdG9tRWxlbWVudC5vbkNoYW5nZS5vbihldmVudCA9PiB7XHJcblx0XHRcdFx0aWYgKGV2ZW50LnZhbHVlID09PSBkZXBlbmRlbnRWYWx1ZSB8fCBldmVudC52YWx1ZS5pbmRleE9mKGRlcGVuZGVudFZhbHVlKSA+PSAwKSB7XHJcblx0XHRcdFx0XHR0aGlzLnNob3dHcm91cEFuZEl0c0RlcGVuZGVuY2llcyhlbGVtZW50KTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5oaWRlR3JvdXBBbmRJdHNEZXBlbmRlbmNpZXMoZWxlbWVudCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBoaWRlR3JvdXBBbmRJdHNEZXBlbmRlbmNpZXMoZ3JvdXA6IEVsZW1lbnQpIHtcclxuXHRcdGNvbnN0IGlucHV0RWxlbWVudHNJbnNpZGVHcm91cCA9IHRoaXMuaW5wdXRzLmZpbHRlcihpbnB1dCA9PiB0aGlzLmlzRGVzY2VuZGFudChncm91cCwgaW5wdXQpKTtcclxuXHRcdGdyb3VwLnNldEF0dHJpYnV0ZShcImhpZGRlblwiLCBcIlwiKTtcclxuXHRcdGxldCBncm91cENvbnRhaW5lcnMgPSB0aGlzLmZvcm0ucXVlcnlTZWxlY3RvckFsbCgnZGl2Lmdyb3VwLWNvbnRhaW5lcjpub3QoW2RhdGEtZGVwZW5kcy1vbj1cIlwiXSknKTtcclxuXHRcdGdyb3VwQ29udGFpbmVycy5mb3JFYWNoKG90aGVyR3JvdXAgPT4ge1xyXG5cdFx0XHRpZiAob3RoZXJHcm91cCAhPT0gZ3JvdXApIHtcclxuXHRcdFx0XHRsZXQgZ3JvdXBEZXBlbmRzT25GaWVsZCA9IG90aGVyR3JvdXAuZ2V0QXR0cmlidXRlKCdkYXRhLWRlcGVuZHMtb24nKTtcclxuXHRcdFx0XHRpbnB1dEVsZW1lbnRzSW5zaWRlR3JvdXAuZm9yRWFjaChpbnB1dCA9PiB7XHJcblx0XHRcdFx0XHRpZiAoaW5wdXQubmFtZSA9PT0gZ3JvdXBEZXBlbmRzT25GaWVsZCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmhpZGVHcm91cEFuZEl0c0RlcGVuZGVuY2llcyhvdGhlckdyb3VwKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgc2hvd0dyb3VwQW5kSXRzRGVwZW5kZW5jaWVzKGdyb3VwOiBFbGVtZW50KSB7XHJcblx0XHRncm91cC5yZW1vdmVBdHRyaWJ1dGUoXCJoaWRkZW5cIik7XHJcblx0XHRjb25zdCBpbnB1dEVsZW1lbnRzSW5zaWRlR3JvdXAgPSB0aGlzLmlucHV0cy5maWx0ZXIoaW5wdXQgPT4gdGhpcy5pc0Rlc2NlbmRhbnQoZ3JvdXAsIGlucHV0KSk7XHJcblx0XHRsZXQgZ3JvdXBDb250YWluZXJzID0gdGhpcy5mb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoJ2Rpdi5ncm91cC1jb250YWluZXI6bm90KFtkYXRhLWRlcGVuZHMtb249XCJcIl0pJyk7XHJcblx0XHRncm91cENvbnRhaW5lcnMuZm9yRWFjaChvdGhlckdyb3VwID0+IHtcclxuXHRcdFx0aWYgKG90aGVyR3JvdXAgIT09IGdyb3VwKSB7XHJcblx0XHRcdFx0bGV0IGdyb3VwRGVwZW5kc09uRmllbGQgPSBvdGhlckdyb3VwLmdldEF0dHJpYnV0ZSgnZGF0YS1kZXBlbmRzLW9uJyk7XHJcblx0XHRcdFx0bGV0IGRlcGVuZGVudFZhbHVlID0gb3RoZXJHcm91cC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGVwZW5kZW50LXZhbHVlJyk7XHJcblx0XHRcdFx0aW5wdXRFbGVtZW50c0luc2lkZUdyb3VwLmZvckVhY2goaW5wdXQgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGlucHV0Lm5hbWUgPT09IGdyb3VwRGVwZW5kc09uRmllbGQgJiYgKGlucHV0LnZhbHVlID09PSBkZXBlbmRlbnRWYWx1ZSB8fCBpbnB1dC52YWx1ZS5pbmRleE9mKGRlcGVuZGVudFZhbHVlKSA+PSAwKSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNob3dHcm91cEFuZEl0c0RlcGVuZGVuY2llcyhvdGhlckdyb3VwKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgaXNEZXNjZW5kYW50KHBhcmVudDogRWxlbWVudCwgY2hpbGQ6IEVsZW1lbnQpIHtcclxuXHRcdHZhciBub2RlID0gY2hpbGQucGFyZW50Tm9kZTtcclxuXHRcdHdoaWxlIChub2RlICE9IG51bGwpIHtcclxuXHRcdFx0aWYgKG5vZGUgPT09IHBhcmVudCkge1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdG5vZGUgPSBub2RlLnBhcmVudEVsZW1lbnQ7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxufVxyXG4iLCJpbXBvcnQgQ3VzdG9tRWxlbWVudCBmcm9tICcuLi8uLi9mcmFtZXdvcmsvY3VzdG9tLWVsZW1lbnQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgQ3VzdG9tSW5wdXRFbGVtZW50IH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUlucHV0RWxlbWVudCc7XHJcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tRXZlbnRzJztcclxuaW1wb3J0IFRyYW5zbGF0b3IgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0xhbmd1YWdlL1RyYW5zbGF0b3InO1xyXG5pbXBvcnQgZ2V0QXR0cmlidXRlTmFtZXNQb2x5ZmlsbCBmcm9tICcuLi8uLi9mcmFtZXdvcmsvUG9seWZpbGxzL2dldEF0dHJpYnV0ZU5hbWVzUG9seWZpbGwnO1xyXG5pbXBvcnQgZGVib3VuY2VyIGZyb20gXCIuLi8uLi9mcmFtZXdvcmsvVXRpbGl0aWVzL2RlYm91bmNlclwiO1xyXG5cclxuQEN1c3RvbUVsZW1lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYWRkcmVzcy1lbGVtZW50JyxcclxuXHR0ZW1wbGF0ZTogYFxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiYWRkcmVzcy13cmFwcGVyXCI+XHJcblx0XHRcdFx0PGlucHV0IGNsYXNzPSdhZGRyZXNzLXBhcnQnIGlkPSdhZGRyZXNzJyB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPSdBZGRyZXNzJy8+XHJcblx0XHRcdFx0PGlucHV0IGNsYXNzPSdhZGRyZXNzLXBhcnQnIGlkPSd6aXAnIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9J1ppcCcvPlxyXG5cdFx0XHRcdDxpbnB1dCBjbGFzcz0nYWRkcmVzcy1wYXJ0JyBpZD0nY2l0eScgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj0nQ2l0eScvPlxyXG5cdFx0XHRcdDxpbnB1dCBjbGFzcz0nYWRkcmVzcy1wYXJ0JyBpZD0nY291bnRyeScgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj0nQ291bnRyeScvPlxyXG5cdFx0XHQ8L2Rpdj5gLFxyXG5cdHN0eWxlOiBgLmFkZHJlc3Mtd3JhcHBlcntcclxuXHRcdFx0XHRkaXNwbGF5OiBmbGV4O1xyXG5cdFx0XHRcdGZsZXgtd3JhcDogbm93cmFwO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlucHV0LmFkZHJlc3MtcGFydHtcclxuXHRcdFx0XHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG5cdFx0XHRcdGJvcmRlcjogbm9uZTtcclxuXHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNGZmO1xyXG5cdFx0XHRcdG1hcmdpbjogMnB4O1xyXG5cdFx0XHRcdHJlc2l6ZTogbm9uZTtcclxuXHRcdFx0XHR3aWR0aDozMyUgIWltcG9ydGFudDtcclxuXHRcdFx0fVxyXG5cdFx0YCxcclxuXHR0ZW1wbGF0ZVBhdGg6ICcuL2h0bWwuaHRtbCcsXHJcblx0dXNlU2hhZG93OiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkcmVzc0VsZW1lbnQgZXh0ZW5kcyBDdXN0b21JbnB1dEVsZW1lbnQge1xyXG5cdHByaXZhdGUgYXV0b0NvbXBsZXRlRW5hYmxlZCA9IGZhbHNlO1xyXG5cdHByaXZhdGUgYWRkcmVzc0F1dG9Db21wbGV0ZTogZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZTtcclxuXHRwcml2YXRlIGdvb2dsZVBsYWNlc0xpYnJhcnlFbGVtZW50OiBIVE1MU2NyaXB0RWxlbWVudDtcclxuXHRwcml2YXRlIGdvb2dsZVBsYWNlc0FwaUtleTogc3RyaW5nO1xyXG5cclxuXHRhZGRyZXNzOiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cdGNpdHk6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblx0Y291bnRyeTogSFRNTElucHV0RWxlbWVudDtcclxuXHR6aXA6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHRcdGdldEF0dHJpYnV0ZU5hbWVzUG9seWZpbGwoKTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWx1ZSgpOiBzdHJpbmcge1xyXG5cdFx0bGV0IGFkZHJlc3MgPSB0aGlzLmFkZHJlc3MudmFsdWUgfHwgJyc7XHJcblx0XHRsZXQgY2l0eSA9IHRoaXMuY2l0eS52YWx1ZSA/IGAsJHt0aGlzLmNpdHkudmFsdWV9YCA6ICcnO1xyXG5cdFx0bGV0IHppcCA9IHRoaXMuemlwLnZhbHVlID8gYCwke3RoaXMuemlwLnZhbHVlfWAgOiAnJztcclxuXHRcdGxldCBjb3VudHJ5ID0gdGhpcy5jb3VudHJ5LnZhbHVlID8gYCwke3RoaXMuY291bnRyeS52YWx1ZX1gIDogJyc7XHJcblx0XHRyZXR1cm4gYCR7YWRkcmVzc30ke2NpdHl9JHt6aXB9JHtjb3VudHJ5fWA7XHJcblx0fVxyXG5cclxuXHRzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xyXG5cdFx0Y29uc3QgdmFsdWVzID0gdmFsdWUuc3BsaXQoJywnKTtcclxuXHRcdHRoaXMuYWRkcmVzcy52YWx1ZSA9IHZhbHVlc1swXTtcclxuXHRcdHRoaXMuY2l0eS52YWx1ZSA9IHZhbHVlc1sxXTtcclxuXHRcdHRoaXMuY291bnRyeS52YWx1ZSA9IHZhbHVlc1syXTtcclxuXHRcdHRoaXMuemlwLnZhbHVlID0gdmFsdWVzWzNdO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0dGhpcy5hZGRyZXNzLnZhbGlkaXR5LnZhbGlkICYmXHJcblx0XHRcdHRoaXMuY2l0eS52YWxpZGl0eS52YWxpZCAmJlxyXG5cdFx0XHR0aGlzLmNvdW50cnkudmFsaWRpdHkudmFsaWQgJiZcclxuXHRcdFx0dGhpcy56aXAudmFsaWRpdHkudmFsaWRcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcclxuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XHJcblx0fVxyXG5cclxuXHRjb21wb25lbnREaWRNb3VudCgpIHtcclxuXHRcdHRoaXMuaW5pdENoaWxkSW5wdXRzKCk7XHJcblx0XHR0aGlzLmdldEF0dHJpYnV0ZU5hbWVzKCkuZm9yRWFjaChhdHRyaWJ1dGVOYW1lID0+IHtcclxuXHRcdFx0bGV0IGF0dHJpYnV0ZVZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XHJcblx0XHRcdHRoaXMuYXR0cmlidXRlQ2hhbmdlZChhdHRyaWJ1dGVOYW1lLCBudWxsLCBhdHRyaWJ1dGVWYWx1ZSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGluaXRDaGlsZElucHV0cygpIHtcclxuXHRcdHRoaXMuYWRkcmVzcyA9IHN1cGVyLmdldENoaWxkSW5wdXQoJyNhZGRyZXNzJyk7XHJcblx0XHR0aGlzLmNpdHkgPSBzdXBlci5nZXRDaGlsZElucHV0KCcjY2l0eScpO1xyXG5cdFx0dGhpcy5jb3VudHJ5ID0gc3VwZXIuZ2V0Q2hpbGRJbnB1dCgnI2NvdW50cnknKTtcclxuXHRcdHRoaXMuemlwID0gc3VwZXIuZ2V0Q2hpbGRJbnB1dCgnI3ppcCcpO1xyXG5cdFx0Y29uc3QgYWRkcmVzc0NoYW5lRGVib3VuY2UgPSBkZWJvdW5jZXIodGhpcy5jaGFuZ2UuYmluZCh0aGlzKSwgNDAwLCBmYWxzZSk7XHJcblx0XHR0aGlzLmFkZHJlc3MuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xyXG5cdFx0XHRhZGRyZXNzQ2hhbmVEZWJvdW5jZSgpO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmNpdHkuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5jaGFuZ2UuYmluZCh0aGlzKSk7XHJcblx0XHR0aGlzLmNvdW50cnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5jaGFuZ2UuYmluZCh0aGlzKSk7XHJcblx0XHR0aGlzLnppcC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHJcblx0XHRpZiAodGhpcy5yZXF1aXJlZCkge1xyXG5cdFx0XHR0aGlzLmFkZHJlc3Muc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsICcnKTtcclxuXHRcdFx0dGhpcy5jaXR5LnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAnJyk7XHJcblx0XHRcdHRoaXMuY291bnRyeS5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJycpO1xyXG5cdFx0XHR0aGlzLnppcC5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJycpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gZXZlbnRzXHJcblx0cHVibGljIGNoYW5nZSgkZXZlbnQpOiB2b2lkIHtcclxuXHRcdHRoaXMudG91Y2hlZCA9IHRydWU7XHJcblx0XHR0aGlzLm9uQ2hhbmdlLmVtaXQobmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ2NoYW5nZScpKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB2YWxpZGF0ZSgpOiB2b2lkIHtcclxuXHRcdHRoaXMudmFsaWQ7XHJcblx0XHR0aGlzLm9uVmFsaWRhdGUuZW1pdChcclxuXHRcdFx0bmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ3ZhbGlkYXRlJyksXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y2hhbmdlTGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZykge1xyXG5cdFx0aWYgKCF0aGlzLmFkZHJlc3MgfHwgIXRoaXMuY2l0eSB8fCAhdGhpcy5jb3VudHJ5IHx8ICF0aGlzLnppcCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLmFkZHJlc3MucGxhY2Vob2xkZXIgPSBUcmFuc2xhdG9yLlRyYW5zbGF0ZSgnQWRkcmVzc0VsZW1lbnQuQWRkcmVzcycsIGxhbmd1YWdlKTtcclxuXHRcdHRoaXMuY2l0eS5wbGFjZWhvbGRlciA9IFRyYW5zbGF0b3IuVHJhbnNsYXRlKCdBZGRyZXNzRWxlbWVudC5DaXR5JywgbGFuZ3VhZ2UpO1xyXG5cdFx0dGhpcy5jb3VudHJ5LnBsYWNlaG9sZGVyID0gVHJhbnNsYXRvci5UcmFuc2xhdGUoJ0FkZHJlc3NFbGVtZW50LkNvdW50cnknLCBsYW5ndWFnZSk7XHJcblx0XHR0aGlzLnppcC5wbGFjZWhvbGRlciA9IFRyYW5zbGF0b3IuVHJhbnNsYXRlKCdBZGRyZXNzRWxlbWVudC5aaXAnLCBsYW5ndWFnZSk7XHJcblx0fVxyXG5cclxuXHRlbmFibGVBdXRvQ29tcGxldGUoKSB7XHJcblx0XHRpZiAoIXRoaXMuZ29vZ2xlUGxhY2VzQXBpS2V5IHx8IHRoaXMuZ29vZ2xlUGxhY2VzQXBpS2V5LnRyaW0oKSA9PT0gJycgfHwgIXRoaXMuYXV0b0NvbXBsZXRlRW5hYmxlZCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdHRoaXMuZ29vZ2xlUGxhY2VzTGlicmFyeUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxTY3JpcHRFbGVtZW50PihgW3NyYz1cImh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9qcz9rZXk9JHt0aGlzLmdvb2dsZVBsYWNlc0FwaUtleX0mbGlicmFyaWVzPXBsYWNlc1wiXWApO1xyXG5cdFx0aWYgKHRoaXMuZ29vZ2xlUGxhY2VzTGlicmFyeUVsZW1lbnQpIHtcclxuXHRcdFx0dGhpcy5nb29nbGVQbGFjZXNMaWJyYXJ5RWxlbWVudEJpbmRMb2FkKCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuZ29vZ2xlUGxhY2VzTGlicmFyeUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuXHRcdHRoaXMuZ29vZ2xlUGxhY2VzTGlicmFyeUVsZW1lbnQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xyXG5cdFx0dGhpcy5nb29nbGVQbGFjZXNMaWJyYXJ5RWxlbWVudC5zcmMgPSBgaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2pzP2tleT0ke3RoaXMuZ29vZ2xlUGxhY2VzQXBpS2V5fSZsaWJyYXJpZXM9cGxhY2VzYDtcclxuXHRcdHdpbmRvdy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMuZ29vZ2xlUGxhY2VzTGlicmFyeUVsZW1lbnQpO1xyXG5cdFx0dGhpcy5nb29nbGVQbGFjZXNMaWJyYXJ5RWxlbWVudEJpbmRMb2FkKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdvb2dsZVBsYWNlc0xpYnJhcnlFbGVtZW50QmluZExvYWQoKSB7XHJcblx0XHR0aGlzLmdvb2dsZVBsYWNlc0xpYnJhcnlFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7XHJcblx0XHRcdHRoaXMuYmluZEF1dG9Db21wbGV0ZSgpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRiaW5kQXV0b0NvbXBsZXRlKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5hZGRyZXNzQXV0b0NvbXBsZXRlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGUodGhpcy5hZGRyZXNzKTtcclxuXHRcdHRoaXMuYWRkcmVzc0F1dG9Db21wbGV0ZS5hZGRMaXN0ZW5lcihcInBsYWNlX2NoYW5nZWRcIiwgdGhpcy5vbkFkZHJlc3NDaGFuZ2VkSGFuZGxlci5iaW5kKHRoaXMpKTtcclxuXHR9XHJcblxyXG5cdG9uQWRkcmVzc0NoYW5nZWRIYW5kbGVyKCkge1xyXG5cdFx0dGhpcy5jaXR5LnZhbHVlID0gJyc7XHJcblx0XHR0aGlzLmNvdW50cnkudmFsdWUgPSAnJztcclxuXHRcdHRoaXMuemlwLnZhbHVlID0gJyc7XHJcblxyXG5cdFx0Y29uc3QgcGxhY2UgPSB0aGlzLmFkZHJlc3NBdXRvQ29tcGxldGUuZ2V0UGxhY2UoKTtcclxuXHRcdGNvbnNvbGUubG9nKHBsYWNlKTtcclxuXHRcdGlmICghcGxhY2UuYWRkcmVzc19jb21wb25lbnRzKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0dGhpcy5hZGRyZXNzLnZhbHVlID0gcGxhY2UubmFtZTtcclxuXHJcblx0XHRjb25zdCBjaXR5Q29tcG9uZW50cyA9IHBsYWNlLmFkZHJlc3NfY29tcG9uZW50cy5maWx0ZXIoY29tcG9uZW50ID0+IHtcclxuXHRcdFx0Y29uc3QgY2l0eVN5bm9ueW1zID0gWydhZG1pbmlzdHJhdGl2ZV9hcmVhX2xldmVsXzEnLCAnbG9jYWxpdHknXTtcclxuXHRcdFx0Y29uc3QgaXNDaXR5Q29tcG9uZW50ID0gY2l0eVN5bm9ueW1zLnNvbWUoY2l0eVN5bm9ueW0gPT4gY29tcG9uZW50LnR5cGVzLmluZGV4T2YoY2l0eVN5bm9ueW0pICE9IC0xKTtcclxuXHRcdFx0cmV0dXJuIGlzQ2l0eUNvbXBvbmVudDtcclxuXHRcdH0pO1xyXG5cdFx0aWYgKGNpdHlDb21wb25lbnRzICYmIGNpdHlDb21wb25lbnRzWzBdKSB7XHJcblx0XHRcdHRoaXMuY2l0eS52YWx1ZSA9IGNpdHlDb21wb25lbnRzW2NpdHlDb21wb25lbnRzLmxlbmd0aCAtIDFdLmxvbmdfbmFtZTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBjb3VudHJ5Q29tcG9uZW50cyA9IHBsYWNlLmFkZHJlc3NfY29tcG9uZW50cy5maWx0ZXIoY29tcG9uZW50ID0+IGNvbXBvbmVudC50eXBlcy5pbmRleE9mKCdjb3VudHJ5JykgIT0gLTEpO1xyXG5cdFx0aWYgKGNvdW50cnlDb21wb25lbnRzICYmIGNvdW50cnlDb21wb25lbnRzWzBdKSB7XHJcblx0XHRcdHRoaXMuY291bnRyeS52YWx1ZSA9IGNvdW50cnlDb21wb25lbnRzW2NvdW50cnlDb21wb25lbnRzLmxlbmd0aCAtIDFdLmxvbmdfbmFtZTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCB6aXBDb21wb25lbnRzID0gcGxhY2UuYWRkcmVzc19jb21wb25lbnRzLmZpbHRlcihjb21wb25lbnQgPT4gY29tcG9uZW50LnR5cGVzLmluZGV4T2YoJ3Bvc3RhbF9jb2RlJykgIT0gLTEpO1xyXG5cdFx0aWYgKHppcENvbXBvbmVudHMgJiYgemlwQ29tcG9uZW50c1swXSkge1xyXG5cdFx0XHR0aGlzLnppcC52YWx1ZSA9IHppcENvbXBvbmVudHNbMF0ubG9uZ19uYW1lO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5jaGFuZ2UobnVsbCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcclxuXHRcdHJldHVybiBbJ2xhbmd1YWdlJywgJ2dvb2dsZS1wbGFjZXMta2V5JywgJ2VuYWJsZS1hdXRvLWNvbXBsZXRlJ107XHJcblx0fVxyXG5cdGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lOiBzdHJpbmcsIG9sZFZhbDogc3RyaW5nLCBuZXdWYWw6IHN0cmluZykge1xyXG5cdFx0dGhpcy5hdHRyaWJ1dGVDaGFuZ2VkKG5hbWUsIG9sZFZhbCwgbmV3VmFsKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBhdHRyaWJ1dGVDaGFuZ2VkKG5hbWU6IHN0cmluZywgb2xkVmFsOiBzdHJpbmcsIG5ld1ZhbDogc3RyaW5nKSB7XHJcblx0XHRzd2l0Y2ggKG5hbWUpIHtcclxuXHRcdFx0Y2FzZSAnbGFuZ3VhZ2UnOlxyXG5cdFx0XHRcdHRoaXMuY2hhbmdlTGFuZ3VhZ2UobmV3VmFsKVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICdnb29nbGUtcGxhY2VzLWtleSc6XHJcblx0XHRcdFx0dGhpcy5nb29nbGVQbGFjZXNBcGlLZXkgPSBuZXdWYWw7XHJcblx0XHRcdFx0dGhpcy5lbmFibGVBdXRvQ29tcGxldGUoKVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICdlbmFibGUtYXV0by1jb21wbGV0ZSc6XHJcblx0XHRcdFx0aWYgKG5ld1ZhbCAmJiBuZXdWYWwgIT0gJ2ZhbHNlJykge1xyXG5cdFx0XHRcdFx0dGhpcy5hdXRvQ29tcGxldGVFbmFibGVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdHRoaXMuZW5hYmxlQXV0b0NvbXBsZXRlKClcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ3VzdG9tRWxlbWVudCBmcm9tICcuLi8uLi9mcmFtZXdvcmsvY3VzdG9tLWVsZW1lbnQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgQ3VzdG9tSW5wdXRFbGVtZW50IH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUlucHV0RWxlbWVudCc7XHJcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tRXZlbnRzJztcclxuaW1wb3J0IEJhbmtBY2NvdW50VmFsaWRhdG9yIGZyb20gJy4uLy4uL2ZyYW1ld29yay9WYWxpZGF0aW9uL1ZhbGlkYXRvcnMvQmFua0FjY291bnQnO1xyXG5pbXBvcnQgQmFua0FjY291bnRSZWdpc3RyYXRpb25OdW1iZXJWYWxpZGF0b3IgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL1ZhbGlkYXRpb24vVmFsaWRhdG9ycy9CYW5rQWNjb3VudFJlZ2lzdHJhdGlvbk51bWJlcic7XHJcbmltcG9ydCBUcmFuc2xhdG9yIGZyb20gJy4uLy4uL2ZyYW1ld29yay9MYW5ndWFnZS9UcmFuc2xhdG9yJztcclxuXHJcbkBDdXN0b21FbGVtZW50KHtcclxuXHRzZWxlY3RvcjogJ2JhbmstZWxlbWVudCcsXHJcblx0dGVtcGxhdGU6IGBcclxuXHRcdFx0PGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuXHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBpZD0ncmVnLW51bWJlci1maWVsZCcgcGxhY2Vob2xkZXI9J0JhbmsgQWNjb3VudCBSZWdpc3RyYXRpb24gTnVtYmVyJy8+XHJcblx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9J2FjY291bnQtZmllbGQnIHBsYWNlaG9sZGVyPSdCYW5rIEFjY291bnQnLz5cclxuXHRcdFx0PC9kaXY+YCxcclxuXHRzdHlsZTogYFxyXG4gICAgOmhvc3R7XHJcbiAgICAgICAgICAgIHdpZHRoOjEwMCU7XHJcbiAgICB9XHJcbiAgICAud3JhcHBlcntcclxuICAgICAgICAgICAgZGlzcGxheTpmbGV4O1xyXG4gICAgfVxyXG4gICAgaW5wdXR7XHJcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjRmZjtcclxuICAgICAgICAgICAgbWFyZ2luOiAycHg7XHJcbiAgICAgICAgICAgIHJlc2l6ZTogbm9uZTtcclxuICAgIH1cclxuICAgICAgICAgICBgLFxyXG5cdHVzZVNoYWRvdzogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhbmtGaWVsZEVsZW1lbnQgZXh0ZW5kcyBDdXN0b21JbnB1dEVsZW1lbnQge1xyXG5cdGFjY291bnQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblx0cmVnTnVtYmVyOiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cdGJhbmtBY2NvdW50VmFsaWRhdG9yOiBCYW5rQWNjb3VudFZhbGlkYXRvciA9IG5ldyBCYW5rQWNjb3VudFZhbGlkYXRvcigpO1xyXG5cdHJlZ051bWJlclZhbGlkYXRvcjogQmFua0FjY291bnRSZWdpc3RyYXRpb25OdW1iZXJWYWxpZGF0b3IgPSBuZXcgQmFua0FjY291bnRSZWdpc3RyYXRpb25OdW1iZXJWYWxpZGF0b3IoKTtcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbHVlKCk6IHN0cmluZyB7XHJcblx0XHRsZXQgYWNjb3VudCA9IHRoaXMuYWNjb3VudC52YWx1ZSB8fCAnJztcclxuXHRcdGxldCByZWdOdW1iZXIgPSB0aGlzLnJlZ051bWJlci52YWx1ZSA/IGAsJHt0aGlzLnJlZ051bWJlci52YWx1ZX1gIDogJyc7XHJcblx0XHRyZXR1cm4gYCR7YWNjb3VudH0ke3JlZ051bWJlcn1gO1xyXG5cdH1cclxuXHJcblx0c2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuXHRcdGNvbnN0IHZhbHVlcyA9IHZhbHVlLnNwbGl0KCcsJyk7XHJcblx0XHR0aGlzLmFjY291bnQudmFsdWUgPSB2YWx1ZXNbMF07XHJcblx0XHR0aGlzLnJlZ051bWJlci52YWx1ZSA9IHZhbHVlc1sxXTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWxpZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdHRoaXMuYmFua0FjY291bnRWYWxpZGF0b3IuaXNTYXRpc2ZpZWRCeShcclxuXHRcdFx0XHR0aGlzLmFjY291bnQudmFsdWUsXHJcblx0XHRcdFx0IXRoaXMucmVxdWlyZWQsXHJcblx0XHRcdCkgJiZcclxuXHRcdFx0dGhpcy5yZWdOdW1iZXJWYWxpZGF0b3IuaXNTYXRpc2ZpZWRCeShcclxuXHRcdFx0XHR0aGlzLnJlZ051bWJlci52YWx1ZSxcclxuXHRcdFx0XHQhdGhpcy5yZXF1aXJlZCxcclxuXHRcdFx0KSAmJlxyXG5cdFx0XHR0aGlzLmFjY291bnQudmFsaWRpdHkudmFsaWQgJiZcclxuXHRcdFx0dGhpcy5yZWdOdW1iZXIudmFsaWRpdHkudmFsaWRcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcclxuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XHJcblx0fVxyXG5cclxuXHRjb21wb25lbnREaWRNb3VudCgpIHtcclxuXHRcdHRoaXMuaW5pdENoaWxkSW5wdXRzKCk7XHJcblx0XHR0aGlzLmdldEF0dHJpYnV0ZU5hbWVzKCkuZm9yRWFjaChhdHRyaWJ1dGVOYW1lID0+IHtcclxuXHRcdFx0bGV0IGF0dHJpYnV0ZVZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XHJcblx0XHRcdHRoaXMuYXR0cmlidXRlQ2hhbmdlZChhdHRyaWJ1dGVOYW1lLCBudWxsLCBhdHRyaWJ1dGVWYWx1ZSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGNoYW5nZUxhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpIHtcclxuXHRcdGlmICghdGhpcy5hY2NvdW50IHx8ICF0aGlzLnJlZ051bWJlcikge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLmFjY291bnQucGxhY2Vob2xkZXIgPSBUcmFuc2xhdG9yLlRyYW5zbGF0ZSgnQmFua0VsZW1lbnQuQWNjb3VudCcsIGxhbmd1YWdlKTtcclxuXHRcdHRoaXMucmVnTnVtYmVyLnBsYWNlaG9sZGVyID0gVHJhbnNsYXRvci5UcmFuc2xhdGUoJ0JhbmtFbGVtZW50LlJlZ2lzdHJhdGlvbk51bWJlcicsIGxhbmd1YWdlKTtcclxuXHR9XHJcblxyXG5cdGluaXRDaGlsZElucHV0cygpIHtcclxuXHRcdHRoaXMuYWNjb3VudCA9IHN1cGVyLmdldENoaWxkSW5wdXQoJyNhY2NvdW50LWZpZWxkJyk7XHJcblx0XHR0aGlzLnJlZ051bWJlciA9IHN1cGVyLmdldENoaWxkSW5wdXQoJyNyZWctbnVtYmVyLWZpZWxkJyk7XHJcblx0XHR0aGlzLmFjY291bnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5jaGFuZ2UuYmluZCh0aGlzKSk7XHJcblx0XHR0aGlzLnJlZ051bWJlci5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHRoaXMuYWNjb3VudC5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJycpO1xyXG5cdFx0XHR0aGlzLnJlZ051bWJlci5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJycpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gZXZlbnRzXHJcblx0cHVibGljIGNoYW5nZSgkZXZlbnQpOiB2b2lkIHtcclxuXHRcdHRoaXMudG91Y2hlZCA9IHRydWU7XHJcblx0XHR0aGlzLm9uQ2hhbmdlLmVtaXQobmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ2NoYW5nZScpKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB2YWxpZGF0ZSgpOiB2b2lkIHtcclxuXHRcdHRoaXMudmFsaWQ7XHJcblx0XHR0aGlzLm9uVmFsaWRhdGUuZW1pdChcclxuXHRcdFx0bmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ3ZhbGlkYXRlJyksXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XHJcblx0XHRyZXR1cm4gWydsYW5ndWFnZSddO1xyXG5cdH1cclxuXHRhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZTogc3RyaW5nLCBvbGRWYWw6IHN0cmluZywgbmV3VmFsOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMuYXR0cmlidXRlQ2hhbmdlZChuYW1lLCBvbGRWYWwsIG5ld1ZhbCk7XHJcblx0fVxyXG5cdHByaXZhdGUgYXR0cmlidXRlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbDogc3RyaW5nLCBuZXdWYWw6IHN0cmluZykge1xyXG5cdFx0c3dpdGNoIChuYW1lKSB7XHJcblx0XHRcdGNhc2UgJ2xhbmd1YWdlJzpcclxuXHRcdFx0XHR0aGlzLmNoYW5nZUxhbmd1YWdlKG5ld1ZhbClcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IEN1c3RvbUVsZW1lbnQgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL2N1c3RvbS1lbGVtZW50LmRlY29yYXRvcic7XHJcbmltcG9ydCB7IEN1c3RvbUlucHV0RWxlbWVudCB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21JbnB1dEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBDdXN0b21FbGVtZW50RXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUV2ZW50cyc7XHJcbmltcG9ydCBDcHJWYWxpZGF0b3IgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL1ZhbGlkYXRpb24vVmFsaWRhdG9ycy9DUFInO1xyXG5cclxuQEN1c3RvbUVsZW1lbnQoe1xyXG5cdHNlbGVjdG9yOiAnY3ByLWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcblx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9J2Nwci1maWVsZCcgcGxhY2Vob2xkZXI9J0RETU1ZWS1TU1NTJy8+XHJcblx0XHRcdDwvZGl2PmAsXHJcblx0c3R5bGU6IGBcclxuICAgIDpob3N0e1xyXG4gICAgICAgICAgICB3aWR0aDoxMDAlO1xyXG4gICAgfVxyXG4gICAgLndyYXBwZXJ7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6ZmxleDtcclxuICAgIH1cclxuICAgIGlucHV0e1xyXG4gICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWY0ZmY7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMnB4O1xyXG4gICAgICAgICAgICByZXNpemU6IG5vbmU7XHJcbiAgICB9XHJcbiAgICAgICAgICAgYCxcclxuXHR1c2VTaGFkb3c6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDUFJFbGVtZW50IGV4dGVuZHMgQ3VzdG9tSW5wdXRFbGVtZW50IHtcclxuXHR0ZXh0OiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cdHZhbGlkYXRvcjogQ3ByVmFsaWRhdG9yID0gbmV3IENwclZhbGlkYXRvcigpO1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsdWUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBgJHt0aGlzLnRleHQudmFsdWV9YDtcclxuXHR9XHJcblxyXG5cdHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcblx0XHR0aGlzLnRleHQudmFsdWUgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWxpZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLnZhbGlkYXRvci5pc1NhdGlzZmllZEJ5KHRoaXMudmFsdWUsICF0aGlzLnJlcXVpcmVkKTtcclxuXHR9XHJcblxyXG5cdGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xyXG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcclxuXHR9XHJcblxyXG5cdGluaXRDaGlsZElucHV0cygpIHtcclxuXHRcdHRoaXMudGV4dCA9IHN1cGVyLmdldENoaWxkSW5wdXQoJyNjcHItZmllbGQnKTtcclxuXHRcdHRoaXMudGV4dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHRoaXMudGV4dC5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJycpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gZXZlbnRzXHJcblx0cHVibGljIGNoYW5nZSgkZXZlbnQpOiB2b2lkIHtcclxuXHRcdHRoaXMudG91Y2hlZCA9IHRydWU7XHJcblx0XHR0aGlzLm9uQ2hhbmdlLmVtaXQobmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ2NoYW5nZScpKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB2YWxpZGF0ZSgpOiB2b2lkIHtcclxuXHRcdHRoaXMudmFsaWQ7XHJcblx0XHR0aGlzLm9uVmFsaWRhdGUuZW1pdChcclxuXHRcdFx0bmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ3ZhbGlkYXRlJyksXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ3VzdG9tRWxlbWVudCBmcm9tICcuLi8uLi9mcmFtZXdvcmsvY3VzdG9tLWVsZW1lbnQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgQ3VzdG9tSW5wdXRFbGVtZW50IH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUlucHV0RWxlbWVudCc7XHJcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tRXZlbnRzJztcclxuaW1wb3J0IENwclZhbGlkYXRvciBmcm9tICcuLi8uLi9mcmFtZXdvcmsvVmFsaWRhdGlvbi9WYWxpZGF0b3JzL0NQUic7XHJcbmltcG9ydCBDdnJWYWxpZGF0b3IgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL1ZhbGlkYXRpb24vVmFsaWRhdG9ycy9DVlInO1xyXG5cclxuQEN1c3RvbUVsZW1lbnQoe1xyXG5cdHNlbGVjdG9yOiAnY3ZyLWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcblx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9J2N2ci1maWVsZCcgcGxhY2Vob2xkZXI9J1NTU1NTU1NTJy8+XHJcblx0XHRcdDwvZGl2PmAsXHJcblx0c3R5bGU6IGBcclxuICAgIDpob3N0e1xyXG4gICAgICAgICAgICB3aWR0aDoxMDAlO1xyXG4gICAgfVxyXG4gICAgLndyYXBwZXJ7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6ZmxleDtcclxuICAgIH1cclxuICAgIGlucHV0e1xyXG4gICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWY0ZmY7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMnB4O1xyXG4gICAgICAgICAgICByZXNpemU6IG5vbmU7XHJcbiAgICB9XHJcbiAgICAgICAgICAgYCxcclxuXHR1c2VTaGFkb3c6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDVlJFbGVtZW50IGV4dGVuZHMgQ3VzdG9tSW5wdXRFbGVtZW50IHtcclxuXHR0ZXh0OiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cdHZhbGlkYXRvcjogQ3ZyVmFsaWRhdG9yID0gbmV3IEN2clZhbGlkYXRvcigpO1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsdWUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBgJHt0aGlzLnRleHQudmFsdWV9YDtcclxuXHR9XHJcblxyXG5cdHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcblx0XHR0aGlzLnRleHQudmFsdWUgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWxpZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLnZhbGlkYXRvci5pc1NhdGlzZmllZEJ5KHRoaXMudmFsdWUsICF0aGlzLnJlcXVpcmVkKTtcclxuXHR9XHJcblxyXG5cdGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xyXG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcclxuXHR9XHJcblxyXG5cdGluaXRDaGlsZElucHV0cygpIHtcclxuXHRcdHRoaXMudGV4dCA9IHN1cGVyLmdldENoaWxkSW5wdXQoJyNjdnItZmllbGQnKTtcclxuXHRcdHRoaXMudGV4dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHRoaXMudGV4dC5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJycpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gZXZlbnRzXHJcblx0cHVibGljIGNoYW5nZSgkZXZlbnQpOiB2b2lkIHtcclxuXHRcdHRoaXMudG91Y2hlZCA9IHRydWU7XHJcblx0XHR0aGlzLm9uQ2hhbmdlLmVtaXQobmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ2NoYW5nZScpKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB2YWxpZGF0ZSgpOiB2b2lkIHtcclxuXHRcdHRoaXMudmFsaWQ7XHJcblx0XHR0aGlzLm9uVmFsaWRhdGUuZW1pdChcclxuXHRcdFx0bmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ3ZhbGlkYXRlJyksXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ3VzdG9tRWxlbWVudCBmcm9tICcuLi8uLi9mcmFtZXdvcmsvY3VzdG9tLWVsZW1lbnQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgQ3VzdG9tSW5wdXRFbGVtZW50IH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUlucHV0RWxlbWVudCc7XHJcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tRXZlbnRzJztcclxuaW1wb3J0IHsgU3RyaW5nVXRpbCB9IGZyb20gJ0BsdWZ0Ym9ybi91dGlsaXRpZXMnO1xyXG5cclxuQEN1c3RvbUVsZW1lbnQoe1xyXG5cdHNlbGVjdG9yOiAnY2hlY2tib3gtZWxlbWVudCcsXHJcblx0dGVtcGxhdGU6IGBcclxuXHRcdFx0PGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuXHRcdFx0PC9kaXY+YCxcclxuXHRzdHlsZTogYFxyXG5cdFx0XHQ6aG9zdHtcclxuXHRcdFx0XHR3aWR0aDoxMDAlO1xyXG5cdFx0XHR9XHJcblx0XHRcdC5jaGVja2JveCB7XHJcblx0XHRcdFx0d2lkdGg6IGF1dG87XHJcblx0XHRcdFx0bWFyZ2luOiBhdXRvIDNweDtcclxuXHRcdFx0XHRjb2xvcjogcmdiYSg3MiwgNzIsIDcyLCAwLjc1KTtcclxuXHRcdFx0XHRmb250LXNpemU6IDEzcHg7XHJcblx0XHRcdH1cclxuXHRcdFx0aW5wdXRbdHlwZT0nY2hlY2tib3gnXXtcclxuXHRcdFx0XHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG5cdFx0XHRcdHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XHJcblx0XHRcdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmMWY0ZmY7XHJcblx0XHRcdFx0bWFyZ2luOiAycHg7XHJcblx0XHRcdFx0cmVzaXplOiBub25lO1xyXG5cdFx0XHR9XHJcblx0XHRgLFxyXG5cdHVzZVNoYWRvdzogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENoZWNrQm94RWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0Y2hlY2tib3g6IEhUTUxJbnB1dEVsZW1lbnRbXTtcclxuXHRjaGVja2JveFRlbXBsYXRlID0gYFxyXG5cdDxkaXYgY2xhc3M9J2NoZWNrYm94Jz5cclxuXHRcdDxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0nezB9JyB2YWx1ZT1cInsxfVwiIGlkPVwiezJ9XCIvPlxyXG5cdFx0PGxhYmVsIGZvcj1cInsyfVwiPnsxfTwvbGFiZWw+XHJcblx0PC9kaXY+YDtcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbHVlKCk6IHN0cmluZ1tdIHtcclxuXHRcdHJldHVybiB0aGlzLmNoZWNrYm94LmZpbHRlcihjID0+IGMuY2hlY2tlZCkubWFwKGMgPT4gYy52YWx1ZSk7XHJcblx0fVxyXG5cclxuXHRzZXQgdmFsdWUodmFsdWVzOiBzdHJpbmdbXSkge1xyXG5cdFx0Ly8gdGhpcy5jaGVja2JveC52YWx1ZSA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKHRoaXMucmVxdWlyZWQpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMudmFsdWUubGVuZ3RoID4gMDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xyXG5cdH1cclxuXHJcblx0aW5pdENoaWxkSW5wdXRzKCkge1xyXG5cdFx0dGhpcy5hZGRDaGVja0JveGVzKCk7XHJcblx0XHR0aGlzLmNoZWNrYm94ID0gc3VwZXIuZ2V0Q2hpbGRJbnB1dHMoYFtuYW1lPScke3RoaXMubmFtZX0nXWApO1xyXG5cdFx0dGhpcy5jaGVja2JveC5mb3JFYWNoKGMgPT5cclxuXHRcdFx0Yy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKSxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFkZENoZWNrQm94ZXMoKSB7XHJcblx0XHRjb25zdCB3cmFwcGVyID0gc3VwZXIuZ2V0Q2hpbGRFbGVtZW50KCcud3JhcHBlcicpO1xyXG5cdFx0dGhpcy5vcHRpb25zLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XHJcblx0XHRcdHdyYXBwZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKFxyXG5cdFx0XHRcdCdiZWZvcmVlbmQnLFxyXG5cdFx0XHRcdFN0cmluZ1V0aWwuU3RyaW5nRm9ybWF0KFxyXG5cdFx0XHRcdFx0dGhpcy5jaGVja2JveFRlbXBsYXRlLFxyXG5cdFx0XHRcdFx0dGhpcy5uYW1lLFxyXG5cdFx0XHRcdFx0ZWxlbWVudCxcclxuXHRcdFx0XHRcdGAke3RoaXMubmFtZX0tJHtpbmRleH1gLFxyXG5cdFx0XHRcdCksXHJcblx0XHRcdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0Ly8gZXZlbnRzXHJcblx0cHVibGljIGNoYW5nZSgkZXZlbnQpOiB2b2lkIHtcclxuXHRcdHRoaXMudG91Y2hlZCA9IHRydWU7XHJcblx0XHR0aGlzLm9uQ2hhbmdlLmVtaXQobmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ2NoYW5nZScpKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB2YWxpZGF0ZSgpOiB2b2lkIHtcclxuXHRcdHRoaXMudmFsaWQ7XHJcblx0XHR0aGlzLm9uVmFsaWRhdGUuZW1pdChcclxuXHRcdFx0bmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ3ZhbGlkYXRlJyksXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ3VzdG9tRWxlbWVudCBmcm9tICcuLi8uLi9mcmFtZXdvcmsvY3VzdG9tLWVsZW1lbnQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgQ3VzdG9tSW5wdXRFbGVtZW50IH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUlucHV0RWxlbWVudCc7XHJcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tRXZlbnRzJztcclxuXHJcbkBDdXN0b21FbGVtZW50KHtcclxuXHRzZWxlY3RvcjogJ3JlZ2V4LWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcblx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9J3JlZ2V4LWZpZWxkJy8+XHJcblx0XHRcdDwvZGl2PmAsXHJcblx0c3R5bGU6IGBcclxuICAgIDpob3N0e1xyXG4gICAgICAgICAgICB3aWR0aDoxMDAlO1xyXG4gICAgfVxyXG4gICAgLndyYXBwZXJ7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6ZmxleDtcclxuICAgIH1cclxuICAgIGlucHV0e1xyXG4gICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWY0ZmY7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMnB4O1xyXG4gICAgICAgICAgICByZXNpemU6IG5vbmU7XHJcbiAgICB9XHJcbiAgICAgICAgICAgYCxcclxuXHR1c2VTaGFkb3c6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21SZWd1bGFyRXhwcmVzc2lvbkVsZW1lbnQgZXh0ZW5kcyBDdXN0b21JbnB1dEVsZW1lbnQge1xyXG5cdHRleHQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWx1ZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGAke3RoaXMudGV4dC52YWx1ZX1gO1xyXG5cdH1cclxuXHJcblx0c2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMudGV4dC52YWx1ZSA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMudGV4dC52YWxpZGl0eS52YWxpZDtcclxuXHR9XHJcblxyXG5cdGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xyXG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcclxuXHR9XHJcblxyXG5cdGluaXRDaGlsZElucHV0cygpIHtcclxuXHRcdHRoaXMudGV4dCA9IHN1cGVyLmdldENoaWxkSW5wdXQoJyNyZWdleC1maWVsZCcpO1xyXG5cdFx0dGhpcy50ZXh0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuY2hhbmdlLmJpbmQodGhpcykpO1xyXG5cdFx0aWYgKHRoaXMucmVxdWlyZWQpIHtcclxuXHRcdFx0dGhpcy50ZXh0LnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAnJyk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5jdXN0b21WYWx1ZSkge1xyXG5cdFx0XHR0aGlzLnRleHQuc2V0QXR0cmlidXRlKCdwYXR0ZXJuJywgdGhpcy5jdXN0b21WYWx1ZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBldmVudHNcclxuXHRwdWJsaWMgY2hhbmdlKCRldmVudCk6IHZvaWQge1xyXG5cdFx0dGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuXHRcdHRoaXMub25DaGFuZ2UuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAnY2hhbmdlJykpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xyXG5cdFx0dGhpcy52YWxpZDtcclxuXHRcdHRoaXMub25WYWxpZGF0ZS5lbWl0KFxyXG5cdFx0XHRuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAndmFsaWRhdGUnKSxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDdXN0b21FbGVtZW50IGZyb20gJy4uLy4uL2ZyYW1ld29yay9jdXN0b20tZWxlbWVudC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dEVsZW1lbnQgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tSW5wdXRFbGVtZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21FdmVudHMnO1xyXG5cclxuQEN1c3RvbUVsZW1lbnQoe1xyXG5cdHNlbGVjdG9yOiAnZGF0ZS1lbGVtZW50JyxcclxuXHR0ZW1wbGF0ZTogYFxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG5cdFx0XHRcdDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGlkPSdkYXRlLWZpZWxkJy8+XHJcblx0XHRcdDwvZGl2PmAsXHJcblx0c3R5bGU6IGBcclxuICAgIDpob3N0e1xyXG4gICAgICAgICAgICB3aWR0aDoxMDAlO1xyXG4gICAgfVxyXG4gICAgLndyYXBwZXJ7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6ZmxleDtcclxuICAgIH1cclxuICAgIGlucHV0e1xyXG4gICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWY0ZmY7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMnB4O1xyXG4gICAgICAgICAgICByZXNpemU6IG5vbmU7XHJcbiAgICB9XHJcbiAgICAgICAgICAgYCxcclxuXHR1c2VTaGFkb3c6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRlRmllbGRFbGVtZW50IGV4dGVuZHMgQ3VzdG9tSW5wdXRFbGVtZW50IHtcclxuXHRkYXRlOiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsdWUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGUudmFsdWU7XHJcblx0fVxyXG5cclxuXHRzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xyXG5cdFx0dGhpcy5kYXRlLnZhbHVlID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5kYXRlLnZhbGlkaXR5LnZhbGlkO1xyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xyXG5cdH1cclxuXHJcblx0aW5pdENoaWxkSW5wdXRzKCkge1xyXG5cdFx0dGhpcy5kYXRlID0gc3VwZXIuZ2V0Q2hpbGRJbnB1dCgnI2RhdGUtZmllbGQnKTtcclxuXHRcdHRoaXMuZGF0ZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHRoaXMuZGF0ZS5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJycpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMubWF4KSB7XHJcblx0XHRcdHRoaXMuZGF0ZS5zZXRBdHRyaWJ1dGUoJ21heCcsIHRoaXMubWF4KTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLm1pbikge1xyXG5cdFx0XHR0aGlzLmRhdGUuc2V0QXR0cmlidXRlKCdtaW4nLCB0aGlzLm1pbik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBldmVudHNcclxuXHRwdWJsaWMgY2hhbmdlKCRldmVudCk6IHZvaWQge1xyXG5cdFx0dGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuXHRcdHRoaXMub25DaGFuZ2UuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAnY2hhbmdlJykpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xyXG5cdFx0dGhpcy52YWxpZDtcclxuXHRcdHRoaXMub25WYWxpZGF0ZS5lbWl0KFxyXG5cdFx0XHRuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAndmFsaWRhdGUnKSxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDdXN0b21FbGVtZW50IGZyb20gJy4uLy4uL2ZyYW1ld29yay9jdXN0b20tZWxlbWVudC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dEVsZW1lbnQgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tSW5wdXRFbGVtZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21FdmVudHMnO1xyXG5pbXBvcnQgeyBTdHJpbmdVdGlsIH0gZnJvbSAnQGx1ZnRib3JuL3V0aWxpdGllcyc7XHJcblxyXG5AQ3VzdG9tRWxlbWVudCh7XHJcblx0c2VsZWN0b3I6ICdkcm9wLWRvd24tZWxlbWVudCcsXHJcblx0dGVtcGxhdGU6IGBcclxuXHRcdFx0PGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0nc2VsZWN0LWxpc3QnPlxyXG5cdFx0XHQgICA8b3B0aW9uIHNlbGVjdGVkIGRpc2FibGVkPi08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcblx0XHRcdDwvZGl2PmAsXHJcblx0c3R5bGU6IGBcclxuICAgICAgICAgICAgOmhvc3R7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDoxMDAlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC53cmFwcGVye1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTpmbGV4O1xyXG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLnJhZGlvLWJ1dHRvbiB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogYXV0bztcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogYXV0byAzcHg7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICAgICAgZmxleC1ncm93OiAwLjE7XHJcbiAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZWxlY3R7XHJcbiAgICAgICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWY0ZmY7XHJcbiAgICAgICAgICAgICAgICBtYXJnaW46IDJweDtcclxuICAgICAgICAgICAgICAgIHJlc2l6ZTogbm9uZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIGAsXHJcblx0dXNlU2hhZG93OiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJvcERvd25MaXN0RWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0c2VsZWN0OiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cdG9wdGlvblRlbXBsYXRlID0gYFxyXG4gICAgPG9wdGlvbiB2YWx1ZT0nezB9Jz5cclxuICAgICAgIHsxfVxyXG4gICAgPC9vcHRpb24+YDtcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbHVlKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gYCR7dGhpcy5zZWxlY3QudmFsdWV9YDtcclxuXHR9XHJcblxyXG5cdHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcblx0XHR0aGlzLnNlbGVjdC52YWx1ZSA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2VsZWN0LnZhbGlkaXR5LnZhbGlkO1xyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xyXG5cdH1cclxuXHJcblx0aW5pdENoaWxkSW5wdXRzKCkge1xyXG5cdFx0dGhpcy5zZWxlY3QgPSBzdXBlci5nZXRDaGlsZElucHV0KGAjc2VsZWN0LWxpc3RgKTtcclxuXHRcdHRoaXMuYWRkT3B0aW9ucygpO1xyXG5cdFx0aWYgKHRoaXMucmVxdWlyZWQpIHtcclxuXHRcdFx0dGhpcy5zZWxlY3Quc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsICcnKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLm11bHRpKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0LnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnJyk7XHJcblx0XHR9XHJcblx0XHR0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYWRkT3B0aW9ucygpIHtcclxuXHRcdHRoaXMub3B0aW9ucy5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xyXG5cdFx0XHR0aGlzLnNlbGVjdC5pbnNlcnRBZGphY2VudEhUTUwoXHJcblx0XHRcdFx0J2JlZm9yZWVuZCcsXHJcblx0XHRcdFx0U3RyaW5nVXRpbC5TdHJpbmdGb3JtYXQodGhpcy5vcHRpb25UZW1wbGF0ZSwgZWxlbWVudCwgZWxlbWVudCksXHJcblx0XHRcdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0Ly8gZXZlbnRzXHJcblx0cHVibGljIGNoYW5nZSgkZXZlbnQpOiB2b2lkIHtcclxuXHRcdHRoaXMudG91Y2hlZCA9IHRydWU7XHJcblx0XHR0aGlzLm9uQ2hhbmdlLmVtaXQobmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ2NoYW5nZScpKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB2YWxpZGF0ZSgpOiB2b2lkIHtcclxuXHRcdHRoaXMudmFsaWQ7XHJcblx0XHR0aGlzLm9uVmFsaWRhdGUuZW1pdChcclxuXHRcdFx0bmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ3ZhbGlkYXRlJyksXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBZGRyZXNzRWxlbWVudCB9IGZyb20gJy4vQWRkcmVzcy9BZGRyZXNzRWxlbWVudCc7XHJcbmltcG9ydCB7IFRleHRGaWVsZEVsZW1lbnQgfSBmcm9tICcuL1RleHRGaWVsZC9UZXh0RmllbGRFbGVtZW50JztcclxuaW1wb3J0IHsgRW1haWxGaWVsZEVsZW1lbnQgfSBmcm9tICcuL0VtYWlsRmllbGQvRW1haWxGaWVsZEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBDaGVja0JveEVsZW1lbnQgfSBmcm9tICcuL0NoZWNrQm94RWxlbWVudC9DaGVja0JveEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBSYWRpb0J1dHRvbkdyb3VwRWxlbWVudCB9IGZyb20gJy4vUmFkaW9CdXR0b25Hcm91cC9SYWRpb0J1dHRvbkdyb3VwRWxlbWVudCc7XHJcbmltcG9ydCB7IFRleHRBcmVhRWxlbWVudCB9IGZyb20gJy4vVGV4dEFyZWFFbGVtZW50L1RleHRBcmVhRWxlbWVudCc7XHJcbmltcG9ydCB7IERyb3BEb3duTGlzdEVsZW1lbnQgfSBmcm9tICcuL0Ryb3BEb3duTGlzdC9Ecm9wRG93bkxpc3RFbGVtZW50JztcclxuaW1wb3J0IHsgRmlsZUZpZWxkRWxlbWVudCB9IGZyb20gJy4vRmlsZUZpZWxkL0ZpbGVGaWVsZEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBOdW1lcmljRmllbGRFbGVtZW50IH0gZnJvbSAnLi9OdW1lcmljRmllbGQvTnVtZXJpY0ZpZWxkRWxlbWVudCc7XHJcbmltcG9ydCB7IEN1c3RvbVJlZ3VsYXJFeHByZXNzaW9uRWxlbWVudCB9IGZyb20gJy4vQ3VzdG9tUmVndWxhckV4cHJlc3Npb24vQ3VzdG9tUmVndWxhckV4cHJlc3Npb25FbGVtZW50JztcclxuaW1wb3J0IHsgRGF0ZUZpZWxkRWxlbWVudCB9IGZyb20gJy4vRGF0ZUZpZWxkL0RhdGVGaWVsZEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBJbnRQaG9uZUZpZWxkRWxlbWVudCB9IGZyb20gJy4vSW50ZXJuYXRpb25hUGhvbmVOdW1iZXIvSW50ZXJuYXRpb25hUGhvbmVOdW1iZXJFbGVtZW50JztcclxuaW1wb3J0IHsgQ1BSRWxlbWVudCB9IGZyb20gJy4vQ1BSRWxlbWVudC9DUFJFbGVtZW50JztcclxuaW1wb3J0IHsgQ1ZSRWxlbWVudCB9IGZyb20gJy4vQ1ZSRWxlbWVudC9DVlJFbGVtZW50JztcclxuaW1wb3J0IHsgSWRlbnRpZmljYXRpb25FbGVtZW50IH0gZnJvbSAnLi9JZGVudGlmaWNhdGlvbkVsZW1lbnQvSWRlbnRpZmljYXRpb25FbGVtZW50JztcclxuaW1wb3J0IHsgQmFua0ZpZWxkRWxlbWVudCB9IGZyb20gJy4vQmFua0ZpZWxkL0JhbmtGaWVsZEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBUeXBlQWhlYWRFbGVtZW50IH0gZnJvbSAnLi9UeXBlQWhlYWQvVHlwZUFoZWFkRWxlbWVudCc7XHJcblxyXG5leHBvcnQge1xyXG5cdEFkZHJlc3NFbGVtZW50LFxyXG5cdFRleHRGaWVsZEVsZW1lbnQsXHJcblx0RW1haWxGaWVsZEVsZW1lbnQsXHJcblx0Q2hlY2tCb3hFbGVtZW50LFxyXG5cdFJhZGlvQnV0dG9uR3JvdXBFbGVtZW50LFxyXG5cdFRleHRBcmVhRWxlbWVudCxcclxuXHREcm9wRG93bkxpc3RFbGVtZW50LFxyXG5cdEZpbGVGaWVsZEVsZW1lbnQsXHJcblx0TnVtZXJpY0ZpZWxkRWxlbWVudCxcclxuXHRDdXN0b21SZWd1bGFyRXhwcmVzc2lvbkVsZW1lbnQsXHJcblx0RGF0ZUZpZWxkRWxlbWVudCxcclxuXHRJbnRQaG9uZUZpZWxkRWxlbWVudCxcclxuXHRDUFJFbGVtZW50LFxyXG5cdENWUkVsZW1lbnQsXHJcblx0SWRlbnRpZmljYXRpb25FbGVtZW50LFxyXG5cdEJhbmtGaWVsZEVsZW1lbnQsXHJcblx0VHlwZUFoZWFkRWxlbWVudFxyXG59O1xyXG4iLCJpbXBvcnQgQ3VzdG9tRWxlbWVudCBmcm9tICcuLi8uLi9mcmFtZXdvcmsvY3VzdG9tLWVsZW1lbnQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgQ3VzdG9tSW5wdXRFbGVtZW50IH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUlucHV0RWxlbWVudCc7XHJcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tRXZlbnRzJztcclxuXHJcbkBDdXN0b21FbGVtZW50KHtcclxuXHRzZWxlY3RvcjogJ2VtYWlsLWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcblx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9J2VtYWlsLWZpZWxkJy8+XHJcblx0XHRcdDwvZGl2PmAsXHJcblx0c3R5bGU6IGBcclxuICAgIDpob3N0e1xyXG4gICAgICAgICAgICB3aWR0aDoxMDAlO1xyXG4gICAgfVxyXG4gICAgLndyYXBwZXJ7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6ZmxleDtcclxuICAgIH1cclxuICAgIGlucHV0e1xyXG4gICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWY0ZmY7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMnB4O1xyXG4gICAgICAgICAgICByZXNpemU6IG5vbmU7XHJcbiAgICB9XHJcbiAgICAgICAgICAgYCxcclxuXHR1c2VTaGFkb3c6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbWFpbEZpZWxkRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0bWFpbFJlZ2V4OiBSZWdFeHAgPSBuZXcgUmVnRXhwKFxyXG5cdFx0L14oW2EtekEtWjAtOcOGw5jDhcOmw7jDpV8uKy1dKStcXEAoKFthLXpBLVowLTnDhsOYw4XDpsO4w6UtXSkrXFwuKSsoW2EtekEtWjAtOcOGw5jDhcOmw7jDpV17Miw0fSkrJC8sXHJcblx0KTtcclxuXHJcblx0ZW1haWw6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWx1ZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGAke3RoaXMuZW1haWwudmFsdWV9YDtcclxuXHR9XHJcblxyXG5cdHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcblx0XHR0aGlzLmVtYWlsLnZhbHVlID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcblx0XHRjb25zdCBwYXR0ZXJuVmFsaWQgPSAhdGhpcy52YWx1ZSB8fCB0aGlzLm1haWxSZWdleC50ZXN0KHRoaXMudmFsdWUpO1xyXG5cdFx0cmV0dXJuIHRoaXMuZW1haWwudmFsaWRpdHkudmFsaWQgJiYgcGF0dGVyblZhbGlkO1xyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHR0aGlzLmluaXRDaGlsZElucHV0cygpO1xyXG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcclxuXHR9XHJcblxyXG5cdGluaXRDaGlsZElucHV0cygpIHtcclxuXHRcdHRoaXMuZW1haWwgPSBzdXBlci5nZXRDaGlsZElucHV0KCcjZW1haWwtZmllbGQnKTtcclxuXHRcdHRoaXMuZW1haWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5jaGFuZ2UuYmluZCh0aGlzKSk7XHJcblx0XHRpZiAodGhpcy5yZXF1aXJlZCkge1xyXG5cdFx0XHR0aGlzLmVtYWlsLnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAnJyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBldmVudHNcclxuXHRwdWJsaWMgY2hhbmdlKCRldmVudCk6IHZvaWQge1xyXG5cdFx0dGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuXHRcdHRoaXMub25DaGFuZ2UuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAnY2hhbmdlJykpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xyXG5cdFx0dGhpcy52YWxpZDtcclxuXHRcdHRoaXMub25WYWxpZGF0ZS5lbWl0KFxyXG5cdFx0XHRuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAndmFsaWRhdGUnKSxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDdXN0b21FbGVtZW50IGZyb20gJy4uLy4uL2ZyYW1ld29yay9jdXN0b20tZWxlbWVudC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dEVsZW1lbnQgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tSW5wdXRFbGVtZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21FdmVudHMnO1xyXG5cclxuQEN1c3RvbUVsZW1lbnQoe1xyXG5cdHNlbGVjdG9yOiAnZmlsZS1lbGVtZW50JyxcclxuXHR0ZW1wbGF0ZTogYFxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG5cdFx0XHRcdDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPSdmaWxlLWZpZWxkJyBhY2NlcHQ9XCJpbWFnZS8qLGFwcGxpY2F0aW9uL3BkZlwiLz5cclxuXHRcdFx0PC9kaXY+YCxcclxuXHRzdHlsZTogYFxyXG4gICAgOmhvc3R7XHJcbiAgICAgICAgICAgIHdpZHRoOjEwMCU7XHJcbiAgICB9XHJcbiAgICAud3JhcHBlcntcclxuICAgICAgICAgICAgZGlzcGxheTpmbGV4O1xyXG4gICAgfVxyXG4gICAgaW5wdXR7XHJcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjRmZjtcclxuICAgICAgICAgICAgbWFyZ2luOiAycHg7XHJcbiAgICAgICAgICAgIHJlc2l6ZTogbm9uZTtcclxuICAgIH1cclxuICAgICAgICAgICBgLFxyXG5cdHVzZVNoYWRvdzogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbGVGaWVsZEVsZW1lbnQgZXh0ZW5kcyBDdXN0b21JbnB1dEVsZW1lbnQge1xyXG5cdGZpbGU6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWx1ZSgpOiBGaWxlTGlzdCB7XHJcblx0XHRyZXR1cm4gdGhpcy5maWxlLmZpbGVzO1xyXG5cdH1cclxuXHJcblx0c2V0IHZhbHVlKGZpbGVzOiBGaWxlTGlzdCkge1xyXG5cdFx0dGhpcy5maWxlLmZpbGVzID0gZmlsZXM7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5maWxlLnZhbGlkaXR5LnZhbGlkO1xyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHR0aGlzLmluaXRDaGlsZElucHV0cygpO1xyXG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcclxuXHR9XHJcblxyXG5cdGluaXRDaGlsZElucHV0cygpIHtcclxuXHRcdHRoaXMuZmlsZSA9IHN1cGVyLmdldENoaWxkSW5wdXQoJyNmaWxlLWZpZWxkJyk7XHJcblx0XHR0aGlzLmZpbGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5jaGFuZ2UuYmluZCh0aGlzKSk7XHJcblx0XHRpZiAodGhpcy5yZXF1aXJlZCkge1xyXG5cdFx0XHR0aGlzLmZpbGUuc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsICcnKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLm11bHRpKSB7XHJcblx0XHRcdHRoaXMuZmlsZS5zZXRBdHRyaWJ1dGUoJ211bHRpcGxlJywgJycpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gZXZlbnRzXHJcblx0cHVibGljIGNoYW5nZSgkZXZlbnQpOiB2b2lkIHtcclxuXHRcdHRoaXMudG91Y2hlZCA9IHRydWU7XHJcblx0XHR0aGlzLm9uQ2hhbmdlLmVtaXQobmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ2NoYW5nZScpKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB2YWxpZGF0ZSgpOiB2b2lkIHtcclxuXHRcdHRoaXMudmFsaWQ7XHJcblx0XHR0aGlzLm9uVmFsaWRhdGUuZW1pdChcclxuXHRcdFx0bmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ3ZhbGlkYXRlJyksXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ3VzdG9tRWxlbWVudCBmcm9tICcuLi8uLi9mcmFtZXdvcmsvY3VzdG9tLWVsZW1lbnQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgQ3VzdG9tSW5wdXRFbGVtZW50IH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUlucHV0RWxlbWVudCc7XHJcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tRXZlbnRzJztcclxuaW1wb3J0IENwclZhbGlkYXRvciBmcm9tICcuLi8uLi9mcmFtZXdvcmsvVmFsaWRhdGlvbi9WYWxpZGF0b3JzL0NQUic7XHJcbmltcG9ydCBJVmFsaWRhdG9yIGZyb20gJy4uLy4uL2ZyYW1ld29yay9WYWxpZGF0aW9uL0lWYWxpZGF0b3IuaW50ZXJmYWNlJztcclxuaW1wb3J0IEN2clZhbGlkYXRvciBmcm9tICcuLi8uLi9mcmFtZXdvcmsvVmFsaWRhdGlvbi9WYWxpZGF0b3JzL0NWUic7XHJcbmltcG9ydCBCYW5rSWRTd2VkZW5WYWxpZGF0b3IgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL1ZhbGlkYXRpb24vVmFsaWRhdG9ycy9CYW5rSWRTd2VkZW4nO1xyXG5pbXBvcnQgQmFua0lkTm9yd2F5VmFsaWRhdG9yIGZyb20gJy4uLy4uL2ZyYW1ld29yay9WYWxpZGF0aW9uL1ZhbGlkYXRvcnMvQmFua0lkTm9yd2F5JztcclxuXHJcbkBDdXN0b21FbGVtZW50KHtcclxuXHRzZWxlY3RvcjogJ2lkLWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPSdpZC10eXBlJz5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSdjdnInPkRhbmlzaCBDVlI8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSdjcHInPkRhbmlzaCBDUFI8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSdzd2UnPlN3ZWRlbiBCYW5rIElkPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nbm9yJz5Ob3J3YXkgQmFuayBJZDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcblx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9J2lkLWZpZWxkJyBwbGFjZWhvbGRlcj0nJy8+XHJcblx0XHRcdDwvZGl2PmAsXHJcblx0c3R5bGU6IGBcclxuICAgIDpob3N0e1xyXG4gICAgICAgICAgICB3aWR0aDoxMDAlO1xyXG4gICAgfVxyXG4gICAgLndyYXBwZXJ7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6ZmxleDtcclxuICAgIH1cclxuICAgIGlucHV0LCBzZWxlY3R7XHJcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjRmZjtcclxuICAgICAgICAgICAgbWFyZ2luOiAycHg7XHJcbiAgICAgICAgICAgIHJlc2l6ZTogbm9uZTtcclxuICAgIH1cclxuICAgIGlucHV0e1xyXG4gICAgICAgICAgICB3aWR0aDogNzUlICFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcbiAgICBzZWxlY3R7XHJcbiAgICAgICAgICAgIHdpZHRoOiAyNSUgIWltcG9ydGFudDtcclxuICAgIH1cclxuICAgICAgICAgICBgLFxyXG5cdHVzZVNoYWRvdzogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIElkZW50aWZpY2F0aW9uRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0dHlwZVNlbGVjdG9yOiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cdHRleHQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG5cdHR5cGU6IHN0cmluZztcclxuXHR2YWxpZGF0b3JzOiB7IFtpbmRleDogc3RyaW5nXTogSVZhbGlkYXRvciB9ID0ge1xyXG5cdFx0Y3ByOiBuZXcgQ3ByVmFsaWRhdG9yKCksXHJcblx0XHRjdnI6IG5ldyBDdnJWYWxpZGF0b3IoKSxcclxuXHRcdHN3ZTogbmV3IEJhbmtJZFN3ZWRlblZhbGlkYXRvcigpLFxyXG5cdFx0bm9yOiBuZXcgQmFua0lkTm9yd2F5VmFsaWRhdG9yKCksXHJcblx0fTtcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbHVlKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gYCR7dGhpcy50ZXh0LnZhbHVlfWA7XHJcblx0fVxyXG5cclxuXHRzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xyXG5cdFx0dGhpcy50ZXh0LnZhbHVlID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy52YWxpZGF0b3JzW3RoaXMudHlwZV0uaXNTYXRpc2ZpZWRCeShcclxuXHRcdFx0dGhpcy52YWx1ZSxcclxuXHRcdFx0IXRoaXMucmVxdWlyZWQsXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xyXG5cdH1cclxuXHJcblx0aW5pdENoaWxkSW5wdXRzKCkge1xyXG5cdFx0dGhpcy50ZXh0ID0gc3VwZXIuZ2V0Q2hpbGRJbnB1dCgnI2lkLWZpZWxkJyk7XHJcblx0XHR0aGlzLnR5cGVTZWxlY3RvciA9IHN1cGVyLmdldENoaWxkSW5wdXQoJyNpZC10eXBlJyk7XHJcblx0XHR0aGlzLnRleHQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5jaGFuZ2UuYmluZCh0aGlzKSk7XHJcblx0XHR0aGlzLnR5cGVTZWxlY3Rvci5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHRoaXMudGV4dC5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJycpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy50eXBlID0gdGhpcy50eXBlU2VsZWN0b3IudmFsdWU7XHJcblx0fVxyXG5cclxuXHQvLyBldmVudHNcclxuXHRwdWJsaWMgY2hhbmdlKCRldmVudCk6IHZvaWQge1xyXG5cdFx0dGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuXHRcdHRoaXMudHlwZSA9IHRoaXMudHlwZVNlbGVjdG9yLnZhbHVlO1xyXG5cdFx0dGhpcy5vbkNoYW5nZS5lbWl0KG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICdjaGFuZ2UnKSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgdmFsaWRhdGUoKTogdm9pZCB7XHJcblx0XHR0aGlzLnZhbGlkO1xyXG5cdFx0dGhpcy5vblZhbGlkYXRlLmVtaXQoXHJcblx0XHRcdG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICd2YWxpZGF0ZScpLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IEN1c3RvbUVsZW1lbnQgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL2N1c3RvbS1lbGVtZW50LmRlY29yYXRvcic7XHJcbmltcG9ydCB7IEN1c3RvbUlucHV0RWxlbWVudCB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21JbnB1dEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBDdXN0b21FbGVtZW50RXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUV2ZW50cyc7XHJcbmltcG9ydCAqIGFzIGludGxUZWxJbnB1dCBmcm9tICdpbnRsLXRlbC1pbnB1dCc7XHJcbmltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ2ludGwtdGVsLWlucHV0JztcclxuaW1wb3J0IHsgTWFrZVJlcXVlc3QgfSBmcm9tICdAbHVmdGJvcm4vdXRpbGl0aWVzJztcclxuXHJcbkBDdXN0b21FbGVtZW50KHtcclxuXHRzZWxlY3RvcjogJ2ludC1waG9uZS1lbGVtZW50JyxcclxuXHR0ZW1wbGF0ZTogYFxyXG4gICAgICAgICAgICA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgaHJlZj1cImh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2ludGwtdGVsLWlucHV0LzE2LjAuMC9jc3MvaW50bFRlbElucHV0LmNzc1wiID5cclxuXHRcdFx0PGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuXHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRlbFwiIGlkPVwicGhvbmUtZmllbGRcIiAgLz5cclxuXHRcdFx0PC9kaXY+YCxcclxuXHRzdHlsZTogYFxyXG4gICAgOmhvc3R7XHJcbiAgICAgICAgICAgIHdpZHRoOjEwMCU7XHJcbiAgICB9XHJcbiAgICAud3JhcHBlcntcclxuICAgICAgICAgICAgZGlzcGxheTpmbGV4O1xyXG4gICAgfVxyXG4gICAgLml0aSB7XHJcbiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuICAgIH1cclxuICAgIGlucHV0e1xyXG4gICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWY0ZmY7XHJcbiAgICAgICAgICAgIG1hcmdpbjogMnB4O1xyXG4gICAgICAgICAgICByZXNpemU6IG5vbmU7XHJcbiAgICB9XHJcbiAgICAgICAgICAgYCxcclxuXHR1c2VTaGFkb3c6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnRQaG9uZUZpZWxkRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0cGhvbmU6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblx0ZnVsbFBob25lOiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cdGludGxUZWxJbnB1dDogUGx1Z2luO1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWx1ZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuaW50bFRlbElucHV0LmdldE51bWJlcigpO1xyXG5cdH1cclxuXHJcblx0c2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMucGhvbmUudmFsdWUgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWxpZCgpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IHBhdHRlcm5WYWxpZCA9XHJcblx0XHRcdCF0aGlzLmludGxUZWxJbnB1dC5nZXROdW1iZXIoKSB8fCB0aGlzLmludGxUZWxJbnB1dC5pc1ZhbGlkTnVtYmVyKCk7XHJcblx0XHRyZXR1cm4gcGF0dGVyblZhbGlkICYmIHRoaXMucGhvbmUudmFsaWRpdHkudmFsaWQ7XHJcblx0fVxyXG5cclxuXHRjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2V0SW50bFRlbElucHV0KCk7XHJcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xyXG5cdH1cclxuXHJcblx0aW5pdENoaWxkSW5wdXRzKCkge1xyXG5cdFx0dGhpcy5waG9uZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHRoaXMucGhvbmUuc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsICcnKTtcclxuXHRcdH1cclxuXHR9XHJcblx0c2V0SW50bFRlbElucHV0KCkge1xyXG5cdFx0dGhpcy5waG9uZSA9IHN1cGVyLmdldENoaWxkSW5wdXQoJyNwaG9uZS1maWVsZCcpO1xyXG5cdFx0dGhpcy5pbnRsVGVsSW5wdXQgPSBpbnRsVGVsSW5wdXQodGhpcy5waG9uZSwge1xyXG5cdFx0XHRnZW9JcExvb2t1cDogKHN1Y2Nlc3MsIGZhaWx1cmUpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbmV3IE1ha2VSZXF1ZXN0KFxyXG5cdFx0XHRcdFx0J2h0dHBzOi8vaXBpbmZvLmlvL2pzb24/dG9rZW49ODIyNjEzODIxN2E2OGEnLFxyXG5cdFx0XHRcdFx0J2dldCcsXHJcblx0XHRcdFx0XHR7ICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcclxuXHRcdFx0XHQpXHJcblx0XHRcdFx0XHQuc2VuZCgpXHJcblx0XHRcdFx0XHQudGhlbigocmVxdWVzdDogYW55KSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdCk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBzdWNjZXNzKHJlcy5jb3VudHJ5KTtcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHQuY2F0Y2goZXJyID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHN1Y2Nlc3MoJ0RLJyk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0aGlkZGVuSW5wdXQ6ICdmdWxscGhvbmUnLFxyXG5cdFx0XHRpbml0aWFsQ291bnRyeTogJ2F1dG8nLFxyXG5cdFx0XHRuYXRpb25hbE1vZGU6IHRydWUsXHJcblx0XHRcdHV0aWxzU2NyaXB0OlxyXG5cdFx0XHRcdCdodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9pbnRsLXRlbC1pbnB1dC8xNS4wLjEvanMvdXRpbHMuanMnLFxyXG5cdFx0fSBhcyBhbnkpO1xyXG5cdFx0dGhpcy5pbnRsVGVsSW5wdXQucHJvbWlzZS50aGVuKGUgPT4ge1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLmZ1bGxQaG9uZSA9IHN1cGVyLmdldENoaWxkSW5wdXQoJ1tuYW1lPVwiZnVsbHBob25lXCJdJyk7XHJcblx0XHRcdH0sIDEwMDApO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdC8vIGV2ZW50c1xyXG5cdHB1YmxpYyBjaGFuZ2UoJGV2ZW50KTogdm9pZCB7XHJcblx0XHR0aGlzLnRvdWNoZWQgPSB0cnVlO1xyXG5cdFx0dGhpcy5vbkNoYW5nZS5lbWl0KG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICdjaGFuZ2UnKSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgdmFsaWRhdGUoKTogdm9pZCB7XHJcblx0XHR0aGlzLnZhbGlkO1xyXG5cdFx0dGhpcy5vblZhbGlkYXRlLmVtaXQoXHJcblx0XHRcdG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICd2YWxpZGF0ZScpLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IEN1c3RvbUVsZW1lbnQgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL2N1c3RvbS1lbGVtZW50LmRlY29yYXRvcic7XHJcbmltcG9ydCB7IEN1c3RvbUlucHV0RWxlbWVudCB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21JbnB1dEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBDdXN0b21FbGVtZW50RXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUV2ZW50cyc7XHJcblxyXG5AQ3VzdG9tRWxlbWVudCh7XHJcblx0c2VsZWN0b3I6ICdudW1lcmljLWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcblx0XHRcdFx0PGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD0nbnVtZXJpYy1maWVsZCcvPlxyXG5cdFx0XHQ8L2Rpdj5gLFxyXG5cdHN0eWxlOiBgXHJcbiAgICA6aG9zdHtcclxuICAgICAgICAgICAgd2lkdGg6MTAwJTtcclxuICAgIH1cclxuICAgIC53cmFwcGVye1xyXG4gICAgICAgICAgICBkaXNwbGF5OmZsZXg7XHJcbiAgICB9XHJcbiAgICBpbnB1dHtcclxuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNGZmO1xyXG4gICAgICAgICAgICBtYXJnaW46IDJweDtcclxuICAgICAgICAgICAgcmVzaXplOiBub25lO1xyXG4gICAgfVxyXG4gICAgICAgICAgIGAsXHJcblx0dXNlU2hhZG93OiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTnVtZXJpY0ZpZWxkRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0bnVtYmVyOiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsdWUoKTogYW55IHtcclxuXHRcdGlmIChpc05hTih0aGlzLm51bWJlci52YWx1ZUFzTnVtYmVyKSkge1xyXG5cdFx0XHRyZXR1cm4gJyc7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcy5udW1iZXIudmFsdWVBc051bWJlcjtcclxuXHR9XHJcblxyXG5cdHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XHJcblx0XHR0aGlzLm51bWJlci52YWx1ZUFzTnVtYmVyID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5udW1iZXIudmFsaWRpdHkudmFsaWQ7XHJcblx0fVxyXG5cclxuXHRjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcclxuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XHJcblx0fVxyXG5cclxuXHRpbml0Q2hpbGRJbnB1dHMoKSB7XHJcblx0XHR0aGlzLm51bWJlciA9IHN1cGVyLmdldENoaWxkSW5wdXQoJyNudW1lcmljLWZpZWxkJyk7XHJcblx0XHR0aGlzLm51bWJlci5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHRoaXMubnVtYmVyLnNldEF0dHJpYnV0ZSgncmVxdWlyZWQnLCAnJyk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5tYXgpIHtcclxuXHRcdFx0dGhpcy5udW1iZXIuc2V0QXR0cmlidXRlKCdtYXgnLCB0aGlzLm1heCk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5taW4pIHtcclxuXHRcdFx0dGhpcy5udW1iZXIuc2V0QXR0cmlidXRlKCdtaW4nLCB0aGlzLm1pbik7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5zdGVwKSB7XHJcblx0XHRcdHRoaXMubnVtYmVyLnNldEF0dHJpYnV0ZSgnc3RlcCcsIHRoaXMuc3RlcCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBldmVudHNcclxuXHRwdWJsaWMgY2hhbmdlKCRldmVudCk6IHZvaWQge1xyXG5cdFx0dGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuXHRcdHRoaXMub25DaGFuZ2UuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAnY2hhbmdlJykpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xyXG5cdFx0dGhpcy52YWxpZDtcclxuXHRcdHRoaXMub25WYWxpZGF0ZS5lbWl0KFxyXG5cdFx0XHRuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAndmFsaWRhdGUnKSxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDdXN0b21FbGVtZW50IGZyb20gJy4uLy4uL2ZyYW1ld29yay9jdXN0b20tZWxlbWVudC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dEVsZW1lbnQgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tSW5wdXRFbGVtZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21FdmVudHMnO1xyXG5pbXBvcnQgeyBTdHJpbmdVdGlsIH0gZnJvbSAnQGx1ZnRib3JuL3V0aWxpdGllcyc7XHJcblxyXG5AQ3VzdG9tRWxlbWVudCh7XHJcblx0c2VsZWN0b3I6ICdyYWRpby1ncm91cC1lbGVtZW50JyxcclxuXHR0ZW1wbGF0ZTogYFxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG5cdFx0XHQ8L2Rpdj5gLFxyXG5cdHN0eWxlOiBgXHJcblx0XHRcdDpob3N0e1xyXG5cdFx0XHRcdHdpZHRoOjEwMCU7XHJcblx0XHRcdH1cclxuXHRcdFx0LnJhZGlvLWJ1dHRvbiB7XHJcblx0XHRcdFx0d2lkdGg6IGF1dG87XHJcblx0XHRcdFx0bWFyZ2luOiBhdXRvIDNweDtcclxuXHRcdFx0XHRjb2xvcjogcmdiYSg3MiwgNzIsIDcyLCAwLjc1KTtcclxuXHRcdFx0XHRmb250LXNpemU6IDEzcHg7XHJcblx0XHRcdH1cclxuXHRcdFx0aW5wdXR7XHJcblx0XHRcdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcclxuXHRcdFx0XHR3aWR0aDogYXV0byAhaW1wb3J0YW50O1xyXG5cdFx0XHRcdGJvcmRlcjogbm9uZTtcclxuXHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNGZmO1xyXG5cdFx0XHRcdG1hcmdpbjogMnB4O1xyXG5cdFx0XHRcdHJlc2l6ZTogbm9uZTtcclxuXHRcdFx0fVxyXG5cdFx0YCxcclxuXHR1c2VTaGFkb3c6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSYWRpb0J1dHRvbkdyb3VwRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0cmFkaW9CdXR0b246IEhUTUxJbnB1dEVsZW1lbnRbXTtcclxuXHRyYWRpb0J1dHRvblRlbXBsYXRlID0gYFxyXG5cdDxkaXYgY2xhc3M9J3JhZGlvLWJ1dHRvbic+XHJcblx0XHQ8aW5wdXQgdHlwZT0ncmFkaW8nIG5hbWU9J3swfScgdmFsdWU9XCJ7MX1cIiBpZD1cInsyfVwiIHszfS8+XHJcblx0XHQ8bGFiZWwgZm9yPVwiezJ9XCI+ezF9PC9sYWJlbD5cclxuXHQ8L2Rpdj5gO1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsdWUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnJhZGlvQnV0dG9uLmZpbHRlcihjID0+IGMuY2hlY2tlZCkubWFwKGMgPT4gYy52YWx1ZSlbMF07XHJcblx0fVxyXG5cclxuXHRzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xyXG5cdFx0bGV0IG1hdGNoZWRSYWRpbyA9IHRoaXMucmFkaW9CdXR0b24uZmlsdGVyKGMgPT4gYy52YWx1ZSA9PT0gdmFsdWUpWzBdO1xyXG5cdFx0aWYgKG1hdGNoZWRSYWRpbykge1xyXG5cdFx0XHRtYXRjaGVkUmFkaW8uc2V0QXR0cmlidXRlKCdjaGVja2VkJywgJycpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKHRoaXMucmVxdWlyZWQpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMucmFkaW9CdXR0b24uZmlsdGVyKGMgPT4gYy5jaGVja2VkKS5sZW5ndGggPiAwO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcclxuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XHJcblx0fVxyXG5cclxuXHRpbml0Q2hpbGRJbnB1dHMoKSB7XHJcblx0XHR0aGlzLmFkZFJhZGlvQnV0dG9ucygpO1xyXG5cdFx0dGhpcy5yYWRpb0J1dHRvbiA9IHN1cGVyLmdldENoaWxkSW5wdXRzKGBbbmFtZT0nJHt0aGlzLm5hbWV9J11gKTtcclxuXHRcdHRoaXMucmFkaW9CdXR0b24uZm9yRWFjaChyYWRpbyA9PlxyXG5cdFx0XHRyYWRpby5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKSxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFkZFJhZGlvQnV0dG9ucygpIHtcclxuXHRcdGNvbnN0IHdyYXBwZXIgPSBzdXBlci5nZXRDaGlsZEVsZW1lbnQoJy53cmFwcGVyJyk7XHJcblx0XHR0aGlzLm9wdGlvbnMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcclxuXHRcdFx0d3JhcHBlci5pbnNlcnRBZGphY2VudEhUTUwoXHJcblx0XHRcdFx0J2JlZm9yZWVuZCcsXHJcblx0XHRcdFx0U3RyaW5nVXRpbC5TdHJpbmdGb3JtYXQoXHJcblx0XHRcdFx0XHR0aGlzLnJhZGlvQnV0dG9uVGVtcGxhdGUsXHJcblx0XHRcdFx0XHR0aGlzLm5hbWUsXHJcblx0XHRcdFx0XHRlbGVtZW50LFxyXG5cdFx0XHRcdFx0YCR7dGhpcy5uYW1lfS0ke2luZGV4fWAsXHJcblx0XHRcdFx0XHRgJHt0aGlzLnJlcXVpcmVkID8gJ3JlcXVpcmVkJyA6ICcnfWAsXHJcblx0XHRcdFx0KSxcclxuXHRcdFx0KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHQvLyBldmVudHNcclxuXHRwdWJsaWMgY2hhbmdlKCRldmVudCk6IHZvaWQge1xyXG5cdFx0dGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuXHRcdHRoaXMub25DaGFuZ2UuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAnY2hhbmdlJykpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xyXG5cdFx0dGhpcy52YWxpZDtcclxuXHRcdHRoaXMub25WYWxpZGF0ZS5lbWl0KFxyXG5cdFx0XHRuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAndmFsaWRhdGUnKSxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDdXN0b21FbGVtZW50IGZyb20gJy4uLy4uL2ZyYW1ld29yay9jdXN0b20tZWxlbWVudC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dEVsZW1lbnQgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tSW5wdXRFbGVtZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21FdmVudHMnO1xyXG5cclxuQEN1c3RvbUVsZW1lbnQoe1xyXG5cdHNlbGVjdG9yOiAndGV4dC1hcmVhLWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcblx0XHRcdFx0PHRleHRhcmVhIHJvd3M9NSBpZD0ndGV4dC1hcmVhLWZpZWxkJz48L3RleHRhcmVhPlxyXG5cdFx0XHQ8L2Rpdj5gLFxyXG5cdHN0eWxlOiBgXHJcbiAgICA6aG9zdHtcclxuICAgICAgICAgICAgd2lkdGg6MTAwJTtcclxuICAgIH1cclxuICAgIC53cmFwcGVye1xyXG4gICAgICAgICAgICBkaXNwbGF5OmZsZXg7XHJcbiAgICB9XHJcbiAgICB0ZXh0YXJlYXtcclxuICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNGZmO1xyXG4gICAgICAgICAgICBtYXJnaW46IDJweDtcclxuICAgICAgICAgICAgcmVzaXplOiBub25lO1xyXG4gICAgfVxyXG4gICAgICAgICAgIGAsXHJcblx0dXNlU2hhZG93OiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dEFyZWFFbGVtZW50IGV4dGVuZHMgQ3VzdG9tSW5wdXRFbGVtZW50IHtcclxuXHR0ZXh0OiBIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsdWUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBgJHt0aGlzLnRleHQudmFsdWV9YDtcclxuXHR9XHJcblxyXG5cdHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcblx0XHR0aGlzLnRleHQudmFsdWUgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldCB2YWxpZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLnRleHQudmFsaWRpdHkudmFsaWQ7XHJcblx0fVxyXG5cclxuXHRjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcclxuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XHJcblx0fVxyXG5cclxuXHRpbml0Q2hpbGRJbnB1dHMoKSB7XHJcblx0XHR0aGlzLnRleHQgPSBzdXBlci5nZXRDaGlsZElucHV0KCcjdGV4dC1hcmVhLWZpZWxkJyk7XHJcblx0XHR0aGlzLnRleHQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5jaGFuZ2UuYmluZCh0aGlzKSk7XHJcblx0XHRpZiAodGhpcy5yZXF1aXJlZCkge1xyXG5cdFx0XHR0aGlzLnRleHQuc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsICcnKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIGV2ZW50c1xyXG5cdHB1YmxpYyBjaGFuZ2UoJGV2ZW50KTogdm9pZCB7XHJcblx0XHR0aGlzLnRvdWNoZWQgPSB0cnVlO1xyXG5cdFx0dGhpcy5vbkNoYW5nZS5lbWl0KG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICdjaGFuZ2UnKSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgdmFsaWRhdGUoKTogdm9pZCB7XHJcblx0XHR0aGlzLnZhbGlkO1xyXG5cdFx0dGhpcy5vblZhbGlkYXRlLmVtaXQoXHJcblx0XHRcdG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICd2YWxpZGF0ZScpLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IEN1c3RvbUVsZW1lbnQgZnJvbSAnLi4vLi4vZnJhbWV3b3JrL2N1c3RvbS1lbGVtZW50LmRlY29yYXRvcic7XHJcbmltcG9ydCB7IEN1c3RvbUlucHV0RWxlbWVudCB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9DdXN0b21JbnB1dEVsZW1lbnQnO1xyXG5pbXBvcnQgeyBDdXN0b21FbGVtZW50RXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUV2ZW50cyc7XHJcblxyXG5AQ3VzdG9tRWxlbWVudCh7XHJcblx0c2VsZWN0b3I6ICd0ZXh0LWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcblx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9J3RleHQtZmllbGQnLz5cclxuXHRcdFx0PC9kaXY+YCxcclxuXHRzdHlsZTogYFxyXG5cdDpob3N0e1xyXG5cdFx0XHR3aWR0aDoxMDAlO1xyXG5cdH1cclxuXHQud3JhcHBlcntcclxuXHRcdFx0ZGlzcGxheTpmbGV4O1xyXG5cdH1cclxuXHRpbnB1dHtcclxuXHRcdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcclxuXHRcdFx0d2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuXHRcdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNGZmO1xyXG5cdFx0XHRtYXJnaW46IDJweDtcclxuXHRcdFx0cmVzaXplOiBub25lO1xyXG5cdH1cclxuXHRcdGAsXHJcblx0dXNlU2hhZG93OiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dEZpZWxkRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblx0dGV4dDogSFRNTElucHV0RWxlbWVudDtcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZhbHVlKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gYCR7dGhpcy50ZXh0LnZhbHVlfWA7XHJcblx0fVxyXG5cclxuXHRzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xyXG5cdFx0dGhpcy50ZXh0LnZhbHVlID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsaWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy50ZXh0LnZhbGlkaXR5LnZhbGlkO1xyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xyXG5cdH1cclxuXHJcblx0aW5pdENoaWxkSW5wdXRzKCkge1xyXG5cdFx0dGhpcy50ZXh0ID0gc3VwZXIuZ2V0Q2hpbGRJbnB1dCgnI3RleHQtZmllbGQnKTtcclxuXHRcdHRoaXMudGV4dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLmNoYW5nZS5iaW5kKHRoaXMpKTtcclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHRoaXMudGV4dC5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJycpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gZXZlbnRzXHJcblx0cHVibGljIGNoYW5nZSgkZXZlbnQpOiB2b2lkIHtcclxuXHRcdHRoaXMudG91Y2hlZCA9IHRydWU7XHJcblx0XHR0aGlzLm9uQ2hhbmdlLmVtaXQobmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ2NoYW5nZScpKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB2YWxpZGF0ZSgpOiB2b2lkIHtcclxuXHRcdHRoaXMudmFsaWQ7XHJcblx0XHR0aGlzLm9uVmFsaWRhdGUuZW1pdChcclxuXHRcdFx0bmV3IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3ModGhpcy52YWx1ZSwgJ3ZhbGlkYXRlJyksXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ3VzdG9tRWxlbWVudCBmcm9tICcuLi8uLi9mcmFtZXdvcmsvY3VzdG9tLWVsZW1lbnQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgQ3VzdG9tSW5wdXRFbGVtZW50IH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL0N1c3RvbUlucHV0RWxlbWVudCc7XHJcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnRFdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvQ3VzdG9tRXZlbnRzJztcclxuaW1wb3J0IE9wdGlvbldpdGhEZXNjcmlwdGlvbiBmcm9tICcuLi8uLi9mcmFtZXdvcmsvTW9kZWxzL09wdGlvbldpdGhEZXNjcmlwdGlvbic7XHJcbmltcG9ydCBEb21VdGlsaXR5IGZyb20gJy4uLy4uL2ZyYW1ld29yay9VdGlsaXRpZXMvRG9tVXRpbGl0eSc7XHJcblxyXG5AQ3VzdG9tRWxlbWVudCh7XHJcblx0c2VsZWN0b3I6ICd0eXBlLWFoZWFkLWVsZW1lbnQnLFxyXG5cdHRlbXBsYXRlOiBgXHJcblx0XHQ8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG5cdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInRleHQtaW5wdXRcIj5cclxuXHRcdFx0PGRpdiBpZD1cImRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcblx0XHQ8L2Rpdj5gLFxyXG5cdHN0eWxlOiBgXHJcblx0XHQ6aG9zdCB7XHJcblx0XHRcdHdpZHRoOjEwMCU7XHJcblx0XHR9XHJcblx0XHQud3JhcHBlciB7XHJcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHRcdFx0ZGlzcGxheTpmbGV4O1xyXG5cdFx0XHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG5cdFx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuXHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcclxuXHRcdH1cclxuXHRcdCN0ZXh0LWlucHV0IHtcclxuXHRcdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcclxuXHRcdFx0d2lkdGg6IDEwMCUgIWltcG9ydGFudDtcclxuXHRcdFx0Ym9yZGVyOiBub25lO1xyXG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNGZmO1xyXG5cdFx0XHRtYXJnaW46IDJweDtcclxuXHRcdFx0cmVzaXplOiBub25lO1xyXG5cdFx0fVxyXG5cdFx0LndyYXBwZXIgI2Rlc2NyaXB0aW9uIHtcclxuXHRcdFx0d2lkdGg6IDEwMCU7XHJcblx0XHRcdHBhZGRpbmc6IDAgMnB4O1xyXG5cdFx0XHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG5cdFx0fVxyXG5cdFx0Lm9wdGlvbnMtbGlzdCB7XHJcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI0U4RThFODtcclxuXHRcdFx0Ym9yZGVyLWJvdHRvbTogbm9uZTtcclxuXHRcdFx0Ym9yZGVyLXRvcDogbm9uZTtcclxuXHRcdFx0ei1pbmRleDogMztcclxuXHRcdFx0dG9wOiAxMDAlO1xyXG5cdFx0XHRsZWZ0OiAwO1xyXG5cdFx0XHRyaWdodDogMDtcclxuXHRcdFx0bWF4LWhlaWdodDogMjAwcHg7XHJcblx0XHRcdG92ZXJmbG93LXk6IGF1dG87XHJcblx0XHR9XHJcblx0XHQub3B0aW9ucy1saXN0LWl0ZW0ge1xyXG5cdFx0XHRwYWRkaW5nOiAxMHB4O1xyXG5cdFx0XHRjdXJzb3I6IHBvaW50ZXI7XHJcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7XHJcblx0XHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRThFOEU4O1xyXG5cdFx0fVxyXG5cdFx0Lm9wdGlvbnMtbGlzdC1pdGVtOmhvdmVyIHtcclxuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI0U4RThFODtcclxuXHRcdH1cclxuXHRcdC5vcHRpb25zLWxpc3QtaXRlbS5hY3RpdmUge1xyXG5cdFx0XHQvKndoZW4gbmF2aWdhdGluZyB0aHJvdWdoIHRoZSBpdGVtcyB1c2luZyB0aGUgYXJyb3cga2V5czoqL1xyXG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjMDAzRTY0ICFpbXBvcnRhbnQ7XHJcblx0XHRcdGNvbG9yOiAjRkZGRkZGO1xyXG5cdFx0fVxyXG5cdFx0Lm9wdGlvbnMtbGlzdC1pdGVtLXRpdGxlIHtcclxuXHRcdFx0Zm9udC1zaXplOiAxNnB4O1xyXG5cdFx0fVxyXG5cdFx0Lm9wdGlvbnMtbGlzdC1pdGVtLWRlc2NyaXB0aW9uIHtcclxuXHRcdFx0Zm9udC1zaXplOiAxMHB4O1xyXG5cdFx0fVxyXG5cdGAsXHJcblx0dXNlU2hhZG93OiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHlwZUFoZWFkRWxlbWVudCBleHRlbmRzIEN1c3RvbUlucHV0RWxlbWVudCB7XHJcblxyXG5cdHByaXZhdGUgdGV4dElucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudDtcclxuXHRwcml2YXRlIGRlc2NyaXB0aW9uRWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcblx0cHJpdmF0ZSBjb21wb25lbnRXcmFwcGVyOiBIVE1MRWxlbWVudDtcclxuXHRwcml2YXRlIGN1cnJlbnRGb3Vjc2VkSW5kZXggPSAtMTtcclxuXHJcblx0c2VsZWN0ZWRPcHRpb246IE9wdGlvbldpdGhEZXNjcmlwdGlvbjtcclxuXHRzZWFyY2hSZXN1bHRPcHRpb25zOiBPcHRpb25XaXRoRGVzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldCBzZWFyY2hIYXNSZXN1bHRzKCk6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgYXV0b2NvbXBsZXRlTGlzdCA9IHN1cGVyLmdldENoaWxkRWxlbWVudCgnLm9wdGlvbnMtbGlzdCcpO1xyXG5cdFx0cmV0dXJuIGF1dG9jb21wbGV0ZUxpc3QgJiYgdGhpcy5vcHRpb25zV2l0aERlc2NyaXB0aW9ucyAmJiB0aGlzLm9wdGlvbnNXaXRoRGVzY3JpcHRpb25zLmxlbmd0aCA+IDA7XHJcblx0fVxyXG5cclxuXHRnZXQgdmFsdWUoKTogc3RyaW5nIHtcclxuXHRcdGlmICghdGhpcy5zZWxlY3RlZE9wdGlvbikge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzLnNlbGVjdGVkT3B0aW9uLnZhbHVlO1xyXG5cdH1cclxuXHJcblx0c2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuXHRcdGlmICghdGhpcy5vcHRpb25zV2l0aERlc2NyaXB0aW9ucyB8fCB0aGlzLm9wdGlvbnNXaXRoRGVzY3JpcHRpb25zLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBvcHRpb24gPSB0aGlzLm9wdGlvbnNXaXRoRGVzY3JpcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpO1xyXG5cdFx0aWYgKCFvcHRpb24pIHtcclxuXHRcdFx0dGhpcy5kZXNjcmlwdGlvbkVsZW1lbnQuaW5uZXJIVE1MID0gbnVsbDtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZWxlY3RlZE9wdGlvbiA9IG9wdGlvbjtcclxuXHRcdHRoaXMudGV4dElucHV0RWxlbWVudC52YWx1ZSA9IG9wdGlvbi50aXRsZTtcclxuXHRcdHRoaXMuZGVzY3JpcHRpb25FbGVtZW50LmlubmVySFRNTCA9IG9wdGlvbi5kZXNjcmlwdGlvbjtcclxuXHR9XHJcblxyXG5cdGdldCB2YWxpZCgpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHJldHVybiAhIXRoaXMuc2VsZWN0ZWRPcHRpb247XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gISF0aGlzLnNlbGVjdGVkT3B0aW9uIHx8IHRoaXMudGV4dElucHV0RWxlbWVudC52YWx1ZSA9PT0gJyc7XHJcblx0fVxyXG5cclxuXHRjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcclxuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XHJcblx0fVxyXG5cclxuXHRpbml0Q2hpbGRJbnB1dHMoKSB7XHJcblx0XHR0aGlzLnRleHRJbnB1dEVsZW1lbnQgPSBzdXBlci5nZXRDaGlsZElucHV0KCcjdGV4dC1pbnB1dCcpO1xyXG5cdFx0dGhpcy5kZXNjcmlwdGlvbkVsZW1lbnQgPSBzdXBlci5nZXRDaGlsZElucHV0KCcjZGVzY3JpcHRpb24nKTtcclxuXHRcdHRoaXMuY29tcG9uZW50V3JhcHBlciA9IHN1cGVyLmdldENoaWxkRWxlbWVudCgnLndyYXBwZXInKTtcclxuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcblx0XHRcdHRoaXMudGV4dElucHV0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JlcXVpcmVkJywgJycpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy50ZXh0SW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuY2hhbmdlLmJpbmQodGhpcykpO1xyXG5cdFx0dGhpcy50ZXh0SW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG5cdFx0XHR0aGlzLmlucHV0RXZlbnRIYW5kbGVyKCk7XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYmluZE5hdmlnYXRpb24oKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaW5wdXRFdmVudEhhbmRsZXIoKSB7XHJcblx0XHR0aGlzLnNlbGVjdGVkT3B0aW9uID0gbnVsbDtcclxuXHRcdHRoaXMuZGVzY3JpcHRpb25FbGVtZW50LmlubmVySFRNTCA9IG51bGw7XHJcblx0XHR0aGlzLmNsb3NlT3B0aW9uc0xpc3QoKTtcclxuXHRcdHRoaXMuc2VhcmNoUmVzdWx0T3B0aW9ucyA9IFtdO1xyXG5cdFx0Y29uc3Qgc2VhcmNoVmFsdWUgPSB0aGlzLnRleHRJbnB1dEVsZW1lbnQudmFsdWU7XHJcblx0XHRpZiAoIXNlYXJjaFZhbHVlIHx8IHNlYXJjaFZhbHVlLnRyaW0oKSA9PT0gJycpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3Qgb3B0aW9uc2xpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHRcdG9wdGlvbnNsaXN0LmNsYXNzTGlzdC5hZGQoJ29wdGlvbnMtbGlzdCcpO1xyXG5cclxuXHRcdGlmICghdGhpcy5vcHRpb25zV2l0aERlc2NyaXB0aW9ucykge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLm9wdGlvbnNXaXRoRGVzY3JpcHRpb25zLmZvckVhY2goKG9wdGlvbjogT3B0aW9uV2l0aERlc2NyaXB0aW9uLCBpbmRleCkgPT4ge1xyXG5cdFx0XHR2YXIgcmVnZXggPSBuZXcgUmVnRXhwKHNlYXJjaFZhbHVlLCAnZ2knKTtcclxuXHRcdFx0Y29uc3QgaXNNYXRjaGluZ1RpdGxlID0gcmVnZXgudGVzdChvcHRpb24udGl0bGUpO1xyXG5cdFx0XHRjb25zdCBpc01hdGNoaW5nVmFsdWUgPSByZWdleC50ZXN0KG9wdGlvbi52YWx1ZSk7XHJcblx0XHRcdGNvbnN0IGlzTWF0Y2hpbmdEZXNjcmlwdGlvbiA9IHJlZ2V4LnRlc3Qob3B0aW9uLmRlc2NyaXB0aW9uKTtcclxuXHRcdFx0aWYgKCFpc01hdGNoaW5nVGl0bGUgJiYgIWlzTWF0Y2hpbmdWYWx1ZSAmJiAhaXNNYXRjaGluZ0Rlc2NyaXB0aW9uKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuc2VhcmNoUmVzdWx0T3B0aW9ucy5wdXNoKG9wdGlvbik7XHJcblx0XHRcdGNvbnN0IG9wdGlvbnNMaXN0SXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHRcdG9wdGlvbnNMaXN0SXRlbS5jbGFzc0xpc3QuYWRkKCdvcHRpb25zLWxpc3QtaXRlbScpO1xyXG5cdFx0XHRvcHRpb25zTGlzdEl0ZW0uZGF0YXNldFsndmFsdWUnXSA9IG9wdGlvbi52YWx1ZTtcclxuXHRcdFx0b3B0aW9uc2xpc3QuYXBwZW5kQ2hpbGQob3B0aW9uc0xpc3RJdGVtKTtcclxuXHRcdFx0Y29uc3Qgb3B0aW9uc0xpc3RJdGVtVGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0XHRvcHRpb25zTGlzdEl0ZW1UaXRsZS5jbGFzc0xpc3QuYWRkKCdvcHRpb25zLWxpc3QtaXRlbS10aXRsZScpO1xyXG5cdFx0XHRvcHRpb25zTGlzdEl0ZW1UaXRsZS5pbm5lckhUTUwgPSBEb21VdGlsaXR5LmJvbGRlblRleHQob3B0aW9uLnRpdGxlLCBzZWFyY2hWYWx1ZSk7XHJcblx0XHRcdG9wdGlvbnNMaXN0SXRlbS5hcHBlbmRDaGlsZChvcHRpb25zTGlzdEl0ZW1UaXRsZSk7XHJcblx0XHRcdGNvbnN0IG9wdGlvbnNMaXN0SXRlbURlc2NyaXB0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHRcdFx0b3B0aW9uc0xpc3RJdGVtRGVzY3JpcHRpb24uY2xhc3NMaXN0LmFkZCgnb3B0aW9ucy1saXN0LWl0ZW0tZGVzY3JpcHRpb24nKTtcclxuXHRcdFx0b3B0aW9uc0xpc3RJdGVtRGVzY3JpcHRpb24uaW5uZXJIVE1MID0gRG9tVXRpbGl0eS5ib2xkZW5UZXh0KG9wdGlvbi5kZXNjcmlwdGlvbiwgc2VhcmNoVmFsdWUpO1xyXG5cdFx0XHRvcHRpb25zTGlzdEl0ZW0uYXBwZW5kQ2hpbGQob3B0aW9uc0xpc3RJdGVtRGVzY3JpcHRpb24pO1xyXG5cdFx0XHRvcHRpb25zTGlzdEl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5vcHRpb25TZWxlY3RlZEhhbmRsZXIob3B0aW9uKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHRoaXMuY29tcG9uZW50V3JhcHBlci5hcHBlbmRDaGlsZChvcHRpb25zbGlzdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2xvc2VPcHRpb25zTGlzdCgpIHtcclxuXHRcdHRoaXMuY3VycmVudEZvdWNzZWRJbmRleCA9IC0xO1xyXG5cdFx0Y29uc3Qgb3B0aW9uc0xpc3QgPSBzdXBlci5nZXRDaGlsZEVsZW1lbnQoJy5vcHRpb25zLWxpc3QnKTtcclxuXHRcdGlmICghb3B0aW9uc0xpc3QpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0b3B0aW9uc0xpc3QucmVtb3ZlKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG9wdGlvblNlbGVjdGVkSGFuZGxlcihvcHRpb246IE9wdGlvbldpdGhEZXNjcmlwdGlvbikge1xyXG5cdFx0dGhpcy52YWx1ZSA9IG9wdGlvbi52YWx1ZTtcclxuXHRcdHRoaXMub25DaGFuZ2UuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCAnY2hhbmdlJykpO1xyXG5cdFx0dGhpcy5jbG9zZU9wdGlvbnNMaXN0KCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGJpbmROYXZpZ2F0aW9uKCkge1xyXG5cdFx0dGhpcy50ZXh0SW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcclxuXHRcdFx0aWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcclxuXHRcdFx0XHR0aGlzLmNsb3NlT3B0aW9uc0xpc3QoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xyXG5cdFx0XHRcdGlmICghdGhpcy5zZWFyY2hIYXNSZXN1bHRzKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuY3VycmVudEZvdWNzZWRJbmRleCA9IHRoaXMuY3VycmVudEZvdWNzZWRJbmRleCA9PT0gdGhpcy5zZWFyY2hSZXN1bHRPcHRpb25zLmxlbmd0aCAtIDEgPyAwIDogdGhpcy5jdXJyZW50Rm91Y3NlZEluZGV4ICsgMTtcclxuXHRcdFx0XHR0aGlzLmhpZ2hsaWdodEZvY3VzZWRTZWFyY2hSZXN1bHQoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcclxuXHRcdFx0XHRpZiAoIXRoaXMuc2VhcmNoSGFzUmVzdWx0cykge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLmN1cnJlbnRGb3Vjc2VkSW5kZXggPSB0aGlzLmN1cnJlbnRGb3Vjc2VkSW5kZXggPT09IDAgPyB0aGlzLnNlYXJjaFJlc3VsdE9wdGlvbnMubGVuZ3RoIC0gMSA6IHRoaXMuY3VycmVudEZvdWNzZWRJbmRleCAtIDE7XHJcblx0XHRcdFx0dGhpcy5oaWdobGlnaHRGb2N1c2VkU2VhcmNoUmVzdWx0KCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xyXG5cdFx0XHRcdGlmICh0aGlzLmN1cnJlbnRGb3Vjc2VkSW5kZXggIT09IC0xICYmIHRoaXMuc2VhcmNoSGFzUmVzdWx0cykge1xyXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25TZWxlY3RlZEhhbmRsZXIodGhpcy5zZWFyY2hSZXN1bHRPcHRpb25zW3RoaXMuY3VycmVudEZvdWNzZWRJbmRleF0pO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRoaWdobGlnaHRGb2N1c2VkU2VhcmNoUmVzdWx0KCkge1xyXG5cdFx0Y29uc3Qgb3B0aW9uTGlzdEl0ZW1zID0gc3VwZXIuZ2V0Q2hpbGRFbGVtZW50cygnLm9wdGlvbnMtbGlzdC1pdGVtJyk7XHJcblx0XHRpZiAoIW9wdGlvbkxpc3RJdGVtcykge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRvcHRpb25MaXN0SXRlbXMuZm9yRWFjaCgobGlzdEl0ZW0sIGluZGV4KSA9PiB7XHJcblx0XHRcdGxpc3RJdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG5cdFx0XHRpZiAoaW5kZXggPT09IHRoaXMuY3VycmVudEZvdWNzZWRJbmRleCkge1xyXG5cdFx0XHRcdGxpc3RJdGVtLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBjaGFuZ2UoJGV2ZW50KTogdm9pZCB7XHJcblx0XHR0aGlzLnRvdWNoZWQgPSB0cnVlO1xyXG5cdFx0dGhpcy5vbkNoYW5nZS5lbWl0KG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICdjaGFuZ2UnKSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgdmFsaWRhdGUoKTogdm9pZCB7XHJcblx0XHR0aGlzLnZhbGlkO1xyXG5cdFx0dGhpcy5vblZhbGlkYXRlLmVtaXQoXHJcblx0XHRcdG5ldyBDdXN0b21FbGVtZW50RXZlbnRBcmdzKHRoaXMudmFsdWUsICd2YWxpZGF0ZScpLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiZXhwb3J0IGludGVyZmFjZSBMaXN0ZW5lcjxUPiB7XHJcbiAgICAoZXZlbnQ6IFQpOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlzcG9zYWJsZSB7XHJcbiAgICBkaXNwb3NlKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21FbGVtZW50RXZlbnRBcmdzIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZTogYW55LCBwdWJsaWMgZXZlbnROYW1lOiBzdHJpbmcpIHt9XHJcbn1cclxuLyoqIHBhc3NlcyB0aHJvdWdoIGV2ZW50cyBhcyB0aGV5IGhhcHBlbi4gWW91IHdpbGwgbm90IGdldCBldmVudHMgZnJvbSBiZWZvcmUgeW91IHN0YXJ0IGxpc3RlbmluZyAqL1xyXG5leHBvcnQgY2xhc3MgQ3VzdG9tRWxlbWVudEV2ZW50PFQ+IHtcclxuICAgIHByaXZhdGUgbGlzdGVuZXJzOiBMaXN0ZW5lcjxUPltdID0gW107XHJcbiAgICBwcml2YXRlIGxpc3RlbmVyc09uY2VyOiBMaXN0ZW5lcjxUPltdID0gW107XHJcblxyXG4gICAgb24gPSAobGlzdGVuZXI6IExpc3RlbmVyPFQ+KTogRGlzcG9zYWJsZSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGlzcG9zZTogKCkgPT4gdGhpcy5vZmYobGlzdGVuZXIpLFxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIG9uY2UgPSAobGlzdGVuZXI6IExpc3RlbmVyPFQ+KTogdm9pZCA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lcnNPbmNlci5wdXNoKGxpc3RlbmVyKTtcclxuICAgIH07XHJcblxyXG4gICAgb2ZmID0gKGxpc3RlbmVyOiBMaXN0ZW5lcjxUPikgPT4ge1xyXG4gICAgICAgIHZhciBjYWxsYmFja0luZGV4ID0gdGhpcy5saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrSW5kZXggPiAtMSkgdGhpcy5saXN0ZW5lcnMuc3BsaWNlKGNhbGxiYWNrSW5kZXgsIDEpO1xyXG4gICAgfTtcclxuXHJcbiAgICBlbWl0ID0gKGV2ZW50OiBUKSA9PiB7XHJcbiAgICAgICAgLyoqIFVwZGF0ZSBhbnkgZ2VuZXJhbCBsaXN0ZW5lcnMgKi9cclxuICAgICAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IGxpc3RlbmVyKGV2ZW50KSk7XHJcblxyXG4gICAgICAgIC8qKiBDbGVhciB0aGUgYG9uY2VgIHF1ZXVlICovXHJcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuZXJzT25jZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc09uY2VyLmZvckVhY2gobGlzdGVuZXIgPT4gbGlzdGVuZXIoZXZlbnQpKTtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNPbmNlciA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcGlwZSA9ICh0ZTogQ3VzdG9tRWxlbWVudEV2ZW50PFQ+KTogRGlzcG9zYWJsZSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub24oZSA9PiB0ZS5lbWl0KGUpKTtcclxuICAgIH07XHJcbn1cclxuIiwiaW1wb3J0IHsgQ3VzdG9tRWxlbWVudEV2ZW50LCBDdXN0b21FbGVtZW50RXZlbnRBcmdzIH0gZnJvbSBcIi4vQ3VzdG9tRXZlbnRzXCI7XHJcbmltcG9ydCB7IERvbVV0aWwsIEFycmF5VXRpbCB9IGZyb20gXCJAbHVmdGJvcm4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBPcHRpb25XaXRoRGVzY3JpcHRpb24gZnJvbSBcIi4vTW9kZWxzL09wdGlvbldpdGhEZXNjcmlwdGlvblwiO1xyXG5cclxuY2xhc3MgSURpY3Rpb25hcnk8VFZhbHVlPiB7XHJcblx0W2luZGV4OiBzdHJpbmddOiBUVmFsdWU7XHJcbn1cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEN1c3RvbUlucHV0RWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcclxuXHRwcml2YXRlIGRlcGVuZGVudE9uTGlzdCA9IG5ldyBJRGljdGlvbmFyeTxib29sZWFuPigpO1xyXG5cdHByaXZhdGUgdmlzaWJpbGl0eVN0YXRlID0gdHJ1ZTtcclxuXHJcblx0cHJvdGVjdGVkIHRvdWNoZWQgPSBmYWxzZTtcclxuXHRwcm90ZWN0ZWQgZG9tVXRpbDogRG9tVXRpbDtcclxuXHJcblx0cHJvdGVjdGVkIGhhc1ZhbHVlRGVwZW5kZW5jeTogYW55O1xyXG5cdHByb3RlY3RlZCBub1ZhbHVlRGVwZW5kZW5jeTogYW55O1xyXG5cdHByb3RlY3RlZCBkZXBlbmRlbmNpZXM6IGFueVtdO1xyXG5cclxuXHRwdWJsaWMgb25DaGFuZ2UgPSBuZXcgQ3VzdG9tRWxlbWVudEV2ZW50PEN1c3RvbUVsZW1lbnRFdmVudEFyZ3M+KCk7XHJcblx0cHVibGljIG9uVmFsaWRhdGUgPSBuZXcgQ3VzdG9tRWxlbWVudEV2ZW50PEN1c3RvbUVsZW1lbnRFdmVudEFyZ3M+KCk7XHJcblx0cHVibGljIG9uVmlzaWJpbGl0eUNoYW5nZWQgPSBuZXcgQ3VzdG9tRWxlbWVudEV2ZW50PEN1c3RvbUVsZW1lbnRFdmVudEFyZ3M+KCk7XHJcblxyXG5cdHB1YmxpYyBuYW1lOiBzdHJpbmc7XHJcblx0cHVibGljIG9wdGlvbnM6IGFueVtdO1xyXG5cdHB1YmxpYyBvcHRpb25zV2l0aERlc2NyaXB0aW9uczogT3B0aW9uV2l0aERlc2NyaXB0aW9uW107XHJcblx0cHVibGljIHJlcXVpcmVkOiBib29sZWFuO1xyXG5cdHB1YmxpYyBjdXN0b21WYWx1ZTogc3RyaW5nO1xyXG5cdHB1YmxpYyBhbGxEZXBlbmRlbmNpZXNNdXN0QmVNZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRwdWJsaWMgbXVsdGk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRwdWJsaWMgbWF4OiBhbnk7XHJcblx0cHVibGljIG1pbjogYW55O1xyXG5cdHB1YmxpYyBzdGVwOiBhbnk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHR9XHJcblxyXG5cdGFic3RyYWN0IGdldCB2YWx1ZSgpOiBhbnk7XHJcblx0YWJzdHJhY3Qgc2V0IHZhbHVlKHZhbHVlKTtcclxuXHRhYnN0cmFjdCBnZXQgdmFsaWQoKTogYm9vbGVhbjtcclxuXHJcblx0YWJzdHJhY3QgaW5pdENoaWxkSW5wdXRzKCk6IHZvaWQ7XHJcblx0YWJzdHJhY3QgdmFsaWRhdGUoKTogdm9pZDtcclxuXHRhYnN0cmFjdCBjaGFuZ2UoJGV2ZW50KTogdm9pZDtcclxuXHJcblx0Y29tcGFyZVZsYXVlcyA9IFtdO1xyXG5cclxuXHRpc1ZhbHVlQ29uZGl0aW9uTWF0Y2hlZCh2YWw6IGFueSkge1xyXG5cdFx0aWYgKHZhbCAmJiBBcnJheS5pc0FycmF5KHZhbCkgJiYgdmFsLmxlbmd0aCkge1xyXG5cdFx0XHRsZXQgcmVzdWx0ID0gZmFsc2U7XHJcblx0XHRcdHZhbC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGVsZW1lbnRNYXRjaGVkID0gdGhpcy5jb21wYXJlVmxhdWVzLmZpbmRJbmRleCh4ID0+IHggPT0gZWxlbWVudCkgIT09IC0xO1xyXG5cdFx0XHRcdGlmIChlbGVtZW50TWF0Y2hlZCkge1xyXG5cdFx0XHRcdFx0cmVzdWx0ID0gdHJ1ZTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZVZsYXVlcy5maW5kSW5kZXgoeCA9PiB4ID09IHZhbCkgIT09IC0xO1xyXG5cdH1cclxuXHJcblx0Y29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlcygpO1xyXG5cdH1cclxuXHJcblx0aW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc3R5bGUud2lkdGggPSBcIjEwMCVcIjtcclxuXHRcdHRoaXMuZG9tVXRpbCA9IG5ldyBEb21VdGlsKHRoaXMpO1xyXG5cdFx0dGhpcy5wYXJzZURhdGEoKTtcclxuXHRcdHRoaXMuaW5pdENoaWxkSW5wdXRzKCk7XHJcblx0XHR0aGlzLmJpbmRFdmVudHMoKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlcygpO1xyXG5cclxuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7XHJcblx0XHRcdHRoaXMuYmluZERlcGVuZGVuY2llcygpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlRGF0YSgpOiB2b2lkIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmICghKHRoaXMuY2hpbGRyZW5bMF0gaW5zdGFuY2VvZiBIVE1MU2NyaXB0RWxlbWVudCkpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0bGV0IGRhdGEgPSBKU09OLnBhcnNlKHRoaXMuY2hpbGRyZW5bMF0uaW5uZXJIVE1MKTtcclxuXHRcdFx0dGhpcy5vcHRpb25zID0gZGF0YS5vcHRpb25zO1xyXG5cdFx0XHR0aGlzLm9wdGlvbnNXaXRoRGVzY3JpcHRpb25zID0gZGF0YS5vcHRpb25zV2l0aERlc2NyaXB0aW9ucztcclxuXHRcdFx0dGhpcy5oYXNWYWx1ZURlcGVuZGVuY3kgPSBkYXRhLmhhc1ZhbHVlRGVwZW5kZW5jeTtcclxuXHRcdFx0dGhpcy5ub1ZhbHVlRGVwZW5kZW5jeSA9IGRhdGEubm9WYWx1ZURlcGVuZGVuY3k7XHJcblx0XHRcdHRoaXMuZGVwZW5kZW5jaWVzID0gZGF0YS5kZXBlbmRlbmNpZXM7XHJcblx0XHRcdHRoaXMucmVxdWlyZWQgPSBkYXRhLnJlcXVpcmVkO1xyXG5cdFx0XHR0aGlzLm5hbWUgPSBkYXRhLm5hbWU7XHJcblx0XHRcdHRoaXMuYWxsRGVwZW5kZW5jaWVzTXVzdEJlTWV0ID0gZGF0YS5hbGxEZXBlbmRlbmNpZXNNdXN0QmVNZXQ7XHJcblx0XHRcdHRoaXMubXVsdGkgPSBkYXRhLm11bHRpO1xyXG5cdFx0XHR0aGlzLm1heCA9IGRhdGEubWF4O1xyXG5cdFx0XHR0aGlzLm1pbiA9IGRhdGEubWluO1xyXG5cdFx0XHR0aGlzLnN0ZXAgPSBkYXRhLnN0ZXA7XHJcblx0XHRcdHRoaXMuY3VzdG9tVmFsdWUgPSBkYXRhLnZhbHVlO1xyXG5cdFx0fSBjYXRjaCAoZXgpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihleCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGJpbmRFdmVudHMoKTogdm9pZCB7XHJcblx0XHR0aGlzLm9uVmFsaWRhdGUub24oZSA9PiB7XHJcblx0XHRcdGlmICh0aGlzLnZhbGlkKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuY2xvc2VzdCgnLmN1c3RvbS12YWxpZGF0aW9uLXRhcmdldCcpKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNsb3Nlc3QoJy5jdXN0b20tdmFsaWRhdGlvbi10YXJnZXQnKS5jbGFzc0xpc3QucmVtb3ZlKFwiaW52YWxpZFwiKTtcclxuXHRcdFx0XHRcdHRoaXMuY2xvc2VzdCgnLmN1c3RvbS12YWxpZGF0aW9uLXRhcmdldCcpLmNsYXNzTGlzdC5hZGQoXCJ2YWxpZFwiKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuY2xvc2VzdCgnLmN1c3RvbS12YWxpZGF0aW9uLXRhcmdldCcpKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNsb3Nlc3QoJy5jdXN0b20tdmFsaWRhdGlvbi10YXJnZXQnKS5jbGFzc0xpc3QuYWRkKFwiaW52YWxpZFwiKTtcclxuXHRcdFx0XHRcdHRoaXMuY2xvc2VzdCgnLmN1c3RvbS12YWxpZGF0aW9uLXRhcmdldCcpLmNsYXNzTGlzdC5yZW1vdmUoXCJ2YWxpZFwiKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5kb21VdGlsLmZvY3VzKCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5vbkNoYW5nZS5vbihlID0+IHtcclxuXHRcdFx0aWYgKHRoaXMudG91Y2hlZCkge1xyXG5cdFx0XHRcdHRoaXMudmFsaWRhdGUoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldEF0dHJpYnV0ZXMoKTogdm9pZCB7XHJcblx0XHR0aGlzLnNldEF0dHJpYnV0ZShcImN1c3RvbS1pbnB1dFwiLCBcIlwiKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKFwibmFtZVwiLCB0aGlzLm5hbWUpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBiaW5kRGVwZW5kZW5jaWVzKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuaGFzVmFsdWVEZXBlbmRlbmN5ICYmIHRoaXMuaGFzVmFsdWVEZXBlbmRlbmN5Lml0ZW1zLmxlbmd0aCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGZpZWxkTmFtZSBvZiB0aGlzLmhhc1ZhbHVlRGVwZW5kZW5jeS5pdGVtcykge1xyXG5cdFx0XHRcdHRoaXMuYmluZERlcGVuZGVuY3koZmllbGROYW1lLCBcImhhc1wiKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLm5vVmFsdWVEZXBlbmRlbmN5ICYmIHRoaXMubm9WYWx1ZURlcGVuZGVuY3kuaXRlbXMubGVuZ3RoKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZmllbGROYW1lIG9mIHRoaXMubm9WYWx1ZURlcGVuZGVuY3kuaXRlbXMpIHtcclxuXHRcdFx0XHR0aGlzLmJpbmREZXBlbmRlbmN5KGZpZWxkTmFtZSwgXCJub1wiKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmRlcGVuZGVuY2llcyAmJiB0aGlzLmRlcGVuZGVuY2llcy5sZW5ndGgpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpbmRleCBpbiB0aGlzLmRlcGVuZGVuY2llcykge1xyXG5cdFx0XHRcdGlmICh0aGlzLmRlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGRlcGVuZGVuY3kgPSB0aGlzLmRlcGVuZGVuY2llc1tpbmRleF07XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGZpZWxkTmFtZSBvZiBkZXBlbmRlbmN5Lml0ZW1zKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuYmluZERlcGVuZGVuY3koXHJcblx0XHRcdFx0XHRcdFx0ZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFwiY3VzdG9tXCIsXHJcblx0XHRcdFx0XHRcdFx0ZGVwZW5kZW5jeS52YWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRkZXBlbmRlbmN5LmNyaXRlcmlhLFxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBiaW5kRGVwZW5kZW5jeShlbGVtZW50TmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIHZhbHVlPzogc3RyaW5nLCBjcml0ZXJpYT86IHN0cmluZywpOiB2b2lkIHtcclxuXHRcdGxldCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW25hbWU9XCIke2VsZW1lbnROYW1lfVwiXWApIGFzIEN1c3RvbUlucHV0RWxlbWVudDtcclxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgQ3VzdG9tSW5wdXRFbGVtZW50KSB7XHJcblx0XHRcdGVsZW1lbnQuY29tcGFyZVZsYXVlcy5wdXNoKHZhbHVlKTtcclxuXHRcdFx0aWYgKHRoaXMuZGVwZW5kZW50T25MaXN0Lmhhc093blByb3BlcnR5KGVsZW1lbnQubmFtZSkpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0bGV0IGlzVmlzaWJsZUJ5RGVmYXVsdCA9IHR5cGUgPT09IFwibm9cIjtcclxuXHRcdFx0ZWxlbWVudC5SZWdpc3RlckRlcGVuZGVudE9uKHRoaXMubmFtZSwgaXNWaXNpYmxlQnlEZWZhdWx0KTtcclxuXHRcdFx0dGhpcy5vbkNoYW5nZS5vbihlID0+IHtcclxuXHRcdFx0XHRsZXQgSXNDb25kaXRpb25NYXRjaGVkID0gZmFsc2U7XHJcblx0XHRcdFx0aWYgKHR5cGUgPT09IFwiaGFzXCIpIHtcclxuXHRcdFx0XHRcdElzQ29uZGl0aW9uTWF0Y2hlZCA9ICEhZS52YWx1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHR5cGUgPT09IFwibm9cIikge1xyXG5cdFx0XHRcdFx0SXNDb25kaXRpb25NYXRjaGVkID0gIWUudmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh0eXBlID09PSBcImN1c3RvbVwiKSB7XHJcblx0XHRcdFx0XHRpZiAoY3JpdGVyaWEgPT09IFwiRXhhY3RcIikge1xyXG5cdFx0XHRcdFx0XHRJc0NvbmRpdGlvbk1hdGNoZWQgPSBlbGVtZW50LmlzVmFsdWVDb25kaXRpb25NYXRjaGVkKGUudmFsdWUpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChjcml0ZXJpYSA9PT0gXCJMZXNzVGhhblwiKSB7XHJcblx0XHRcdFx0XHRcdElzQ29uZGl0aW9uTWF0Y2hlZCA9IGUudmFsdWUgPCB2YWx1ZTtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoY3JpdGVyaWEgPT09IFwiTW9yZVRoYW5cIikge1xyXG5cdFx0XHRcdFx0XHRJc0NvbmRpdGlvbk1hdGNoZWQgPSBlLnZhbHVlID4gdmFsdWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsZW1lbnQuRGVwZW5kZW50T25TdGF0ZUNoYW5nZWQodGhpcy5uYW1lLCBJc0NvbmRpdGlvbk1hdGNoZWQpO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0dGhpcy5vblZpc2liaWxpdHlDaGFuZ2VkLm9uKGUgPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLnZpc2liaWxpdHlTdGF0ZSkge1xyXG5cdFx0XHRcdFx0dGhpcy5vbkNoYW5nZS5lbWl0KFxyXG5cdFx0XHRcdFx0XHRuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCBcImNoYW5nZVwiKSxcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGVsZW1lbnQuRGVwZW5kZW50T25TdGF0ZUNoYW5nZWQodGhpcy5uYW1lLCBmYWxzZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2V0VmlzaWJpbGl0eSgpIHtcclxuXHRcdGlmICh0aGlzLmFsbERlcGVuZGVuY2llc011c3RCZU1ldCkge1xyXG5cdFx0XHR0aGlzLnZpc2liaWxpdHlTdGF0ZSA9IE9iamVjdC52YWx1ZXModGhpcy5kZXBlbmRlbnRPbkxpc3QpLmV2ZXJ5KHN0YXRlID0+IHN0YXRlKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMudmlzaWJpbGl0eVN0YXRlID0gT2JqZWN0LnZhbHVlcyh0aGlzLmRlcGVuZGVudE9uTGlzdCkuc29tZShzdGF0ZSA9PiBzdGF0ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMudmlzaWJpbGl0eVN0YXRlKSB7XHJcblx0XHRcdHRoaXMuc2hvdygpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5oaWRlKCk7XHJcblx0XHR9XHJcblx0XHR0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZWQuZW1pdChuZXcgQ3VzdG9tRWxlbWVudEV2ZW50QXJncyh0aGlzLnZhbHVlLCBcIlZpc2liaWxpdHlDaGFuZ2VkXCIpKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaGlkZSgpIHtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKFwiaGlkZGVuXCIsIFwiXCIpO1xyXG5cdFx0aWYgKHRoaXMuY2xvc2VzdCgnLmN1c3RvbS12YWxpZGF0aW9uLXRhcmdldCcpKSB7XHJcblx0XHRcdHRoaXMuY2xvc2VzdCgnLmN1c3RvbS12YWxpZGF0aW9uLXRhcmdldCcpLnNldEF0dHJpYnV0ZShcImhpZGRlblwiLCBcIlwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2hvdygpIHtcclxuXHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiaGlkZGVuXCIpO1xyXG5cdFx0aWYgKHRoaXMuY2xvc2VzdCgnLmN1c3RvbS12YWxpZGF0aW9uLXRhcmdldCcpKSB7XHJcblx0XHRcdHRoaXMuY2xvc2VzdCgnLmN1c3RvbS12YWxpZGF0aW9uLXRhcmdldCcpLnJlbW92ZUF0dHJpYnV0ZShcImhpZGRlblwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByb3RlY3RlZCBnZXRDaGlsZElucHV0KHNlbGVjdG9yOiBzdHJpbmcpOiBIVE1MSW5wdXRFbGVtZW50IHtcclxuXHRcdGxldCBlbGVtZW50OiBhbnkgPSB0aGlzO1xyXG5cdFx0aWYgKHRoaXMuc2hhZG93Um9vdCkge1xyXG5cdFx0XHRlbGVtZW50ID0gdGhpcy5zaGFkb3dSb290O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgYXMgSFRNTElucHV0RWxlbWVudDtcclxuXHR9XHJcblxyXG5cdHByb3RlY3RlZCBnZXRDaGlsZElucHV0cyhzZWxlY3Rvcjogc3RyaW5nKTogSFRNTElucHV0RWxlbWVudFtdIHtcclxuXHRcdGxldCBlbGVtZW50OiBhbnkgPSB0aGlzO1xyXG5cdFx0aWYgKHRoaXMuc2hhZG93Um9vdCkge1xyXG5cdFx0XHRlbGVtZW50ID0gdGhpcy5zaGFkb3dSb290O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIEFycmF5VXRpbC5Gcm9tTm9kZUxpc3QoXHJcblx0XHRcdGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvciksXHJcblx0XHQpIGFzIEhUTUxJbnB1dEVsZW1lbnRbXTtcclxuXHR9XHJcblxyXG5cdHByb3RlY3RlZCBnZXRDaGlsZEVsZW1lbnQoc2VsZWN0b3I6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcclxuXHRcdGxldCBlbGVtZW50OiBhbnkgPSB0aGlzO1xyXG5cdFx0aWYgKHRoaXMuc2hhZG93Um9vdCkge1xyXG5cdFx0XHRlbGVtZW50ID0gdGhpcy5zaGFkb3dSb290O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgYXMgSFRNTEVsZW1lbnQ7XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgZ2V0Q2hpbGRFbGVtZW50cyhzZWxlY3Rvcjogc3RyaW5nKTogSFRNTEVsZW1lbnRbXSB7XHJcblx0XHRsZXQgZWxlbWVudDogYW55ID0gdGhpcztcclxuXHRcdGlmICh0aGlzLnNoYWRvd1Jvb3QpIHtcclxuXHRcdFx0ZWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdDtcclxuXHRcdH1cclxuXHRcdHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpIGFzIEhUTUxFbGVtZW50W107XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgUmVnaXN0ZXJEZXBlbmRlbnRPbihuYW1lOiBzdHJpbmcsIGluaXRpYWxWYWx1ZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcblx0XHR0aGlzLmRlcGVuZGVudE9uTGlzdFtuYW1lXSA9IGluaXRpYWxWYWx1ZTtcclxuXHRcdHRoaXMuc2V0VmlzaWJpbGl0eSgpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIERlcGVuZGVudE9uU3RhdGVDaGFuZ2VkKG5hbWU6IHN0cmluZywgc3RhdGU6IGJvb2xlYW4pIHtcclxuXHRcdGlmICh0aGlzLmRlcGVuZGVudE9uTGlzdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG5cdFx0XHR0aGlzLmRlcGVuZGVudE9uTGlzdFtuYW1lXSA9IHN0YXRlO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZXRWaXNpYmlsaXR5KCk7XHJcblx0fVxyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGFic3RyYWN0IGNsYXNzIEJhc2VEaWN0aW9uYXJ5IHtcclxuXHRhYnN0cmFjdCBkaWN0aW9uYXJ5OiBhbnk7XHJcblxyXG5cdGdldChrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcblx0XHRjb25zdCBrZXlQYXJ0cyA9IGtleS5zcGxpdCgnLicpO1xyXG5cdFx0dmFyIHJlc3VsdDogc3RyaW5nIHwgYW55ID0gdGhpcy5kaWN0aW9uYXJ5O1xyXG5cdFx0a2V5UGFydHMuZm9yRWFjaChrZXlQYXJ0ID0+IHtcclxuXHRcdFx0cmVzdWx0ID0gcmVzdWx0W2tleVBhcnRdO1xyXG5cdFx0XHRpZiAoIXJlc3VsdCkge1xyXG5cdFx0XHRcdHJlc3VsdCA9IGtleTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn0iLCJpbXBvcnQgQmFzZURpY3Rpb25hcnkgZnJvbSBcIi4vQmFzZS9CYXNlRGljdGlvbmFyeVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGFuaXNoRGljdGlvbmFyeSBleHRlbmRzIEJhc2VEaWN0aW9uYXJ5IHtcclxuXHJcblx0ZGljdGlvbmFyeTogYW55ID0ge1xyXG5cdFx0QWRkcmVzc0VsZW1lbnQ6IHtcclxuXHRcdFx0QWRkcmVzczogXCJhZHJlc3NlXCIsXHJcblx0XHRcdENpdHk6IFwiYnlcIixcclxuXHRcdFx0Q291bnRyeTogXCJsYW5kXCIsXHJcblx0XHRcdFppcDogXCJwb3N0bnVtbWVyXCJcclxuXHRcdH0sXHJcblx0XHRCYW5rRWxlbWVudDoge1xyXG5cdFx0XHRBY2NvdW50OiBcIktvbnRvbnVtbWVyXCIsXHJcblx0XHRcdFJlZ2lzdHJhdGlvbk51bWJlcjogXCJSZWdpc3RyZXJpbmdzbnVtbWVyXCJcclxuXHRcdH1cclxuXHR9O1xyXG5cclxufSIsImltcG9ydCBCYXNlRGljdGlvbmFyeSBmcm9tIFwiLi9CYXNlL0Jhc2VEaWN0aW9uYXJ5XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmdsaXNoRGljdGlvbmFyeSBleHRlbmRzIEJhc2VEaWN0aW9uYXJ5IHtcclxuXHJcblx0ZGljdGlvbmFyeTogYW55ID0ge1xyXG5cdFx0QWRkcmVzc0VsZW1lbnQ6IHtcclxuXHRcdFx0QWRkcmVzczogXCJhZGRyZXNzXCIsXHJcblx0XHRcdENpdHk6IFwiY2l0eVwiLFxyXG5cdFx0XHRDb3VudHJ5OiBcImNvdW50cnlcIixcclxuXHRcdFx0WmlwOiBcInppcFwiXHJcblx0XHR9LFxyXG5cdFx0QmFua0VsZW1lbnQ6IHtcclxuXHRcdFx0QWNjb3VudDogXCJCYW5rIEFjY291bnRcIixcclxuXHRcdFx0UmVnaXN0cmF0aW9uTnVtYmVyOiBcIkJhbmsgQWNjb3VudCBSZWdpc3RyYXRpb24gTnVtYmVyXCJcclxuXHRcdH1cclxuXHR9O1xyXG5cclxufVxyXG4iLCJpbXBvcnQgRGFuaXNoRGljdGlvbmFyeSBmcm9tIFwiLi9MYW5ndWFnZXMvRGFuaXNoRGljdGlvbmFyeVwiO1xyXG5pbXBvcnQgRW5nbGlzaERpY3Rpb25hcnkgZnJvbSBcIi4vTGFuZ3VhZ2VzL0VuZ2xpc2hEaWN0aW9uYXJ5XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUcmFuc2xhdG9yIHtcclxuXHRwcml2YXRlIHN0YXRpYyBsYW5nYXVnZXMgPSBbXHJcblx0XHQnZW4nLFxyXG5cdFx0J2RhJ1xyXG5cdF07XHJcblx0cHJpdmF0ZSBzdGF0aWMgZGFuaXNoRGljdGlvbmFyeSA9IG5ldyBEYW5pc2hEaWN0aW9uYXJ5KCk7XHJcblx0cHJpdmF0ZSBzdGF0aWMgZW5nbGlzaERpY3Rpb25hcnkgPSBuZXcgRW5nbGlzaERpY3Rpb25hcnkoKTtcclxuXHJcblx0c3RhdGljIFRyYW5zbGF0ZShrZXk6IHN0cmluZywgbGFuZ3VhZ2UgPSAnZGEnKTogc3RyaW5nIHtcclxuXHRcdGxhbmd1YWdlID0gbGFuZ3VhZ2UudG9Mb3dlckNhc2UoKTtcclxuXHRcdGNvbnN0IGlzU3VwcG9ydGVkTGFuZ3VhZ2UgPSBUcmFuc2xhdG9yLmxhbmdhdWdlcy5pbmRleE9mKGxhbmd1YWdlKSAhPSAtMTtcclxuXHRcdGlmICghaXNTdXBwb3J0ZWRMYW5ndWFnZSkge1xyXG5cdFx0XHRsYW5ndWFnZSA9ICdkYSdcclxuXHRcdH1cclxuXHRcdHN3aXRjaCAobGFuZ3VhZ2UpIHtcclxuXHRcdFx0Y2FzZSAnZGEnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmRhbmlzaERpY3Rpb25hcnkuZ2V0KGtleSk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJ2VuJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lbmdsaXNoRGljdGlvbmFyeS5nZXQoa2V5KTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHR9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVOYW1lc1BvbHlmaWxsKCkge1xyXG5cdGlmIChFbGVtZW50LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVOYW1lcyA9PSB1bmRlZmluZWQpIHtcclxuXHRcdEVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5hbWVzID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHR2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuXHRcdFx0dmFyIGxlbmd0aCA9IGF0dHJpYnV0ZXMubGVuZ3RoO1xyXG5cdFx0XHR2YXIgcmVzdWx0ID0gbmV3IEFycmF5KGxlbmd0aCk7XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRyZXN1bHRbaV0gPSBhdHRyaWJ1dGVzW2ldLm5hbWU7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH07XHJcblx0fVxyXG59O1xyXG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBEb21VdGlsaXR5IHtcclxuXHJcblx0Ly8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTIzMDQ0NS9qYXZhc2NyaXB0LXJlZ2V4LWhvdy10by1ib2xkLXNwZWNpZmljLXdvcmRzLXdpdGgtcmVnZXhcclxuXHRzdGF0aWMgYm9sZGVuVGV4dChpbnB1dFRleHQ6IHN0cmluZywgbWF0Y2hpbmRUZXh0VG9Cb2xkZW46IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIGlucHV0VGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoJyhefCkoJyArIG1hdGNoaW5kVGV4dFRvQm9sZGVuICsgJykofCQpJywgJ2lnJyksICckMTxiPiQyPC9iPiQzJyk7XHJcblx0fVxyXG59IiwidHlwZSBQcm9jZWR1cmUgPSAoLi4uYXJnczogYW55W10pID0+IGFueTtcclxuXHJcbmludGVyZmFjZSBEZWJvdW5jZSB7XHJcblx0KC4uLmFyZ3M6IGFueVtdKTogYW55O1xyXG5cdGNsZWFyOiAoKSA9PiB2b2lkO1xyXG5cdGZsdXNoOiAoKSA9PiB2b2lkO1xyXG59XHJcblxyXG5jb25zdCBkZWJvdW5jZXIgPSAoZnVuYzogUHJvY2VkdXJlLCB3YWl0OiBudW1iZXIsIGltbWVkaWF0ZTogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XHJcblx0bGV0IHRpbWVvdXQ6IG51bWJlciB8IG51bGw7XHJcblx0bGV0IGFyZ3M6IGFueTtcclxuXHRsZXQgY29udGV4dDogYW55O1xyXG5cdGxldCByZXN1bHQ6IGFueTtcclxuXHJcblx0Y29uc3QgbGF0ZXIgPSAoKSA9PiB7XHJcblx0XHR0aW1lb3V0ID0gbnVsbDtcclxuXHRcdGlmICghaW1tZWRpYXRlKSB7XHJcblx0XHRcdHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XHJcblx0XHRcdGNvbnRleHQgPSBhcmdzID0gbnVsbDtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRjb25zdCBkZWJvdW5jZWRGdW5jOiBQcm9jZWR1cmUgPSBmdW5jdGlvbiAodGhpczogYW55KSB7XHJcblx0XHRjb250ZXh0ID0gdGhpcztcclxuXHRcdGFyZ3MgPSBhcmd1bWVudHM7XHJcblx0XHRjb25zdCBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xyXG5cclxuXHRcdGlmICghdGltZW91dCkge1xyXG5cdFx0XHR0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChjYWxsTm93KSB7XHJcblx0XHRcdHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XHJcblx0XHRcdGNvbnRleHQgPSBhcmdzID0gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH07XHJcblxyXG5cdGNvbnN0IGNsZWFyID0gKCkgPT4ge1xyXG5cdFx0aWYgKHRpbWVvdXQpIHtcclxuXHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG5cdFx0XHR0aW1lb3V0ID0gbnVsbDtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRjb25zdCBmbHVzaCA9ICgpID0+IHtcclxuXHRcdGlmICh0aW1lb3V0KSB7XHJcblx0XHRcdHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XHJcblx0XHRcdGNvbnRleHQgPSBhcmdzID0gbnVsbDtcclxuXHJcblx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcclxuXHRcdFx0dGltZW91dCA9IG51bGw7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0Y29uc3QgZGVib3VuY2VkOiBEZWJvdW5jZSA9ICgoKSA9PiB7XHJcblx0XHRjb25zdCBmOiBhbnkgPSBkZWJvdW5jZWRGdW5jO1xyXG5cdFx0Zi5jbGVhciA9IGNsZWFyO1xyXG5cdFx0Zi5mbHVzaCA9IGZsdXNoO1xyXG5cdFx0cmV0dXJuIGY7XHJcblx0fSkoKTtcclxuXHJcblx0cmV0dXJuIGRlYm91bmNlZDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGRlYm91bmNlcjsiLCJpbXBvcnQgSVZhbGlkYXRpb24gZnJvbSAnLi4vSVZhbGlkYXRvci5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFua0FjY291bnRWYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdGlvbiB7XHJcbiAgICBpc1NhdGlzZmllZEJ5KGlucHV0OiBzdHJpbmcsIGFsbG93RW1wdHk6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IElWYWxpZGF0aW9uIGZyb20gJy4uL0lWYWxpZGF0b3IuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhbmtBY2NvdW50UmVnaXN0cmF0aW9uTnVtYmVyVmFsaWRhdG9yXHJcbiAgICBpbXBsZW1lbnRzIElWYWxpZGF0aW9uIHtcclxuICAgIGlzU2F0aXNmaWVkQnkoaW5wdXQ6IHN0cmluZywgYWxsb3dFbXB0eTogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgSVZhbGlkYXRpb24gZnJvbSAnLi4vSVZhbGlkYXRvci5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFua0lkTm9yd2F5VmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRpb24ge1xyXG4gICAgaXNTYXRpc2ZpZWRCeShpbnB1dDogc3RyaW5nLCBhbGxvd0VtcHR5OiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrTm9QZXJzb25udW1tZXIoaW5wdXQsIGFsbG93RW1wdHkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tOb1BlcnNvbm51bW1lcihcclxuICAgICAgICBpbnB1dDogc3RyaW5nLFxyXG4gICAgICAgIGFsbG93RW1wdHk6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFpbnB1dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYWxsb3dFbXB0eTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcGVyc29ubnVtbWVyOiBzdHJpbmcgPSBpbnB1dC5yZXBsYWNlKCcgJywgJycpLnJlcGxhY2UoJy0nLCAnJyk7XHJcbiAgICAgICAgY29uc3QgcmVnZXg6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoXHJcbiAgICAgICAgICAgIC9eKDBbMS05XXwxWzAtOV18MlswLTldfDNbMC0xXSkoMFsxLTldfDFbMC0yXSkoXFxkezJ9KShcXGR7NX0pJC8sXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gcmVnZXgudGVzdChwZXJzb25udW1tZXIpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCBJVmFsaWRhdGlvbiBmcm9tICcuLi9JVmFsaWRhdG9yLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYW5rSWRTd2VkZW5WYWxpZGF0b3IgaW1wbGVtZW50cyBJVmFsaWRhdGlvbiB7XHJcbiAgICBpc1NhdGlzZmllZEJ5KGlucHV0OiBzdHJpbmcsIGFsbG93RW1wdHk6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tTZVBlcnNvbm51bW1lcihpbnB1dCwgYWxsb3dFbXB0eSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja1NlUGVyc29ubnVtbWVyKFxyXG4gICAgICAgIGlucHV0OiBzdHJpbmcsXHJcbiAgICAgICAgYWxsb3dFbXB0eTogYm9vbGVhbiA9IHRydWUsXHJcbiAgICApOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWlucHV0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhbGxvd0VtcHR5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwZXJzb25udW1tZXI6IHN0cmluZyA9IGlucHV0LnJlcGxhY2UoJyAnLCAnJykucmVwbGFjZSgnLScsICcnKTtcclxuICAgICAgICBjb25zdCByZWdleDogUmVnRXhwID0gbmV3IFJlZ0V4cChcclxuICAgICAgICAgICAgL14oMTlcXGR7Mn18MjBcXGR7Mn0pKDBbMS05XXwxWzAtMl0pKDBbMS05XXwxWzAtOV18MlswLTldfDNbMC0xXSkoXFxkezR9KSQvLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QocGVyc29ubnVtbWVyKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgSVZhbGlkYXRpb24gZnJvbSAnLi4vSVZhbGlkYXRvci5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3ByVmFsaWRhdG9yIGltcGxlbWVudHMgSVZhbGlkYXRpb24ge1xyXG4gICAgaXNTYXRpc2ZpZWRCeShpbnB1dDogc3RyaW5nLCBhbGxvd0VtcHR5OiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ3ByKGlucHV0LCBhbGxvd0VtcHR5KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgbW9kdWx1czExTXVsdGlwbHkodmFsdWU6IG51bWJlciwgaW5kZXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbDogbnVtYmVyW10gPSBbNCwgMywgMiwgNywgNiwgNSwgNCwgMywgMiwgMV07XHJcbiAgICAgICAgcmV0dXJuIGNvbnRyb2xbaW5kZXhdICogdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtb2R1bHVzMTFFeGNlcHRpb25zKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBleGNlcHRpb25EYXRlczogRGF0ZVtdID0gW1xyXG4gICAgICAgICAgICAxOTYwLFxyXG4gICAgICAgICAgICAxOTY0LFxyXG4gICAgICAgICAgICAxOTY1LFxyXG4gICAgICAgICAgICAxOTY2LFxyXG4gICAgICAgICAgICAxOTY5LFxyXG4gICAgICAgICAgICAxOTcwLFxyXG4gICAgICAgICAgICAxOTgwLFxyXG4gICAgICAgICAgICAxOTgyLFxyXG4gICAgICAgICAgICAxOTg0LFxyXG4gICAgICAgICAgICAxOTg1LFxyXG4gICAgICAgICAgICAxOTg2LFxyXG4gICAgICAgICAgICAxOTg3LFxyXG4gICAgICAgICAgICAxOTg4LFxyXG4gICAgICAgICAgICAxOTg5LFxyXG4gICAgICAgICAgICAxOTkwLFxyXG4gICAgICAgIF0ubWFwKHggPT4gbmV3IERhdGUoeCwgMCwgMSkpOyAvLyBtb250aHMgYXJlIDAtaW5kZXhlZFxyXG5cclxuICAgICAgICBjb25zdCBjcHJEYXRlOiBEYXRlID0gdGhpcy5nZXRDcHJEYXRlKGlucHV0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkRhdGVzLnNvbWUoeCA9PiB4LmdldERhdGUoKSA9PT0gY3ByRGF0ZS5nZXREYXRlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tDcHJEYXRlKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgeWVhcjogbnVtYmVyID0gK2lucHV0LnN1YnN0cig0LCAyKSArIDIwMDA7XHJcbiAgICAgICAgeWVhciAtPSB5ZWFyID4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpID8gMTAwIDogMDsgLy8gaXMgMjB4eCBvciAxOXh4XHJcbiAgICAgICAgY29uc3QgbW9udGg6IG51bWJlciA9ICtpbnB1dC5zdWJzdHIoMiwgMikgLSAxO1xyXG4gICAgICAgIGNvbnN0IGRheTogbnVtYmVyID0gK2lucHV0LnN1YnN0cigwLCAyKTtcclxuICAgICAgICBjb25zdCBkYXRlOiBEYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSk7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXHJcbiAgICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGggJiZcclxuICAgICAgICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IGRheVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDcHJEYXRlKGlucHV0OiBzdHJpbmcpOiBEYXRlIHtcclxuICAgICAgICBsZXQgeWVhcjogbnVtYmVyID0gK2lucHV0LnN1YnN0cig0LCAyKSArIDIwMDA7XHJcbiAgICAgICAgeWVhciAtPSB5ZWFyID4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpID8gMTAwIDogMDsgLy8gaXMgMjB4eCBvciAxOXh4XHJcbiAgICAgICAgY29uc3QgbW9udGg6IG51bWJlciA9ICtpbnB1dC5zdWJzdHIoMiwgMikgLSAxO1xyXG4gICAgICAgIGNvbnN0IGRheTogbnVtYmVyID0gK2lucHV0LnN1YnN0cigwLCAyKTtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0NwcihpbnB1dDogc3RyaW5nLCBhbGxvd0VtcHR5OiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghaW5wdXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbG93RW1wdHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNwcm5yOiBzdHJpbmcgPSBpbnB1dC5yZXBsYWNlKCcgJywgJycpLnJlcGxhY2UoJy0nLCAnJyk7XHJcbiAgICAgICAgaWYgKCFjcHJuci5tYXRjaCgvXlxcZHsxMH0kLykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tDcHJEYXRlKGNwcm5yKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1vZHVsdXMxMUV4Y2VwdGlvbnMoY3BybnIpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG91dHB1dDogbnVtYmVyID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgMTA7IGkrKykge1xyXG4gICAgICAgICAgICBvdXRwdXQgKz0gdGhpcy5tb2R1bHVzMTFNdWx0aXBseShcclxuICAgICAgICAgICAgICAgIHBhcnNlSW50KGNwcm5yLnN1YnN0cihpLCAxKSwgMTApLFxyXG4gICAgICAgICAgICAgICAgaSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQgJSAxMSA9PT0gMDsgLy8gaHZpcyBvdXRwdXQgZ8OlciBvcCBpIDExLCBlciBkZXQgZXQgZ3lsZGlndCBjcHIuXHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IElWYWxpZGF0aW9uIGZyb20gJy4uL0lWYWxpZGF0b3IuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN2clZhbGlkYXRvciBpbXBsZW1lbnRzIElWYWxpZGF0aW9uIHtcclxuICAgIGlzU2F0aXNmaWVkQnkoaW5wdXQ6IHN0cmluZywgYWxsb3dFbXB0eTogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0N2cihpbnB1dCwgYWxsb3dFbXB0eSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0N2cihpbnB1dDogc3RyaW5nLCBhbGxvd0VtcHR5OiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghYWxsb3dFbXB0eSAmJiAhaW5wdXQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBjb25zdCBjdnJucjogc3RyaW5nID0gaW5wdXQucmVwbGFjZSgnICcsICcnKS5yZXBsYWNlKCctJywgJycpO1xyXG4gICAgICAgIGlmICghY3ZybnIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbG93RW1wdHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghL15cXGR7OH0kLy50ZXN0KGN2cm5yKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjdnIgbnVtcmUga2FuIMOlYmVuYmFydCBvZ3PDpSBtb2R1bHVzMTEgdGVzdGVzLlxyXG4gICAgICAgIGxldCB0b3RhbDogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgWzIsIDcsIDYsIDUsIDQsIDMsIDIsIDFdLmZvckVhY2goKGVsbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgdG90YWwgKz0gcGFyc2VJbnQoY3ZybnJbaW5kZXhdLCAxMCkgKiBlbG07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0b3RhbCAlIDExID09PSAwO1xyXG4gICAgfVxyXG59XHJcbiIsImNsYXNzIGVsZW1lbnRDb25maWcge1xyXG5cdHNlbGVjdG9yOiBzdHJpbmc7XHJcblx0dGVtcGxhdGU6IHN0cmluZztcclxuXHRzdHlsZTogc3RyaW5nO1xyXG5cdHVzZVNoYWRvdzogYm9vbGVhbjtcclxuXHR0ZW1wbGF0ZVBhdGg/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmNvbnN0IHZhbGlkYXRlU2VsZWN0b3IgPSAoc2VsZWN0b3I6IHN0cmluZykgPT4ge1xyXG5cdGlmIChzZWxlY3Rvci5pbmRleE9mKCctJykgPD0gMCkge1xyXG5cdFx0dGhyb3cgbmV3IEVycm9yKCdZb3UgbmVlZCBhdCBsZWFzdCAxIGRhc2ggaW4gdGhlIGN1c3RvbSBlbGVtZW50IG5hbWUhJyk7XHJcblx0fVxyXG59O1xyXG5cclxuY29uc3QgQ3VzdG9tRWxlbWVudCA9IChjb25maWc6IGVsZW1lbnRDb25maWcpID0+IHtcclxuXHRyZXR1cm4gKGNsczogYW55KSA9PiB7XHJcblx0XHR2YWxpZGF0ZVNlbGVjdG9yKGNvbmZpZy5zZWxlY3Rvcik7XHJcblx0XHRsZXQgdGVtcGxhdGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcclxuXHRcdGlmICghY29uZmlnLnRlbXBsYXRlKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignWW91IG5lZWQgdG8gcGFzcyBhIHRlbXBsYXRlIGZvciB0aGUgZWxlbWVudCcpO1xyXG5cdFx0fVxyXG5cdFx0dGVtcGxhdGVFbGVtZW50LmlubmVySFRNTCA9IGA8c3R5bGU+JHtjb25maWcuc3R5bGV9PC9zdHlsZT4gJHtcclxuXHRcdFx0Y29uZmlnLnRlbXBsYXRlXHJcblx0XHRcdH1gO1xyXG5cdFx0bGV0IGNvbm5lY3RlZENhbGxiYWNrID0gY2xzLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7IH07XHJcblx0XHRjb25zdCBkaXNjb25uZWN0ZWRDYWxsYmFjayA9IGNscy5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkgeyB9O1xyXG5cclxuXHRcdGNscy5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdGxldCBjbG9uZSA9IGRvY3VtZW50LmltcG9ydE5vZGUodGVtcGxhdGVFbGVtZW50LmNvbnRlbnQsIHRydWUpO1xyXG5cdFx0XHRpZiAoY29uZmlnLnVzZVNoYWRvdyAmJiAhdGhpcy5zaGFkb3dSb290KSB7XHJcblx0XHRcdFx0dGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSkuYXBwZW5kQ2hpbGQoY2xvbmUpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuYXBwZW5kQ2hpbGQoY2xvbmUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLmNvbXBvbmVudFdpbGxNb3VudCkge1xyXG5cdFx0XHRcdHRoaXMuY29tcG9uZW50V2lsbE1vdW50KCk7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29ubmVjdGVkQ2FsbGJhY2suY2FsbCh0aGlzKTtcclxuXHRcdFx0aWYgKHRoaXMuY29tcG9uZW50RGlkTW91bnQpIHtcclxuXHRcdFx0XHR0aGlzLmNvbXBvbmVudERpZE1vdW50KCk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0Y2xzLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0aWYgKHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQpIHtcclxuXHRcdFx0XHR0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh0aGlzKTtcclxuXHRcdFx0aWYgKHRoaXMuY29tcG9uZW50RGlkVW5tb3VudCkge1xyXG5cdFx0XHRcdHRoaXMuY29tcG9uZW50RGlkVW5tb3VudCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdFx0d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShjb25maWcuc2VsZWN0b3IsIGNscyk7XHJcblx0fTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEN1c3RvbUVsZW1lbnQ7XHJcbiIsImltcG9ydCAnQHdlYmNvbXBvbmVudHMvd2ViY29tcG9uZW50c2pzL3dlYmNvbXBvbmVudHMtYnVuZGxlJztcclxuaW1wb3J0ICdAd2ViY29tcG9uZW50cy93ZWJjb21wb25lbnRzanMvY3VzdG9tLWVsZW1lbnRzLWVzNS1hZGFwdGVyLmpzJztcclxuaW1wb3J0ICdAd2ViY29tcG9uZW50cy93ZWJjb21wb25lbnRzanMvd2ViY29tcG9uZW50cy1sb2FkZXIuanMnO1xyXG5cclxuLy8gZm9ybVxyXG5pbXBvcnQgeyBDdXN0b21Gb3JtIH0gZnJvbSAnLi9jdXN0b20tZm9ybSc7XHJcbmltcG9ydCB7IEN1c3RvbUlucHV0RWxlbWVudCB9IGZyb20gJy4vZnJhbWV3b3JrL0N1c3RvbUlucHV0RWxlbWVudCc7XHJcblxyXG4vLyBlbGVtZW50c1xyXG5pbXBvcnQgKiBhcyBlbGVtZW50cyBmcm9tICcuL2VsZW1lbnRzL0VsZW1lbnRzJztcclxuXHJcbmV4cG9ydCB7IEN1c3RvbUZvcm0sIGVsZW1lbnRzLCBDdXN0b21JbnB1dEVsZW1lbnQgfTtcclxuIl19