mailgun.js 10.4.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/mailgun.web.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see mailgun.web.js.LICENSE.txt */
2
- define((()=>(()=>{var t={2096:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t,e,r){this.name=t.name,this.require_tls=t.require_tls,this.skip_verification=t.skip_verification,this.state=t.state,this.wildcard=t.wildcard,this.spam_action=t.spam_action,this.created_at=t.created_at,this.smtp_password=t.smtp_password,this.smtp_login=t.smtp_login,this.type=t.type,this.receiving_dns_records=e||null,this.sending_dns_records=r||null;var n=["id","is_disabled","web_prefix","web_scheme"].reduce((function(e,r){return r in t&&(e[r]=t[r]),e}),{});Object.assign(this,n)};e.default=r},548:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(5469)),s=o(r(8426)),a=o(r(2096)),u=function(){function t(t,e,r,n){this.request=t,this.domainCredentials=e,this.domainTemplates=r,this.domainTags=n}return t.prototype._handleBoolValues=function(t){var e=t,r=Object.keys(e).reduce((function(t,r){var n=r;if("boolean"==typeof e[n]){var o=e[n];t[n]="true"===o.toString()?"true":"false"}return t}),{});return n(n({},t),r)},t.prototype._parseMessage=function(t){return t.body},t.prototype.parseDomainList=function(t){return t.body&&t.body.items?t.body.items.map((function(t){return new a.default(t)})):[]},t.prototype._parseDomain=function(t){return new a.default(t.body.domain,t.body.receiving_dns_records,t.body.sending_dns_records)},t.prototype._parseTrackingSettings=function(t){return t.body.tracking},t.prototype._parseTrackingUpdate=function(t){return t.body},t.prototype.list=function(t){var e=this;return this.request.get("/v3/domains",t).then((function(t){return e.parseDomainList(t)}))},t.prototype.get=function(t){var e=this;return this.request.get("/v3/domains/".concat(t)).then((function(t){return e._parseDomain(t)}))},t.prototype.create=function(t){var e=this,r=this._handleBoolValues(t);return this.request.postWithFD("/v3/domains",r).then((function(t){return e._parseDomain(t)}))},t.prototype.update=function(t,e){var r=this,n=this._handleBoolValues(e);return this.request.putWithFD("/v3/domains/".concat(t),n).then((function(t){return r._parseDomain(t)}))},t.prototype.verify=function(t){var e=this;return this.request.put("/v3/domains/".concat(t,"/verify")).then((function(t){return e._parseDomain(t)}))},t.prototype.destroy=function(t){var e=this;return this.request.delete("/v3/domains/".concat(t)).then((function(t){return e._parseMessage(t)}))},t.prototype.getConnection=function(t){return this.request.get("/v3/domains/".concat(t,"/connection")).then((function(t){return t})).then((function(t){return t.body.connection}))},t.prototype.updateConnection=function(t,e){return this.request.put("/v3/domains/".concat(t,"/connection"),e).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.getTracking=function(t){return this.request.get((0,i.default)("/v3/domains",t,"tracking")).then(this._parseTrackingSettings)},t.prototype.updateTracking=function(t,e,r){var n=this;if("boolean"==typeof(null==r?void 0:r.active))throw s.default.getUserDataError("Received boolean value for active property",'Property "active" must contain string value.');return this.request.putWithFD((0,i.default)("/v3/domains",t,"tracking",e),r).then((function(t){return n._parseTrackingUpdate(t)}))},t.prototype.getIps=function(t){return this.request.get((0,i.default)("/v3/domains",t,"ips")).then((function(t){var e;return null===(e=null==t?void 0:t.body)||void 0===e?void 0:e.items}))},t.prototype.assignIp=function(t,e){return this.request.postWithFD((0,i.default)("/v3/domains",t,"ips"),{ip:e})},t.prototype.deleteIp=function(t,e){return this.request.delete((0,i.default)("/v3/domains",t,"ips",e))},t.prototype.linkIpPool=function(t,e){return this.request.postWithFD((0,i.default)("/v3/domains",t,"ips"),{pool_id:e})},t.prototype.unlinkIpPoll=function(t,e){var r="";if(e.pool_id&&e.ip)throw s.default.getUserDataError("Too much data for replacement","Please specify either pool_id or ip (not both)");return e.pool_id?r="?pool_id=".concat(e.pool_id):e.ip&&(r="?ip=".concat(e.ip)),this.request.delete((0,i.default)("/v3/domains",t,"ips","ip_pool",r))},t.prototype.updateDKIMAuthority=function(t,e){return this.request.put("/v3/domains/".concat(t,"/dkim_authority"),{},{query:"self=".concat(e.self)}).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.updateDKIMSelector=function(t,e){return this.request.put("/v3/domains/".concat(t,"/dkim_selector"),{},{query:"dkim_selector=".concat(e.dkimSelector)}).then((function(t){return t}))},t.prototype.updateWebPrefix=function(t,e){return this.request.put("/v3/domains/".concat(t,"/web_prefix"),{},{query:"web_prefix=".concat(e.webPrefix)}).then((function(t){return t}))},t}();e.default=u},7721:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(5469)),i=function(){function t(t){this.request=t,this.baseRoute="/v3/domains/"}return t.prototype._parseDomainCredentialsList=function(t){return{items:t.body.items,totalCount:t.body.total_count}},t.prototype._parseMessageResponse=function(t){return{status:t.status,message:t.body.message}},t.prototype._parseDeletedResponse=function(t){return{status:t.status,message:t.body.message,spec:t.body.spec}},t.prototype.list=function(t,e){var r=this;return this.request.get((0,o.default)(this.baseRoute,t,"/credentials"),e).then((function(t){return r._parseDomainCredentialsList(t)}))},t.prototype.create=function(t,e){var r=this;return this.request.postWithFD("".concat(this.baseRoute).concat(t,"/credentials"),e).then((function(t){return r._parseMessageResponse(t)}))},t.prototype.update=function(t,e,r){var n=this;return this.request.putWithFD("".concat(this.baseRoute).concat(t,"/credentials/").concat(e),r).then((function(t){return n._parseMessageResponse(t)}))},t.prototype.destroy=function(t,e){var r=this;return this.request.delete("".concat(this.baseRoute).concat(t,"/credentials/").concat(e)).then((function(t){return r._parseDeletedResponse(t)}))},t}();e.default=i},7534:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.DomainTagStatistic=e.DomainTag=void 0;var c=u(r(5469)),l=u(r(2893)),f=function(t){this.tag=t.tag,this.description=t.description,this["first-seen"]=new Date(t["first-seen"]),this["last-seen"]=new Date(t["last-seen"])};e.DomainTag=f;var p=function(t){this.tag=t.body.tag,this.description=t.body.description,this.start=new Date(t.body.start),this.end=new Date(t.body.end),this.resolution=t.body.resolution,this.stats=t.body.stats.map((function(t){return i(i({},t),{time:new Date(t.time)})}))};e.DomainTagStatistic=p;var d=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r.baseRoute="/v3/",r}return o(e,t),e.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){return new f(t)})),e.pages=this.parsePageLinks(t,"?","tag"),e.status=t.status,e},e.prototype._parseTagStatistic=function(t){return new p(t)},e.prototype.list=function(t,e){return s(this,void 0,void 0,(function(){return a(this,(function(r){return[2,this.requestListWithPages((0,c.default)(this.baseRoute,t,"/tags"),e)]}))}))},e.prototype.get=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e)).then((function(t){return new f(t.body)}))},e.prototype.update=function(t,e,r){return this.request.put((0,c.default)(this.baseRoute,t,"/tags",e),r).then((function(t){return t.body}))},e.prototype.destroy=function(t,e){return this.request.delete("".concat(this.baseRoute).concat(t,"/tags/").concat(e)).then((function(t){return{message:t.body.message,status:t.status}}))},e.prototype.statistic=function(t,e,r){var n=this;return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats"),r).then((function(t){return n._parseTagStatistic(t)}))},e.prototype.countries=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/countries")).then((function(t){return t.body}))},e.prototype.providers=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/providers")).then((function(t){return t.body}))},e.prototype.devices=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/devices")).then((function(t){return t.body}))},e}(l.default);e.default=d},8992:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.DomainTemplateItem=void 0;var c=u(r(5469)),l=u(r(2893)),f=function(t){this.name=t.name,this.description=t.description,this.createdAt=t.createdAt?new Date(t.createdAt):"",this.createdBy=t.createdBy,this.id=t.id,t.version&&(this.version=t.version,t.version.createdAt&&(this.version.createdAt=new Date(t.version.createdAt))),t.versions&&t.versions.length&&(this.versions=t.versions.map((function(t){var e=i({},t);return e.createdAt=new Date(t.createdAt),e})))};e.DomainTemplateItem=f;var p=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r.baseRoute="/v3/",r}return o(e,t),e.prototype.parseCreationResponse=function(t){return new f(t.body.template)},e.prototype.parseCreationVersionResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body&&t.body.template&&(e.template=new f(t.body.template)),e},e.prototype.parseMutationResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body&&t.body.template&&(e.templateName=t.body.template.name),e},e.prototype.parseNotificationResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,e},e.prototype.parseMutateTemplateVersionResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body.template&&(e.templateName=t.body.template.name,e.templateVersion={tag:t.body.template.version.tag}),e},e.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){return new f(t)})),e.pages=this.parsePageLinks(t,"?","p"),e.status=t.status,e},e.prototype.parseListTemplateVersions=function(t){var e={};return e.template=new f(t.body.template),e.pages=this.parsePageLinks(t,"?","p"),e},e.prototype.list=function(t,e){return s(this,void 0,void 0,(function(){return a(this,(function(r){return[2,this.requestListWithPages((0,c.default)(this.baseRoute,t,"/templates"),e)]}))}))},e.prototype.get=function(t,e,r){return this.request.get((0,c.default)(this.baseRoute,t,"/templates/",e),r).then((function(t){return new f(t.body.template)}))},e.prototype.create=function(t,e){var r=this;return this.request.postWithFD((0,c.default)(this.baseRoute,t,"/templates"),e).then((function(t){return r.parseCreationResponse(t)}))},e.prototype.update=function(t,e,r){var n=this;return this.request.putWithFD((0,c.default)(this.baseRoute,t,"/templates/",e),r).then((function(t){return n.parseMutationResponse(t)}))},e.prototype.destroy=function(t,e){var r=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates/",e)).then((function(t){return r.parseMutationResponse(t)}))},e.prototype.destroyAll=function(t){var e=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates")).then((function(t){return e.parseNotificationResponse(t)}))},e.prototype.createVersion=function(t,e,r){var n=this;return this.request.postWithFD((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions"),r).then((function(t){return n.parseCreationVersionResponse(t)}))},e.prototype.getVersion=function(t,e,r){return this.request.get((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",r)).then((function(t){return new f(t.body.template)}))},e.prototype.updateVersion=function(t,e,r,n){var o=this;return this.request.putWithFD((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",r),n).then((function(t){return o.parseMutateTemplateVersionResponse(t)}))},e.prototype.destroyVersion=function(t,e,r){var n=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",r)).then((function(t){return n.parseMutateTemplateVersionResponse(t)}))},e.prototype.listVersions=function(t,e,r){var n=this;return this.request.get((0,c.default)(this.baseRoute,t,"/templates",e,"/versions"),r).then((function(t){return n.parseListTemplateVersions(t)}))},e}(l.default);e.default=p},5075:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var u=a(r(5469)),c=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r}return o(e,t),e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"/"),e.status=t.status,e},e.prototype.get=function(t,e){return i(this,void 0,void 0,(function(){return s(this,(function(r){return[2,this.requestListWithPages((0,u.default)("/v3",t,"events"),e)]}))}))},e}(a(r(2893)).default);e.default=c},9204:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t){this.request=t}return t.prototype.list=function(){var t=this;return this.request.get("/v1/ip_pools").then((function(e){return t.parseIpPoolsResponse(e)}))},t.prototype.create=function(t){return n(this,void 0,void 0,(function(){var e;return o(this,(function(n){switch(n.label){case 0:return[4,this.request.postWithFD("/v1/ip_pools",t)];case 1:return e=n.sent(),[2,r({status:e.status},e.body)]}}))}))},t.prototype.update=function(t,e){return n(this,void 0,void 0,(function(){var n;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.patchWithFD("/v1/ip_pools/".concat(t),e)];case 1:return n=o.sent(),[2,r({status:n.status},n.body)]}}))}))},t.prototype.delete=function(t,e){return n(this,void 0,void 0,(function(){var n;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.delete("/v1/ip_pools/".concat(t),e)];case 1:return n=o.sent(),[2,r({status:n.status},n.body)]}}))}))},t.prototype.parseIpPoolsResponse=function(t){return r({status:t.status},t.body)},t}();e.default=i},5398:function(t,e){"use strict";var r=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},n=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t){this.request=t}return t.prototype.list=function(t){return r(this,void 0,void 0,(function(){var e;return n(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v3/ips",t)];case 1:return e=r.sent(),[2,this.parseIpsResponse(e)]}}))}))},t.prototype.get=function(t){return r(this,void 0,void 0,(function(){var e;return n(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v3/ips/".concat(t))];case 1:return e=r.sent(),[2,this.parseIpsResponse(e)]}}))}))},t.prototype.parseIpsResponse=function(t){return t.body},t}();e.default=o},4353:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){this.path=e,this.request=t}return t.prototype.list=function(){return n(this,void 0,void 0,(function(){var t;return o(this,(function(e){switch(e.label){case 0:return[4,this.request.get(this.path)];case 1:return[2,{items:(t=e.sent()).body.items,status:t.status}]}}))}))},t.prototype.get=function(t){return n(this,void 0,void 0,(function(){var e;return o(this,(function(n){switch(n.label){case 0:return[4,this.request.get("".concat(this.path,"/").concat(t))];case 1:return e=n.sent(),[2,r(r({},e.body),{status:e.status})]}}))}))},t}();e.default=i},9815:function(t,e){"use strict";var r=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},n=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){this.request=t,this.path=e}return t.prototype.list=function(){return r(this,void 0,void 0,(function(){var t;return n(this,(function(e){switch(e.label){case 0:return[4,this.request.get(this.path)];case 1:return[2,{status:(t=e.sent()).status,supported_filters:t.body.supported_filters}]}}))}))},t}();e.default=o},2133:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e,r,n,o,i){void 0===i&&(i=console);var s=t.call(this,e)||this;return s.request=e,s.attributes=r,s.filters=n,s.sharing=o,s.logger=i,s}return o(e,t),e.prototype.convertDateToUTC=function(t,e){return this.logger.warn('Date: "'.concat(e,'" was auto-converted to UTC time zone.\nValue "').concat(e.toISOString(),'" will be used for request.\nConsider using string type for property "').concat(t,'" to avoid auto-converting')),e.toISOString()},e.prototype.prepareQueryData=function(t){var e=this,r=t,n=Object.keys(r).reduce((function(n,o){var i=o;if(r[i]&&"object"==typeof r[i]){var s=t[i];n[i]=e.convertDateToUTC(i,s)}return n}),{});return i(i({},t),n)},e.prototype.prepareInboxPlacementsResult=function(t){var e={},r={created_at:new Date(t.created_at),updated_at:new Date(t.updated_at),sharing_expires_at:new Date(t.sharing_expires_at)};t.Box&&delete(e=i(i({},t.Box),{created_at:new Date(t.Box.created_at),updated_at:new Date(t.Box.updated_at),last_result_at:new Date(t.Box.last_result_at)})).ID;var n=i(i(i(i({},t),{Box:e}),r),{id:t.Id});return delete n.ID,n},e.prototype.parseList=function(t){var e=this,r={};return r.items=t.body.items.map((function(t){return e.prepareInboxPlacementsResult(t)})),r.pages=this.parsePageLinks(t,"?","address"),r.status=t.status,r},e.prototype.list=function(t){return s(this,void 0,void 0,(function(){var e,r;return a(this,(function(n){switch(n.label){case 0:return e=this.prepareQueryData(t),[4,this.request.get("/v4/inbox/results",e)];case 1:return r=n.sent(),[2,this.parseList(r)]}}))}))},e.prototype.get=function(t){return s(this,void 0,void 0,(function(){var e,r;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v4/inbox/results/".concat(t))];case 1:return e=n.sent(),r=this.prepareInboxPlacementsResult(e.body.result),[2,{status:e.status,inboxPlacementResult:r}]}}))}))},e.prototype.destroy=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.delete("/v4/inbox/results/".concat(t))];case 1:return e=r.sent(),[2,i({status:e.status},e.body)]}}))}))},e.prototype.getResultByShareId=function(t){return s(this,void 0,void 0,(function(){var e,r;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v4/inbox/sharing/public/".concat(t))];case 1:return e=n.sent(),r=this.prepareInboxPlacementsResult(e.body.result),[2,{status:e.status,inboxPlacementResult:r}]}}))}))},e}(u(r(2893)).default);e.default=c},4895:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t){this.request=t}return t.prototype.prepareInboxPlacementsResultSharing=function(t){var e={expires_at:new Date(t.expires_at)};return r(r({},t),e)},t.prototype.get=function(t){return n(this,void 0,void 0,(function(){var e,n;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.get("/v4/inbox/sharing/".concat(t))];case 1:return e=o.sent(),n=this.prepareInboxPlacementsResultSharing(e.body.sharing),[2,r({status:e.status},n)]}}))}))},t.prototype.update=function(t,e){return n(this,void 0,void 0,(function(){var n,i;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.put("/v4/inbox/sharing/".concat(t),{},{query:"enabled=".concat(e.enabled)})];case 1:return n=o.sent(),i=this.prepareInboxPlacementsResultSharing(n.body.sharing),[2,r(r({},i),{status:n.status})]}}))}))},t}();e.default=i},579:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e,r,n,o){void 0===o&&(o=console);var i=t.call(this,e)||this;return i.request=e,i.attributes=r,i.filters=n,i.logger=o,i}return o(e,t),e.prototype.convertDateToUTC=function(t,e){return this.logger.warn('Date: "'.concat(e,'" was auto-converted to UTC time zone.\nValue "').concat(e.toISOString(),'" will be used for request.\nConsider using string type for property "').concat(t,'" to avoid auto-converting')),e.toISOString()},e.prototype.prepareQueryData=function(t){var e=this,r=t,n=Object.keys(r).reduce((function(n,o){var i=o;if(r[i]&&"object"==typeof r[i]){var s=t[i];n[i]=e.convertDateToUTC(i,s)}return n}),{});return i(i({},t),n)},e.prototype.prepareResult=function(t){var e=this.prepareSeedList(t.body);return i(i({},e),{status:t.status})},e.prototype.prepareSeedList=function(t){var e,r={created_at:new Date(t.created_at),updated_at:new Date(t.updated_at),last_result_at:new Date(t.last_result_at)};e=t.Seeds?t.Seeds.map((function(t){var e={created_at:new Date(t.created_at),updated_at:new Date(t.updated_at),max_email_count_hit_at:new Date(t.max_email_count_hit_at),last_sent_to_at:new Date(t.last_sent_to_at),last_delivered_at:new Date(t.last_delivered_at)};return i(i({},t),e)})):null;var n=i(i(i({},t),{Seeds:e}),r);return delete n.Id,n},e.prototype.parseList=function(t){var e,r=this,n={items:[]};return n.items=null===(e=t.body.items)||void 0===e?void 0:e.map((function(t){return r.prepareSeedList(t)})),n.pages=this.parsePageLinks(t,"?","address"),n.status=t.status,n},e.prototype.list=function(t){return s(this,void 0,void 0,(function(){var e,r;return a(this,(function(n){switch(n.label){case 0:return e=this.prepareQueryData(t),[4,this.request.get("/v4/inbox/seedlists",e)];case 1:return r=n.sent(),[2,i(i({},this.parseList(r)),{status:200})]}}))}))},e.prototype.get=function(t){return s(this,void 0,void 0,(function(){var e,r;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v4/inbox/seedlists/".concat(t))];case 1:return e=n.sent(),r=this.prepareSeedList(e.body.seedlist),[2,i(i({},r),{status:e.status})]}}))}))},e.prototype.create=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.postWithFD("/v4/inbox/seedlists",t)];case 1:return e=r.sent(),[2,this.prepareResult(e)]}}))}))},e.prototype.update=function(t,e){return s(this,void 0,void 0,(function(){var r;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.put("/v4/inbox/seedlists/".concat(t),e)];case 1:return r=n.sent(),[2,this.prepareResult(r)]}}))}))},e.prototype.destroy=function(t){return s(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.request.delete("/v4/inbox/seedlists/".concat(t))]}))}))},e}(u(r(2893)).default);e.default=c},7899:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e,r,n){this.request=t,this.seedsLists=e,this.seedsLists=e,this.results=r,this.providers=n}return t.prototype.runTest=function(t){return n(this,void 0,void 0,(function(){var e;return o(this,(function(n){switch(n.label){case 0:return[4,this.request.post("/v4/inbox/tests",t)];case 1:return e=n.sent(),[2,r(r({},e.body),{status:e.status})]}}))}))},t}();e.default=i},4686:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t){this.path="/v4/inbox/providers",this.request=t}return t.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){var e={created_at:new Date(t.created_at),updated_at:new Date(t.updated_at)};return r(r({},t),e)})),e.status=t.status,e},t.prototype.list=function(){return n(this,void 0,void 0,(function(){var t;return o(this,(function(e){switch(e.label){case 0:return[4,this.request.get(this.path)];case 1:return t=e.sent(),[2,this.parseList(t)]}}))}))},t}();e.default=i},7688:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(6997)),s=o(r(548)),a=o(r(5075)),u=o(r(7728)),c=o(r(1930)),l=o(r(7144)),f=o(r(5486)),p=o(r(444)),d=o(r(9325)),h=o(r(5398)),y=o(r(9204)),b=o(r(293)),v=o(r(5713)),_=o(r(7721)),g=o(r(6116)),m=o(r(8992)),w=o(r(7534)),O=o(r(3126)),j=o(r(579)),P=o(r(7899)),x=o(r(2133)),S=o(r(4353)),D=o(r(9815)),M=o(r(4895)),R=o(r(4686)),T=o(r(6964)),E=function(){function t(t,e){var r=n({},t);if(r.url||(r.url="https://api.mailgun.net"),!r.username)throw new Error('Parameter "username" is required');if(!r.key)throw new Error('Parameter "key" is required');this.request=new i.default(r,e);var o=new v.default(this.request),E=new _.default(this.request),k=new m.default(this.request),q=new w.default(this.request),A=new g.default(this.request),B=new M.default(this.request),C=new S.default(this.request,"/v4/inbox/seedlists/a"),F=new S.default(this.request,"/v4/inbox/results/a"),L=new D.default(this.request,"/v4/inbox/seedlists/_filters"),U=new D.default(this.request,"/v4/inbox/results/_filters"),N=new j.default(this.request,C,L),I=new x.default(this.request,F,U,B),W=new R.default(this.request);this.domains=new s.default(this.request,E,k,q),this.webhooks=new l.default(this.request),this.events=new a.default(this.request),this.stats=new u.default(this.request),this.metrics=new T.default(this.request),this.suppressions=new c.default(this.request),this.messages=new f.default(this.request),this.routes=new p.default(this.request),this.ips=new h.default(this.request),this.ip_pools=new y.default(this.request),this.lists=new b.default(this.request,o),this.validate=new d.default(this.request,A),this.subaccounts=new O.default(this.request),this.inboxPlacements=new P.default(this.request,N,I,W)}return t.prototype.setSubaccount=function(t){var e;null===(e=this.request)||void 0===e||e.setSubaccountHeader(t)},t.prototype.resetSubaccount=function(){var t;null===(t=this.request)||void 0===t||t.resetSubaccountHeader()},t}();e.default=E},5713:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r.baseRoute="/v3/lists",r}return o(e,t),e.prototype.checkAndUpdateData=function(t){var e=i({},t);return"object"==typeof t.vars&&(e.vars=JSON.stringify(e.vars)),"boolean"==typeof t.subscribed&&(e.subscribed=t.subscribed?"yes":"no"),e},e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"?","address"),e},e.prototype.listMembers=function(t,e){return s(this,void 0,void 0,(function(){return a(this,(function(r){return[2,this.requestListWithPages("".concat(this.baseRoute,"/").concat(t,"/members/pages"),e)]}))}))},e.prototype.getMember=function(t,e){return this.request.get("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e)).then((function(t){return t.body.member}))},e.prototype.createMember=function(t,e){var r=this.checkAndUpdateData(e);return this.request.postWithFD("".concat(this.baseRoute,"/").concat(t,"/members"),r).then((function(t){return t.body.member}))},e.prototype.createMembers=function(t,e){var r={members:Array.isArray(e.members)?JSON.stringify(e.members):e.members,upsert:e.upsert};return this.request.postWithFD("".concat(this.baseRoute,"/").concat(t,"/members.json"),r).then((function(t){return t.body}))},e.prototype.updateMember=function(t,e,r){var n=this.checkAndUpdateData(r);return this.request.putWithFD("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e),n).then((function(t){return t.body.member}))},e.prototype.destroyMember=function(t,e){return this.request.delete("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e)).then((function(t){return t.body}))},e}(u(r(2893)).default);e.default=c},293:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e,r){var n=t.call(this,e)||this;return n.request=e,n.baseRoute="/v3/lists",n.members=r,n}return o(e,t),e.prototype.parseValidationResult=function(t,e){return{status:t,validationResult:i(i({},e),{created_at:new Date(1e3*e.created_at)})}},e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"?","address"),e.status=t.status,e},e.prototype.list=function(t){return s(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.requestListWithPages("".concat(this.baseRoute,"/pages"),t)]}))}))},e.prototype.get=function(t){return this.request.get("".concat(this.baseRoute,"/").concat(t)).then((function(t){return t.body.list}))},e.prototype.create=function(t){return this.request.postWithFD(this.baseRoute,t).then((function(t){return t.body.list}))},e.prototype.update=function(t,e){return this.request.putWithFD("".concat(this.baseRoute,"/").concat(t),e).then((function(t){return t.body.list}))},e.prototype.destroy=function(t){return this.request.delete("".concat(this.baseRoute,"/").concat(t)).then((function(t){return t.body}))},e.prototype.validate=function(t){return this.request.post("".concat(this.baseRoute,"/").concat(t,"/validate"),{}).then((function(t){return i({status:t.status},t.body)}))},e.prototype.validationResult=function(t){var e=this;return this.request.get("".concat(this.baseRoute,"/").concat(t,"/validate")).then((function(t){return e.parseValidationResult(t.status,t.body)}))},e.prototype.cancelValidation=function(t){return this.request.delete("".concat(this.baseRoute,"/").concat(t,"/validate")).then((function(t){return{status:t.status,message:t.body.message}}))},e}(u(r(2893)).default);e.default=c},5486:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(8426)),s=function(){function t(t){this.request=t}return t.prototype.prepareBooleanValues=function(t){var e=new Set(["o:testmode","t:text","o:dkim","o:tracking","o:tracking-clicks","o:tracking-opens","o:require-tls","o:skip-verification"]);if(!t||0===Object.keys(t).length)throw i.default.getUserDataError("Message data object can not be empty","Message data object can not be empty");return Object.keys(t).reduce((function(r,n){return e.has(n)&&"boolean"==typeof t[n]?r[n]=t[n]?"yes":"no":r[n]=t[n],r}),{})},t.prototype._parseResponse=function(t){return n({status:t.status},t.body)},t.prototype.create=function(t,e){if(e.message)return this.request.postWithFD("/v3/".concat(t,"/messages.mime"),e).then(this._parseResponse);var r=this.prepareBooleanValues(e);return this.request.postWithFD("/v3/".concat(t,"/messages"),r).then(this._parseResponse)},t}();e.default=s},6964:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){void 0===e&&(e=console),this.request=t,this.logger=e}return t.prototype.convertDateToUTC=function(t,e){return this.logger.warn('Date:"'.concat(e,'" was auto-converted to UTC time zone.\nValue "').concat(e.toUTCString(),'" will be used for request.\nConsider using string type for property "').concat(t,'" to avoid auto-converting')),e.toUTCString()},t.prototype.prepareQuery=function(t){var e,n;if(t){var o=null==t?void 0:t.start,i=null==t?void 0:t.end;e=o instanceof Date?this.convertDateToUTC("start",o):null!=o?o:"",n=i&&i instanceof Date?this.convertDateToUTC("end",i):null!=i?i:""}return r(r({},t),{start:e,end:n})},t.prototype.handleResponse=function(t){var e=t.body,n=Date.parse(e.start)?new Date(e.start):null,o=Date.parse(e.end)?new Date(e.end):null;return r(r({},e),{status:t.status,start:n,end:o})},t.prototype.getAccount=function(t){return n(this,void 0,void 0,(function(){var e,r;return o(this,(function(n){switch(n.label){case 0:return e=this.prepareQuery(t),[4,this.request.post("/v1/analytics/metrics",e)];case 1:return r=n.sent(),[2,this.handleResponse(r)]}}))}))},t.prototype.getAccountUsage=function(t){return n(this,void 0,void 0,(function(){var e,r;return o(this,(function(n){switch(n.label){case 0:return e=this.prepareQuery(t),[4,this.request.post("/v1/analytics/usage/metrics",e)];case 1:return r=n.sent(),[2,this.handleResponse(r)]}}))}))},t}();e.default=i},444:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(t){return this.request.get("/v3/routes",t).then((function(t){return t.body.items}))},t.prototype.get=function(t){return this.request.get("/v3/routes/".concat(t)).then((function(t){return t.body.route}))},t.prototype.create=function(t){return this.request.postWithFD("/v3/routes",t).then((function(t){return t.body.route}))},t.prototype.update=function(t,e){return this.request.putWithFD("/v3/routes/".concat(t),e).then((function(t){return t.body}))},t.prototype.destroy=function(t){return this.request.delete("/v3/routes/".concat(t)).then((function(t){return t.body}))},t}();e.default=r},7728:function(t,e,r){"use strict";var n=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o<i;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return t.concat(n||Array.prototype.slice.call(e))},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(5469)),s=o(r(4208)),a=function(){function t(t,e){void 0===e&&(e=console),this.request=t,this.logger=e}return t.prototype.convertDateToUTC=function(t,e){return this.logger.warn('Date:"'.concat(e,'" was auto-converted to UTC time zone.\nValue "').concat(e.toUTCString(),'" will be used for request.\nConsider using string type for property "').concat(t,'" to avoid auto-converting')),[t,e.toUTCString()]},t.prototype.prepareSearchParams=function(t){var e=this,r=[];return"object"==typeof t&&Object.keys(t).length&&(r=Object.entries(t).reduce((function(t,r){var o=r[0],i=r[1];if(Array.isArray(i)&&i.length){var s=i.map((function(t){return[o,t]}));return n(n([],t,!0),s,!0)}return i instanceof Date?(t.push(e.convertDateToUTC(o,i)),t):("string"==typeof i&&t.push([o,i]),t)}),[])),r},t.prototype.parseStats=function(t){return new s.default(t.body)},t.prototype.getDomain=function(t,e){var r=this.prepareSearchParams(e);return this.request.get((0,i.default)("/v3",t,"stats/total"),r).then(this.parseStats)},t.prototype.getAccount=function(t){var e=this.prepareSearchParams(t);return this.request.get("/v3/stats/total",e).then(this.parseStats)},t}();e.default=a},4208:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0});var n=function(t){this.start=new Date(t.start),this.end=new Date(t.end),this.resolution=t.resolution,this.stats=t.stats.map((function(t){var e=r({},t);return e.time=new Date(t.time),e}))};e.default=n},3126:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(t){return this.request.get("/v5/accounts/subaccounts",t).then((function(t){return t.body}))},t.prototype.get=function(t){return this.request.get("/v5/accounts/subaccounts/".concat(t)).then((function(t){return t.body}))},t.prototype.create=function(t){return this.request.postWithFD("/v5/accounts/subaccounts",{name:t}).then((function(t){return t.body}))},t.prototype.enable=function(t){return this.request.post("/v5/accounts/subaccounts/".concat(t,"/enable")).then((function(t){return t.body}))},t.prototype.disable=function(t){return this.request.post("/v5/accounts/subaccounts/".concat(t,"/disable")).then((function(t){return t.body}))},t.SUBACCOUNT_HEADER="X-Mailgun-On-Behalf-Of",t}();e.default=r},5153:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(8850),a=function(t){function e(e){var r=t.call(this,s.SuppressionModels.BOUNCES)||this;return r.address=e.address,r.code=+e.code,r.error=e.error,r.created_at=new Date(e.created_at),r}return o(e,t),e}(i(r(8198)).default);e.default=a},4336:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(8850),a=function(t){function e(e){var r=t.call(this,s.SuppressionModels.COMPLAINTS)||this;return r.address=e.address,r.created_at=new Date(e.created_at),r}return o(e,t),e}(i(r(8198)).default);e.default=a},8198:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t){this.type=t};e.default=r},1930:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o<i;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return t.concat(n||Array.prototype.slice.call(e))},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=u(r(5469)),l=u(r(8426)),f=u(r(2893)),p=u(r(5153)),d=u(r(4336)),h=u(r(2460)),y=u(r(8680)),b={headers:{"Content-Type":"application/json"}},v=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r.models={bounces:p.default,complaints:d.default,unsubscribes:h.default,whitelists:y.default},r}return o(e,t),e.prototype.parseList=function(t,e){var r,n={};return n.items=(null===(r=t.body.items)||void 0===r?void 0:r.map((function(t){return new e(t)})))||[],n.pages=this.parsePageLinks(t,"?","address"),n.status=t.status,n},e.prototype._parseItem=function(t,e){return new e(t)},e.prototype.createWhiteList=function(t,e,r){if(r)throw l.default.getUserDataError("Data property should be an object","Whitelist's creation process does not support multiple creations. Data property should be an object");return this.request.postWithFD((0,c.default)("v3",t,"whitelists"),e).then(this.prepareResponse)},e.prototype.createUnsubscribe=function(t,e){if(Array.isArray(e)){if(e.some((function(t){return t.tag})))throw l.default.getUserDataError("Tag property should not be used for creating multiple unsubscribes.","Tag property can be used only if one unsubscribe provided as second argument of create method. Please use tags instead.");return this.request.post((0,c.default)("v3",t,"unsubscribes"),JSON.stringify(e),b).then(this.prepareResponse)}if(null==e?void 0:e.tags)throw l.default.getUserDataError("Tags property should not be used for creating one unsubscribe.","Tags property can be used if you provides an array of unsubscribes as second argument of create method. Please use tag instead");if(Array.isArray(e.tag))throw l.default.getUserDataError("Tag property can not be an array","Please use array of unsubscribes as second argument of create method to be able to provide few tags");return this.request.postWithFD((0,c.default)("v3",t,"unsubscribes"),e).then(this.prepareResponse)},e.prototype.getModel=function(t){if(t in this.models)return this.models[t];throw l.default.getUserDataError("Unknown type value","Type may be only one of [bounces, complaints, unsubscribes, whitelists]")},e.prototype.prepareResponse=function(t){return{message:t.body.message,type:t.body.type||"",value:t.body.value||"",status:t.status}},e.prototype.list=function(t,e,r){return i(this,void 0,void 0,(function(){var n;return s(this,(function(o){return n=this.getModel(e),[2,this.requestListWithPages((0,c.default)("v3",t,e),r,n)]}))}))},e.prototype.get=function(t,e,r){var n=this,o=this.getModel(e);return this.request.get((0,c.default)("v3",t,e,encodeURIComponent(r))).then((function(t){return n._parseItem(t.body,o)}))},e.prototype.create=function(t,e,r){var n;this.getModel(e);var o=Array.isArray(r);return"whitelists"===e?this.createWhiteList(t,r,o):"unsubscribes"===e?this.createUnsubscribe(t,r):(n=o?a([],r,!0):[r],this.request.post((0,c.default)("v3",t,e),JSON.stringify(n),b).then(this.prepareResponse))},e.prototype.destroy=function(t,e,r){return this.getModel(e),this.request.delete((0,c.default)("v3",t,e,encodeURIComponent(r))).then((function(t){return{message:t.body.message,value:t.body.value||"",address:t.body.address||"",status:t.status}}))},e}(f.default);e.default=v,t.exports=v},2460:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(8850),a=function(t){function e(e){var r=t.call(this,s.SuppressionModels.UNSUBSCRIBES)||this;return r.address=e.address,r.tags=e.tags,r.created_at=new Date(e.created_at),r}return o(e,t),e}(i(r(8198)).default);e.default=a},8680:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(8850),a=function(t){function e(e){var r=t.call(this,s.SuppressionModels.WHITELISTS)||this;return r.value=e.value,r.reason=e.reason,r.createdAt=new Date(e.createdAt),r}return o(e,t),e}(i(r(8198)).default);e.default=a},6116:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.MultipleValidationJob=void 0;var c=u(r(2893)),l=u(r(3008)),f=u(r(8426)),p=function(t,e){var r,n;this.createdAt=new Date(t.created_at),this.id=t.id,this.quantity=t.quantity,this.recordsProcessed=t.records_processed,this.status=t.status,this.responseStatusCode=e,t.download_url&&(this.downloadUrl={csv:null===(r=t.download_url)||void 0===r?void 0:r.csv,json:null===(n=t.download_url)||void 0===n?void 0:n.json}),t.summary&&(this.summary={result:{catchAll:t.summary.result.catch_all,deliverable:t.summary.result.deliverable,doNotSend:t.summary.result.do_not_send,undeliverable:t.summary.result.undeliverable,unknown:t.summary.result.unknown},risk:{high:t.summary.risk.high,low:t.summary.risk.low,medium:t.summary.risk.medium,unknown:t.summary.risk.unknown}})};e.MultipleValidationJob=p;var d=function(t){function e(e){var r=t.call(this)||this;return r.request=e,r.attachmentsHandler=new l.default,r}return o(e,t),e.prototype.handleResponse=function(t){return i({status:t.status},null==t?void 0:t.body)},e.prototype.parseList=function(t){var e={};return e.jobs=t.body.jobs.map((function(e){return new p(e,t.status)})),e.pages=this.parsePageLinks(t,"?","pivot"),e.total=t.body.total,e.status=t.status,e},e.prototype.list=function(t){return s(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.requestListWithPages("/v4/address/validate/bulk",t)]}))}))},e.prototype.get=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v4/address/validate/bulk/".concat(t))];case 1:return e=r.sent(),[2,new p(e.body,e.status)]}}))}))},e.prototype.convertToExpectedShape=function(t){return this.attachmentsHandler.isBuffer(t.file)?{multipleValidationFile:t.file}:"string"==typeof t.file?{multipleValidationFile:{data:t.file}}:(this.attachmentsHandler.isStream(t.file),{multipleValidationFile:t.file})},e.prototype.create=function(t,e){return s(this,void 0,void 0,(function(){var r,n;return a(this,(function(o){switch(o.label){case 0:if(!e||!e.file)throw f.default.getUserDataError('"file" property expected.','Make sure second argument has "file" property.');return r=this.convertToExpectedShape(e),[4,this.request.postWithFD("/v4/address/validate/bulk/".concat(t),r)];case 1:return n=o.sent(),[2,this.handleResponse(n)]}}))}))},e.prototype.destroy=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.delete("/v4/address/validate/bulk/".concat(t))];case 1:return e=r.sent(),[2,this.handleResponse(e)]}}))}))},e}(c.default);e.default=d},9325:function(t,e){"use strict";var r=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},n=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){this.request=t,this.multipleValidation=e}return t.prototype.get=function(t){return r(this,void 0,void 0,(function(){var e;return n(this,(function(r){switch(r.label){case 0:return e={address:t},[4,this.request.get("/v4/address/validate",e)];case 1:return[2,r.sent().body]}}))}))},t}();e.default=o},7144:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.Webhook=void 0;var o=n(r(5469)),i=function(t,e,r){this.id=t,this.url=e,this.urls=r};e.Webhook=i;var s=function(){function t(t){this.request=t}return t.prototype._parseWebhookList=function(t){return t.body.webhooks},t.prototype._parseWebhookWithID=function(t){return function(e){var r,n=null===(r=null==e?void 0:e.body)||void 0===r?void 0:r.webhook,o=null==n?void 0:n.url,s=null==n?void 0:n.urls;return o||(o=s&&s.length?s[0]:void 0),s&&0!==s.length||!o||(s=[o]),new i(t,o,s)}},t.prototype._parseWebhookTest=function(t){return{code:t.body.code,message:t.body.message}},t.prototype.list=function(t,e){return this.request.get((0,o.default)("/v3/domains",t,"webhooks"),e).then(this._parseWebhookList)},t.prototype.get=function(t,e){return this.request.get((0,o.default)("/v3/domains",t,"webhooks",e)).then(this._parseWebhookWithID(e))},t.prototype.create=function(t,e,r,n){return void 0===n&&(n=!1),n?this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e,"test"),{url:r}).then(this._parseWebhookTest):this.request.postWithFD((0,o.default)("/v3/domains",t,"webhooks"),{id:e,url:r}).then(this._parseWebhookWithID(e))},t.prototype.update=function(t,e,r){return this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e),{url:r}).then(this._parseWebhookWithID(e))},t.prototype.destroy=function(t,e){return this.request.delete((0,o.default)("/v3/domains",t,"webhooks",e)).then(this._parseWebhookWithID(e))},t}();e.default=s},3008:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(8426)),s=function(){function t(t,e){this._stream=t,this.size=e}return t.prototype.stream=function(){return this._stream},Object.defineProperty(t.prototype,Symbol.toStringTag,{get:function(){return"Blob"},enumerable:!1,configurable:!0}),t}(),a=function(){function t(){}return t.prototype.getAttachmentOptions=function(t){var e=t.filename,r=t.contentType,o=t.knownLength;return n(n(n({},e?{filename:e}:{filename:"file"}),r&&{contentType:r}),o&&{knownLength:o})},t.prototype.getFileInfo=function(t){var e=t.name,r=t.type,n=t.size;return this.getAttachmentOptions({filename:e,contentType:r,knownLength:n})},t.prototype.getCustomFileInfo=function(t){var e=t.filename,r=t.contentType,n=t.knownLength;return this.getAttachmentOptions({filename:e,contentType:r,knownLength:n})},t.prototype.getBufferInfo=function(t){var e=t.byteLength;return this.getAttachmentOptions({filename:"file",contentType:"",knownLength:e})},t.prototype.isStream=function(t){return"object"==typeof t&&"function"==typeof t.pipe},t.prototype.isCustomFile=function(t){return"object"==typeof t&&!!t.data},t.prototype.isBrowserFile=function(t){return"object"==typeof t&&(!!t.name||"undefined"!=typeof Blob&&t instanceof Blob)},t.prototype.isBuffer=function(t){return"undefined"!=typeof Buffer&&Buffer.isBuffer(t)},t.prototype.getAttachmentInfo=function(t){var e=this.isBrowserFile(t),r=this.isCustomFile(t);if(!("string"==typeof t)){if(e)return this.getFileInfo(t);if("undefined"!=typeof Buffer&&Buffer.isBuffer(t))return this.getBufferInfo(t);if(r)return this.getCustomFileInfo(t)}return{filename:"file",contentType:void 0,knownLength:void 0}},t.prototype.convertToFDexpectedShape=function(t){var e,r=this.isStream(t),n=this.isBrowserFile(t),o=this.isCustomFile(t);if(r||"string"==typeof t||n||this.isBuffer(t))e=t;else{if(!o)throw i.default.getUserDataError("Unknown attachment type ".concat(typeof t),'The "attachment" property expects either Buffer, Blob, or String.\n Also, It is possible to provide an object that has the property "data" with a value that is equal to one of the types counted before.\n Additionally, you may use an array to send more than one attachment.');e=t.data}return e},t.prototype.getBlobFromStream=function(t,e){return new s(t,e)},t}();e.default=a},8426:function(t,e){"use strict";var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var o=function(t){function e(e){var r=e.status,n=e.statusText,o=e.message,i=e.body,s=void 0===i?{}:i,a=this,u="",c="";return"string"==typeof s?u=s:(u=(null==s?void 0:s.message)||"",c=(null==s?void 0:s.error)||""),(a=t.call(this)||this).stack="",a.status=r,a.message=o||c||n||"",a.details=u,a.type="MailgunAPIError",a}return n(e,t),e.getUserDataError=function(t,e){return new this({status:400,statusText:t,body:{message:e}})},e}(Error);e.default=o},7613:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(8426)),i=n(r(3008)),s=function(){function t(t){this.FormDataConstructor=t,this.fileKeys=["attachment","inline","multipleValidationFile"],this.attachmentsHandler=new i.default}return t.prototype.createFormData=function(t){var e=this;if(!t)throw new Error("Please provide data object");return Object.keys(t).filter((function(e){return t[e]})).reduce((function(r,n){if(e.fileKeys.includes(n)){var i=t[n];if(e.isMessageAttachment(i))return e.addFilesToFD(n,i,r),r;throw o.default.getUserDataError("Unknown value ".concat(t[n]," with type ").concat(typeof t[n],' for property "').concat(n,'"'),'The key "'.concat(n,'" should have type of Buffer, Stream, File, or String '))}if("message"===n){var s=t[n];if(!s||!e.isMIME(s))throw o.default.getUserDataError('Unknown data type for "'.concat(n,'" property'),"The mime data should have type of Buffer, String or Blob");return e.addMimeDataToFD(n,s,r),r}return e.addCommonPropertyToFD(n,t[n],r),r}),new this.FormDataConstructor)},t.prototype.addMimeDataToFD=function(t,e,r){if("string"!=typeof e){if(this.isFormDataPackage(r))r.append(t,e,{filename:"MimeMessage"});else if(void 0!==typeof Blob){var n=r;if(e instanceof Blob)return void n.append(t,e,"MimeMessage");if(this.attachmentsHandler.isBuffer(e)){var o=new Blob([e]);n.append(t,o,"MimeMessage")}}}else r.append(t,e)},t.prototype.isMIME=function(t){return"string"==typeof t||"undefined"!=typeof Blob&&t instanceof Blob||this.attachmentsHandler.isBuffer(t)||"undefined"!=typeof ReadableStream&&t instanceof ReadableStream},t.prototype.isFormDataPackage=function(t){return"object"==typeof t&&null!==t&&"function"==typeof t.getHeaders},t.prototype.isMessageAttachment=function(t){var e=this;return this.attachmentsHandler.isCustomFile(t)||"string"==typeof t||"undefined"!=typeof File&&t instanceof File||"undefined"!=typeof Blob&&t instanceof Blob||this.attachmentsHandler.isBuffer(t)||this.attachmentsHandler.isStream(t)||Array.isArray(t)&&t.every((function(r){return e.attachmentsHandler.isCustomFile(r)||"undefined"!=typeof File&&r instanceof File||"undefined"!=typeof Blob&&t instanceof Blob||e.attachmentsHandler.isBuffer(r)||e.attachmentsHandler.isStream(r)}))},t.prototype.addFilesToFD=function(t,e,r){var n=this,o=function(t,e,o){var i="multipleValidationFile"===t?"file":t,s=n.attachmentsHandler.convertToFDexpectedShape(e),a=n.attachmentsHandler.getAttachmentInfo(e);if(n.isFormDataPackage(o)){var u=o,c="string"==typeof s?Buffer.from(s):s;u.append(i,c,a)}else if(void 0!==typeof Blob){var l=r;if("string"==typeof s||n.attachmentsHandler.isBuffer(s)){var f=new Blob([s]);return void l.append(i,f,a.filename)}if(s instanceof Blob)return void l.append(i,s,a.filename);if(n.attachmentsHandler.isStream(s)){var p=n.attachmentsHandler.getBlobFromStream(s,a.knownLength);l.set(i,p,a.filename)}}};Array.isArray(e)?e.forEach((function(e){o(t,e,r)})):o(t,e,r)},t.prototype.addCommonPropertyToFD=function(t,e,r){var n=this,i=function(t,e){if(n.isFormDataPackage(r))return"object"==typeof e?(console.warn('The received value is an object. \n"JSON.Stringify" will be used to avoid TypeError \nTo remove this warning: \nConsider switching to built-in FormData or converting the value on your own.\n'),r.append(t,JSON.stringify(e))):r.append(t,e);if("string"==typeof e)return r.append(t,e);if(void 0!==typeof Blob&&e instanceof Blob)return r.append(t,e);throw o.default.getUserDataError("Unknown value type for Form Data. String or Blob expected","Browser compliant FormData allows only string or Blob values for properties that are not attachments.")};Array.isArray(e)?e.forEach((function(e){i(t,e)})):null!=e&&i(t,e)},t}();e.default=s},2893:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var a=s(r(5469)),u=s(r(8426)),c=function(){function t(t){t&&(this.request=t)}return t.prototype.parsePage=function(t,e,r,n){var o=new URL(e).searchParams,i=e&&"string"==typeof e&&e.split(r).pop()||"",s=null;return n&&(s=o.has(n)?o.get(n):void 0),{id:t,page:"?"===r?"?".concat(i):i,iteratorPosition:s,url:e}},t.prototype.parsePageLinks=function(t,e,r){var n=this;return Object.entries(t.body.paging).reduce((function(t,o){var i=o[0],s=o[1];return t[i]=n.parsePage(i,s,e,r),t}),{})},t.prototype.updateUrlAndQuery=function(t,e){var r=t,o=n({},e);return o.page&&(r=(0,a.default)(t,o.page),delete o.page),{url:r,updatedQuery:o}},t.prototype.requestListWithPages=function(t,e,r){return o(this,void 0,void 0,(function(){var n,o,s,a;return i(this,(function(i){switch(i.label){case 0:return n=this.updateUrlAndQuery(t,e),o=n.url,s=n.updatedQuery,this.request?[4,this.request.get(o,s)]:[3,2];case 1:return a=i.sent(),[2,this.parseList(a,r)];case 2:throw new u.default({status:500,statusText:"Request property is empty",body:{message:""}})}}))}))},t}();e.default=c},6997:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),i=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&o(e,t,r);return i(e,t),e},a=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},u=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},c=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var l=s(r(5914)),f=c(r(5469)),p=s(r(6425)),d=c(r(8426)),h=c(r(7613)),y=c(r(3126)),b=function(){function t(t,e){this.username=t.username,this.key=t.key,this.url=t.url,this.timeout=t.timeout,this.headers=this.makeHeadersFromObject(t.headers),this.formDataBuilder=new h.default(e),this.maxBodyLength=52428800,this.proxy=null==t?void 0:t.proxy}return t.prototype.request=function(t,e,r){var o,i,s;return a(this,void 0,void 0,(function(){var a,c,l,h,y,b,v,_;return u(this,(function(u){switch(u.label){case 0:null==(a=n({},r))||delete a.headers,c=this.joinAndTransformHeaders(r),l=n({},a),(null==a?void 0:a.query)&&Object.getOwnPropertyNames(null==a?void 0:a.query).length>0&&(l.params=new URLSearchParams(a.query),delete l.query),(null==a?void 0:a.body)&&(h=null==a?void 0:a.body,l.data=h,delete l.body),b=(0,f.default)(this.url,e),u.label=1;case 1:return u.trys.push([1,3,,4]),[4,p.default.request(n(n({method:t.toLocaleUpperCase(),timeout:this.timeout,url:b,headers:c},l),{maxBodyLength:this.maxBodyLength,proxy:this.proxy}))];case 2:return y=u.sent(),[3,4];case 3:throw v=u.sent(),_=v,new d.default({status:(null===(o=null==_?void 0:_.response)||void 0===o?void 0:o.status)||400,statusText:(null===(i=null==_?void 0:_.response)||void 0===i?void 0:i.statusText)||_.code,body:(null===(s=null==_?void 0:_.response)||void 0===s?void 0:s.data)||_.message});case 4:return[4,this.getResponseBody(y)];case 5:return[2,u.sent()]}}))}))},t.prototype.getResponseBody=function(t){return a(this,void 0,void 0,(function(){var e;return u(this,(function(r){if(e={body:{},status:null==t?void 0:t.status},"string"==typeof t.data){if("Mailgun Magnificent API"===t.data)throw new d.default({status:400,statusText:"Incorrect url",body:t.data});e.body={message:t.data}}else e.body=t.data;return[2,e]}))}))},t.prototype.joinAndTransformHeaders=function(t){var e=new p.AxiosHeaders,r=l.encode("".concat(this.username,":").concat(this.key));e.setAuthorization("Basic ".concat(r)),e.set(this.headers);var n=t&&t.headers,o=this.makeHeadersFromObject(n);return e.set(o),e},t.prototype.makeHeadersFromObject=function(t){void 0===t&&(t={});var e=new p.AxiosHeaders;return e=Object.entries(t).reduce((function(t,e){var r=e[0],n=e[1];return t.set(r,n),t}),e)},t.prototype.setSubaccountHeader=function(t){var e,r=this.makeHeadersFromObject(n(n({},this.headers),((e={})[y.default.SUBACCOUNT_HEADER]=t,e)));this.headers.set(r)},t.prototype.resetSubaccountHeader=function(){this.headers.delete(y.default.SUBACCOUNT_HEADER)},t.prototype.query=function(t,e,r,o){return this.request(t,e,n({query:r},o))},t.prototype.command=function(t,e,r,o,i){void 0===i&&(i=!0);var s={};i&&(s={"Content-Type":"application/x-www-form-urlencoded"});var a=n(n(n({},s),{body:r}),o);return this.request(t,e,a)},t.prototype.get=function(t,e,r){return this.query("get",t,e,r)},t.prototype.post=function(t,e,r){return this.command("post",t,e,r)},t.prototype.postWithFD=function(t,e){var r=this.formDataBuilder.createFormData(e);return this.command("post",t,r,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.putWithFD=function(t,e){var r=this.formDataBuilder.createFormData(e);return this.command("put",t,r,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.patchWithFD=function(t,e){var r=this.formDataBuilder.createFormData(e);return this.command("patch",t,r,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.put=function(t,e,r){return this.command("put",t,e,r)},t.prototype.delete=function(t,e){return this.command("delete",t,e)},t}();e.default=b},8850:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.YesNo=e.WebhooksIds=e.SuppressionModels=e.Resolution=void 0,function(t){t.HOUR="hour",t.DAY="day",t.MONTH="month"}(e.Resolution||(e.Resolution={})),function(t){t.BOUNCES="bounces",t.COMPLAINTS="complaints",t.UNSUBSCRIBES="unsubscribes",t.WHITELISTS="whitelists"}(e.SuppressionModels||(e.SuppressionModels={})),function(t){t.CLICKED="clicked",t.COMPLAINED="complained",t.DELIVERED="delivered",t.OPENED="opened",t.PERMANENT_FAIL="permanent_fail",t.TEMPORARY_FAIL="temporary_fail",t.UNSUBSCRIBED="unsubscribe"}(e.WebhooksIds||(e.WebhooksIds={})),function(t){t.YES="yes",t.NO="no"}(e.YesNo||(e.YesNo={}))},5286:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1292:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(5286),e)},9120:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3641:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4209:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7920:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3662:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(9120),e),o(r(3641),e),o(r(4209),e),o(r(7920),e)},7084:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2404:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7084),e)},7569:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5519:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7569),e)},6617:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4225:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(6617),e)},1309:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1619:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3460:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5494:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5272:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2567:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1451:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3460),e),o(r(1309),e),o(r(1619),e),o(r(2567),e),o(r(5494),e),o(r(5272),e)},6522:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4659:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(6522),e)},8255:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7510:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5475:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(8255),e),o(r(7510),e)},8225:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8497:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(8225),e)},4461:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9271:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(4461),e)},5036:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9900:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9624:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(5036),e),o(r(9900),e)},2593:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},137:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(2593),e)},1805:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5500:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4449:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1376:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3572:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},817:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1805),e),o(r(5500),e),o(r(1376),e),o(r(3572),e),o(r(4449),e)},3128:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1116:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},403:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3128),e),o(r(1116),e)},5609:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(5609),e)},7176:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1292),e),o(r(3662),e),o(r(4659),e),o(r(5475),e),o(r(9624),e),o(r(817),e),o(r(403),e),o(r(2404),e),o(r(3),e),o(r(8497),e),o(r(9271),e),o(r(4225),e),o(r(5519),e),o(r(137),e),o(r(1451),e)},556:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2897:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5481:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3474:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8518:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3635:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(2897),e),o(r(556),e),o(r(5481),e),o(r(3474),e),o(r(8518),e)},3625:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1054:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4128:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2010:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1358:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9191:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3625),e),o(r(1358),e),o(r(1054),e),o(r(4128),e),o(r(2010),e)},5554:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3803:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(5554),e)},9130:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},6530:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(9130),e)},3990:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},28:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3990),e)},1534:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9642:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1534),e)},1294:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1156:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8344:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1294),e),o(r(1156),e)},7644:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},194:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7644),e)},2776:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},6024:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(2776),e)},3730:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4197:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3730),e)},4610:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5112:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(4610),e)},3668:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1075:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4696:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8863:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7387:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2146:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3668),e),o(r(1075),e),o(r(4696),e),o(r(8863),e),o(r(7387),e)},1499:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9919:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8526:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1499),e),o(r(9919),e)},8656:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8740:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(8656),e)},2729:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3635),e),o(r(9191),e),o(r(3803),e),o(r(6530),e),o(r(28),e),o(r(9642),e),o(r(8344),e),o(r(194),e),o(r(6024),e),o(r(4197),e),o(r(5112),e),o(r(2146),e),o(r(8526),e),o(r(8740),e)},439:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return o(e,t),e},s=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.Interfaces=e.Enums=void 0;var u=a(r(7688));e.Enums=i(r(8850)),s(r(2729),e),e.Interfaces=i(r(7176));var c=function(){function t(t){this.formData=t}return Object.defineProperty(t,"default",{get:function(){return this},enumerable:!1,configurable:!0}),t.prototype.client=function(t){return new u.default(t,this.formData)},t}();e.default=c},5914:function(t,e,r){var n;t=r.nmd(t),function(){var o=e,i=(t&&t.exports,"object"==typeof r.g&&r.g);i.global!==i&&i.window;var s=function(t){this.message=t};(s.prototype=new Error).name="InvalidCharacterError";var a=function(t){throw new s(t)},u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c=/[\t\n\f\r ]/g,l={encode:function(t){t=String(t),/[^\0-\xFF]/.test(t)&&a("The string to be encoded contains characters outside of the Latin1 range.");for(var e,r,n,o,i=t.length%3,s="",c=-1,l=t.length-i;++c<l;)e=t.charCodeAt(c)<<16,r=t.charCodeAt(++c)<<8,n=t.charCodeAt(++c),s+=u.charAt((o=e+r+n)>>18&63)+u.charAt(o>>12&63)+u.charAt(o>>6&63)+u.charAt(63&o);return 2==i?(e=t.charCodeAt(c)<<8,r=t.charCodeAt(++c),s+=u.charAt((o=e+r)>>10)+u.charAt(o>>4&63)+u.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(c),s+=u.charAt(o>>2)+u.charAt(o<<4&63)+"=="),s},decode:function(t){var e=(t=String(t).replace(c,"")).length;e%4==0&&(e=(t=t.replace(/==?$/,"")).length),(e%4==1||/[^+a-zA-Z0-9/]/.test(t))&&a("Invalid character: the string to be decoded is not correctly encoded.");for(var r,n,o=0,i="",s=-1;++s<e;)n=u.indexOf(t.charAt(s)),r=o%4?64*r+n:n,o++%4&&(i+=String.fromCharCode(255&r>>(-2*o&6)));return i},version:"1.0.0"};void 0===(n=function(){return l}.call(e,r,e,t))||(t.exports=n)}()},5469:function(t,e,r){var n,o,i;i=function(){return function(){return function(t){var e=[];if(0===t.length)return"";if("string"!=typeof t[0])throw new TypeError("Url must be a string. Received "+t[0]);if(t[0].match(/^[^/:]+:\/*$/)&&t.length>1){var r=t.shift();t[0]=r+t[0]}t[0].match(/^file:\/\/\//)?t[0]=t[0].replace(/^([^/:]+):\/*/,"$1:///"):t[0]=t[0].replace(/^([^/:]+):\/*/,"$1://");for(var n=0;n<t.length;n++){var o=t[n];if("string"!=typeof o)throw new TypeError("Url must be a string. Received "+o);""!==o&&(n>0&&(o=o.replace(/^[\/]+/,"")),o=n<t.length-1?o.replace(/[\/]+$/,""):o.replace(/[\/]+$/,"/"),e.push(o))}var i=e.join("/"),s=(i=i.replace(/\/(\?|&|#[^!])/g,"$1")).split("?");return s.shift()+(s.length>0?"?":"")+s.join("&")}("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},t.exports?t.exports=i():void 0===(o="function"==typeof(n=i)?n.call(e,r,e,t):n)||(t.exports=o)},6425:(t,e,r)=>{"use strict";function n(t,e){return function(){return t.apply(e,arguments)}}const{toString:o}=Object.prototype,{getPrototypeOf:i}=Object,s=(a=Object.create(null),t=>{const e=o.call(t);return a[e]||(a[e]=e.slice(8,-1).toLowerCase())});var a;const u=t=>(t=t.toLowerCase(),e=>s(e)===t),c=t=>e=>typeof e===t,{isArray:l}=Array,f=c("undefined");const p=u("ArrayBuffer");const d=c("string"),h=c("function"),y=c("number"),b=t=>null!==t&&"object"==typeof t,v=t=>{if("object"!==s(t))return!1;const e=i(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e)||Symbol.toStringTag in t||Symbol.iterator in t)},_=u("Date"),g=u("File"),m=u("Blob"),w=u("FileList"),O=u("URLSearchParams"),[j,P,x,S]=["ReadableStream","Request","Response","Headers"].map(u);function D(t,e,{allOwnKeys:r=!1}={}){if(null==t)return;let n,o;if("object"!=typeof t&&(t=[t]),l(t))for(n=0,o=t.length;n<o;n++)e.call(null,t[n],n,t);else{const o=r?Object.getOwnPropertyNames(t):Object.keys(t),i=o.length;let s;for(n=0;n<i;n++)s=o[n],e.call(null,t[s],s,t)}}function M(t,e){e=e.toLowerCase();const r=Object.keys(t);let n,o=r.length;for(;o-- >0;)if(n=r[o],e===n.toLowerCase())return n;return null}const R="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:r.g,T=t=>!f(t)&&t!==R;const E=(k="undefined"!=typeof Uint8Array&&i(Uint8Array),t=>k&&t instanceof k);var k;const q=u("HTMLFormElement"),A=(({hasOwnProperty:t})=>(e,r)=>t.call(e,r))(Object.prototype),B=u("RegExp"),C=(t,e)=>{const r=Object.getOwnPropertyDescriptors(t),n={};D(r,((r,o)=>{let i;!1!==(i=e(r,o,t))&&(n[o]=i||r)})),Object.defineProperties(t,n)},F="abcdefghijklmnopqrstuvwxyz",L="0123456789",U={DIGIT:L,ALPHA:F,ALPHA_DIGIT:F+F.toUpperCase()+L};const N=u("AsyncFunction"),I=(W="function"==typeof setImmediate,H=h(R.postMessage),W?setImmediate:H?(V=`axios@${Math.random()}`,z=[],R.addEventListener("message",(({source:t,data:e})=>{t===R&&e===V&&z.length&&z.shift()()}),!1),t=>{z.push(t),R.postMessage(V,"*")}):t=>setTimeout(t));var W,H,V,z;const G="undefined"!=typeof queueMicrotask?queueMicrotask.bind(R):"undefined"!=typeof process&&process.nextTick||I;var J={isArray:l,isArrayBuffer:p,isBuffer:function(t){return null!==t&&!f(t)&&null!==t.constructor&&!f(t.constructor)&&h(t.constructor.isBuffer)&&t.constructor.isBuffer(t)},isFormData:t=>{let e;return t&&("function"==typeof FormData&&t instanceof FormData||h(t.append)&&("formdata"===(e=s(t))||"object"===e&&h(t.toString)&&"[object FormData]"===t.toString()))},isArrayBufferView:function(t){let e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&p(t.buffer),e},isString:d,isNumber:y,isBoolean:t=>!0===t||!1===t,isObject:b,isPlainObject:v,isReadableStream:j,isRequest:P,isResponse:x,isHeaders:S,isUndefined:f,isDate:_,isFile:g,isBlob:m,isRegExp:B,isFunction:h,isStream:t=>b(t)&&h(t.pipe),isURLSearchParams:O,isTypedArray:E,isFileList:w,forEach:D,merge:function t(){const{caseless:e}=T(this)&&this||{},r={},n=(n,o)=>{const i=e&&M(r,o)||o;v(r[i])&&v(n)?r[i]=t(r[i],n):v(n)?r[i]=t({},n):l(n)?r[i]=n.slice():r[i]=n};for(let t=0,e=arguments.length;t<e;t++)arguments[t]&&D(arguments[t],n);return r},extend:(t,e,r,{allOwnKeys:o}={})=>(D(e,((e,o)=>{r&&h(e)?t[o]=n(e,r):t[o]=e}),{allOwnKeys:o}),t),trim:t=>t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:t=>(65279===t.charCodeAt(0)&&(t=t.slice(1)),t),inherits:(t,e,r,n)=>{t.prototype=Object.create(e.prototype,n),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),r&&Object.assign(t.prototype,r)},toFlatObject:(t,e,r,n)=>{let o,s,a;const u={};if(e=e||{},null==t)return e;do{for(o=Object.getOwnPropertyNames(t),s=o.length;s-- >0;)a=o[s],n&&!n(a,t,e)||u[a]||(e[a]=t[a],u[a]=!0);t=!1!==r&&i(t)}while(t&&(!r||r(t,e))&&t!==Object.prototype);return e},kindOf:s,kindOfTest:u,endsWith:(t,e,r)=>{t=String(t),(void 0===r||r>t.length)&&(r=t.length),r-=e.length;const n=t.indexOf(e,r);return-1!==n&&n===r},toArray:t=>{if(!t)return null;if(l(t))return t;let e=t.length;if(!y(e))return null;const r=new Array(e);for(;e-- >0;)r[e]=t[e];return r},forEachEntry:(t,e)=>{const r=(t&&t[Symbol.iterator]).call(t);let n;for(;(n=r.next())&&!n.done;){const r=n.value;e.call(t,r[0],r[1])}},matchAll:(t,e)=>{let r;const n=[];for(;null!==(r=t.exec(e));)n.push(r);return n},isHTMLForm:q,hasOwnProperty:A,hasOwnProp:A,reduceDescriptors:C,freezeMethods:t=>{C(t,((e,r)=>{if(h(t)&&-1!==["arguments","caller","callee"].indexOf(r))return!1;const n=t[r];h(n)&&(e.enumerable=!1,"writable"in e?e.writable=!1:e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")}))}))},toObjectSet:(t,e)=>{const r={},n=t=>{t.forEach((t=>{r[t]=!0}))};return l(t)?n(t):n(String(t).split(e)),r},toCamelCase:t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(t,e,r){return e.toUpperCase()+r})),noop:()=>{},toFiniteNumber:(t,e)=>null!=t&&Number.isFinite(t=+t)?t:e,findKey:M,global:R,isContextDefined:T,ALPHABET:U,generateString:(t=16,e=U.ALPHA_DIGIT)=>{let r="";const{length:n}=e;for(;t--;)r+=e[Math.random()*n|0];return r},isSpecCompliantForm:function(t){return!!(t&&h(t.append)&&"FormData"===t[Symbol.toStringTag]&&t[Symbol.iterator])},toJSONObject:t=>{const e=new Array(10),r=(t,n)=>{if(b(t)){if(e.indexOf(t)>=0)return;if(!("toJSON"in t)){e[n]=t;const o=l(t)?[]:{};return D(t,((t,e)=>{const i=r(t,n+1);!f(i)&&(o[e]=i)})),e[n]=void 0,o}}return t};return r(t,0)},isAsyncFn:N,isThenable:t=>t&&(b(t)||h(t))&&h(t.then)&&h(t.catch),setImmediate:I,asap:G};function K(t,e,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=t,this.name="AxiosError",e&&(this.code=e),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o)}J.inherits(K,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:J.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const $=K.prototype,Q={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((t=>{Q[t]={value:t}})),Object.defineProperties(K,Q),Object.defineProperty($,"isAxiosError",{value:!0}),K.from=(t,e,r,n,o,i)=>{const s=Object.create($);return J.toFlatObject(t,s,(function(t){return t!==Error.prototype}),(t=>"isAxiosError"!==t)),K.call(s,t.message,e,r,n,o),s.cause=t,s.name=t.name,i&&Object.assign(s,i),s};function X(t){return J.isPlainObject(t)||J.isArray(t)}function Y(t){return J.endsWith(t,"[]")?t.slice(0,-2):t}function Z(t,e,r){return t?t.concat(e).map((function(t,e){return t=Y(t),!r&&e?"["+t+"]":t})).join(r?".":""):e}const tt=J.toFlatObject(J,{},null,(function(t){return/^is[A-Z]/.test(t)}));function et(t,e,r){if(!J.isObject(t))throw new TypeError("target must be an object");e=e||new FormData;const n=(r=J.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(t,e){return!J.isUndefined(e[t])}))).metaTokens,o=r.visitor||c,i=r.dots,s=r.indexes,a=(r.Blob||"undefined"!=typeof Blob&&Blob)&&J.isSpecCompliantForm(e);if(!J.isFunction(o))throw new TypeError("visitor must be a function");function u(t){if(null===t)return"";if(J.isDate(t))return t.toISOString();if(!a&&J.isBlob(t))throw new K("Blob is not supported. Use a Buffer instead.");return J.isArrayBuffer(t)||J.isTypedArray(t)?a&&"function"==typeof Blob?new Blob([t]):Buffer.from(t):t}function c(t,r,o){let a=t;if(t&&!o&&"object"==typeof t)if(J.endsWith(r,"{}"))r=n?r:r.slice(0,-2),t=JSON.stringify(t);else if(J.isArray(t)&&function(t){return J.isArray(t)&&!t.some(X)}(t)||(J.isFileList(t)||J.endsWith(r,"[]"))&&(a=J.toArray(t)))return r=Y(r),a.forEach((function(t,n){!J.isUndefined(t)&&null!==t&&e.append(!0===s?Z([r],n,i):null===s?r:r+"[]",u(t))})),!1;return!!X(t)||(e.append(Z(o,r,i),u(t)),!1)}const l=[],f=Object.assign(tt,{defaultVisitor:c,convertValue:u,isVisitable:X});if(!J.isObject(t))throw new TypeError("data must be an object");return function t(r,n){if(!J.isUndefined(r)){if(-1!==l.indexOf(r))throw Error("Circular reference detected in "+n.join("."));l.push(r),J.forEach(r,(function(r,i){!0===(!(J.isUndefined(r)||null===r)&&o.call(e,r,J.isString(i)?i.trim():i,n,f))&&t(r,n?n.concat(i):[i])})),l.pop()}}(t),e}function rt(t){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,(function(t){return e[t]}))}function nt(t,e){this._pairs=[],t&&et(t,this,e)}const ot=nt.prototype;function it(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function st(t,e,r){if(!e)return t;const n=r&&r.encode||it,o=r&&r.serialize;let i;if(i=o?o(e,r):J.isURLSearchParams(e)?e.toString():new nt(e,r).toString(n),i){const e=t.indexOf("#");-1!==e&&(t=t.slice(0,e)),t+=(-1===t.indexOf("?")?"?":"&")+i}return t}ot.append=function(t,e){this._pairs.push([t,e])},ot.toString=function(t){const e=t?function(e){return t.call(this,e,rt)}:rt;return this._pairs.map((function(t){return e(t[0])+"="+e(t[1])}),"").join("&")};var at=class InterceptorManager{constructor(){this.handlers=[]}use(t,e,r){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){J.forEach(this.handlers,(function(e){null!==e&&t(e)}))}},ut={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},ct={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:nt,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const lt="undefined"!=typeof window&&"undefined"!=typeof document,ft=(pt="undefined"!=typeof navigator&&navigator.product,lt&&["ReactNative","NativeScript","NS"].indexOf(pt)<0);var pt;const dt="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,ht=lt&&window.location.href||"http://localhost";var yt={...Object.freeze({__proto__:null,hasBrowserEnv:lt,hasStandardBrowserWebWorkerEnv:dt,hasStandardBrowserEnv:ft,origin:ht}),...ct};function bt(t){function e(t,r,n,o){let i=t[o++];if("__proto__"===i)return!0;const s=Number.isFinite(+i),a=o>=t.length;if(i=!i&&J.isArray(n)?n.length:i,a)return J.hasOwnProp(n,i)?n[i]=[n[i],r]:n[i]=r,!s;n[i]&&J.isObject(n[i])||(n[i]=[]);return e(t,r,n[i],o)&&J.isArray(n[i])&&(n[i]=function(t){const e={},r=Object.keys(t);let n;const o=r.length;let i;for(n=0;n<o;n++)i=r[n],e[i]=t[i];return e}(n[i])),!s}if(J.isFormData(t)&&J.isFunction(t.entries)){const r={};return J.forEachEntry(t,((t,n)=>{e(function(t){return J.matchAll(/\w+|\[(\w*)]/g,t).map((t=>"[]"===t[0]?"":t[1]||t[0]))}(t),n,r,0)})),r}return null}const vt={transitional:ut,adapter:["xhr","http","fetch"],transformRequest:[function(t,e){const r=e.getContentType()||"",n=r.indexOf("application/json")>-1,o=J.isObject(t);o&&J.isHTMLForm(t)&&(t=new FormData(t));if(J.isFormData(t))return n?JSON.stringify(bt(t)):t;if(J.isArrayBuffer(t)||J.isBuffer(t)||J.isStream(t)||J.isFile(t)||J.isBlob(t)||J.isReadableStream(t))return t;if(J.isArrayBufferView(t))return t.buffer;if(J.isURLSearchParams(t))return e.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let i;if(o){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(t,e){return et(t,new yt.classes.URLSearchParams,Object.assign({visitor:function(t,e,r,n){return yt.isNode&&J.isBuffer(t)?(this.append(e,t.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)}},e))}(t,this.formSerializer).toString();if((i=J.isFileList(t))||r.indexOf("multipart/form-data")>-1){const e=this.env&&this.env.FormData;return et(i?{"files[]":t}:t,e&&new e,this.formSerializer)}}return o||n?(e.setContentType("application/json",!1),function(t,e,r){if(J.isString(t))try{return(e||JSON.parse)(t),J.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(r||JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){const e=this.transitional||vt.transitional,r=e&&e.forcedJSONParsing,n="json"===this.responseType;if(J.isResponse(t)||J.isReadableStream(t))return t;if(t&&J.isString(t)&&(r&&!this.responseType||n)){const r=!(e&&e.silentJSONParsing)&&n;try{return JSON.parse(t)}catch(t){if(r){if("SyntaxError"===t.name)throw K.from(t,K.ERR_BAD_RESPONSE,this,null,this.response);throw t}}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:yt.classes.FormData,Blob:yt.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};J.forEach(["delete","get","head","post","put","patch"],(t=>{vt.headers[t]={}}));var _t=vt;const gt=J.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const mt=Symbol("internals");function wt(t){return t&&String(t).trim().toLowerCase()}function Ot(t){return!1===t||null==t?t:J.isArray(t)?t.map(Ot):String(t)}function jt(t,e,r,n,o){return J.isFunction(n)?n.call(this,e,r):(o&&(e=r),J.isString(e)?J.isString(n)?-1!==e.indexOf(n):J.isRegExp(n)?n.test(e):void 0:void 0)}class AxiosHeaders{constructor(t){t&&this.set(t)}set(t,e,r){const n=this;function o(t,e,r){const o=wt(e);if(!o)throw new Error("header name must be a non-empty string");const i=J.findKey(n,o);(!i||void 0===n[i]||!0===r||void 0===r&&!1!==n[i])&&(n[i||e]=Ot(t))}const i=(t,e)=>J.forEach(t,((t,r)=>o(t,r,e)));if(J.isPlainObject(t)||t instanceof this.constructor)i(t,e);else if(J.isString(t)&&(t=t.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim()))i((t=>{const e={};let r,n,o;return t&&t.split("\n").forEach((function(t){o=t.indexOf(":"),r=t.substring(0,o).trim().toLowerCase(),n=t.substring(o+1).trim(),!r||e[r]&&gt[r]||("set-cookie"===r?e[r]?e[r].push(n):e[r]=[n]:e[r]=e[r]?e[r]+", "+n:n)})),e})(t),e);else if(J.isHeaders(t))for(const[e,n]of t.entries())o(n,e,r);else null!=t&&o(e,t,r);return this}get(t,e){if(t=wt(t)){const r=J.findKey(this,t);if(r){const t=this[r];if(!e)return t;if(!0===e)return function(t){const e=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(t);)e[n[1]]=n[2];return e}(t);if(J.isFunction(e))return e.call(this,t,r);if(J.isRegExp(e))return e.exec(t);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,e){if(t=wt(t)){const r=J.findKey(this,t);return!(!r||void 0===this[r]||e&&!jt(0,this[r],r,e))}return!1}delete(t,e){const r=this;let n=!1;function o(t){if(t=wt(t)){const o=J.findKey(r,t);!o||e&&!jt(0,r[o],o,e)||(delete r[o],n=!0)}}return J.isArray(t)?t.forEach(o):o(t),n}clear(t){const e=Object.keys(this);let r=e.length,n=!1;for(;r--;){const o=e[r];t&&!jt(0,this[o],o,t,!0)||(delete this[o],n=!0)}return n}normalize(t){const e=this,r={};return J.forEach(this,((n,o)=>{const i=J.findKey(r,o);if(i)return e[i]=Ot(n),void delete e[o];const s=t?function(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((t,e,r)=>e.toUpperCase()+r))}(o):String(o).trim();s!==o&&delete e[o],e[s]=Ot(n),r[s]=!0})),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const e=Object.create(null);return J.forEach(this,((r,n)=>{null!=r&&!1!==r&&(e[n]=t&&J.isArray(r)?r.join(", "):r)})),e}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([t,e])=>t+": "+e)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...e){const r=new this(t);return e.forEach((t=>r.set(t))),r}static accessor(t){const e=(this[mt]=this[mt]={accessors:{}}).accessors,r=this.prototype;function n(t){const n=wt(t);e[n]||(!function(t,e){const r=J.toCamelCase(" "+e);["get","set","has"].forEach((n=>{Object.defineProperty(t,n+r,{value:function(t,r,o){return this[n].call(this,e,t,r,o)},configurable:!0})}))}(r,t),e[n]=!0)}return J.isArray(t)?t.forEach(n):n(t),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),J.reduceDescriptors(AxiosHeaders.prototype,(({value:t},e)=>{let r=e[0].toUpperCase()+e.slice(1);return{get:()=>t,set(t){this[r]=t}}})),J.freezeMethods(AxiosHeaders);var Pt=AxiosHeaders;function xt(t,e){const r=this||_t,n=e||r,o=Pt.from(n.headers);let i=n.data;return J.forEach(t,(function(t){i=t.call(r,i,o.normalize(),e?e.status:void 0)})),o.normalize(),i}function St(t){return!(!t||!t.__CANCEL__)}function Dt(t,e,r){K.call(this,null==t?"canceled":t,K.ERR_CANCELED,e,r),this.name="CanceledError"}function Mt(t,e,r){const n=r.config.validateStatus;r.status&&n&&!n(r.status)?e(new K("Request failed with status code "+r.status,[K.ERR_BAD_REQUEST,K.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):t(r)}J.inherits(Dt,K,{__CANCEL__:!0});const Rt=(t,e,r=3)=>{let n=0;const o=function(t,e){t=t||10;const r=new Array(t),n=new Array(t);let o,i=0,s=0;return e=void 0!==e?e:1e3,function(a){const u=Date.now(),c=n[s];o||(o=u),r[i]=a,n[i]=u;let l=s,f=0;for(;l!==i;)f+=r[l++],l%=t;if(i=(i+1)%t,i===s&&(s=(s+1)%t),u-o<e)return;const p=c&&u-c;return p?Math.round(1e3*f/p):void 0}}(50,250);return function(t,e){let r,n,o=0,i=1e3/e;const s=(e,i=Date.now())=>{o=i,r=null,n&&(clearTimeout(n),n=null),t.apply(null,e)};return[(...t)=>{const e=Date.now(),a=e-o;a>=i?s(t,e):(r=t,n||(n=setTimeout((()=>{n=null,s(r)}),i-a)))},()=>r&&s(r)]}((r=>{const i=r.loaded,s=r.lengthComputable?r.total:void 0,a=i-n,u=o(a);n=i;t({loaded:i,total:s,progress:s?i/s:void 0,bytes:a,rate:u||void 0,estimated:u&&s&&i<=s?(s-i)/u:void 0,event:r,lengthComputable:null!=s,[e?"download":"upload"]:!0})}),r)},Tt=(t,e)=>{const r=null!=t;return[n=>e[0]({lengthComputable:r,total:t,loaded:n}),e[1]]},Et=t=>(...e)=>J.asap((()=>t(...e)));var kt=yt.hasStandardBrowserEnv?function(){const t=/(msie|trident)/i.test(navigator.userAgent),e=document.createElement("a");let r;function n(r){let n=r;return t&&(e.setAttribute("href",n),n=e.href),e.setAttribute("href",n),{href:e.href,protocol:e.protocol?e.protocol.replace(/:$/,""):"",host:e.host,search:e.search?e.search.replace(/^\?/,""):"",hash:e.hash?e.hash.replace(/^#/,""):"",hostname:e.hostname,port:e.port,pathname:"/"===e.pathname.charAt(0)?e.pathname:"/"+e.pathname}}return r=n(window.location.href),function(t){const e=J.isString(t)?n(t):t;return e.protocol===r.protocol&&e.host===r.host}}():function(){return!0},qt=yt.hasStandardBrowserEnv?{write(t,e,r,n,o,i){const s=[t+"="+encodeURIComponent(e)];J.isNumber(r)&&s.push("expires="+new Date(r).toGMTString()),J.isString(n)&&s.push("path="+n),J.isString(o)&&s.push("domain="+o),!0===i&&s.push("secure"),document.cookie=s.join("; ")},read(t){const e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(t){this.write(t,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function At(t,e){return t&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)?function(t,e){return e?t.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):t}(t,e):e}const Bt=t=>t instanceof Pt?{...t}:t;function Ct(t,e){e=e||{};const r={};function n(t,e,r){return J.isPlainObject(t)&&J.isPlainObject(e)?J.merge.call({caseless:r},t,e):J.isPlainObject(e)?J.merge({},e):J.isArray(e)?e.slice():e}function o(t,e,r){return J.isUndefined(e)?J.isUndefined(t)?void 0:n(void 0,t,r):n(t,e,r)}function i(t,e){if(!J.isUndefined(e))return n(void 0,e)}function s(t,e){return J.isUndefined(e)?J.isUndefined(t)?void 0:n(void 0,t):n(void 0,e)}function a(r,o,i){return i in e?n(r,o):i in t?n(void 0,r):void 0}const u={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:a,headers:(t,e)=>o(Bt(t),Bt(e),!0)};return J.forEach(Object.keys(Object.assign({},t,e)),(function(n){const i=u[n]||o,s=i(t[n],e[n],n);J.isUndefined(s)&&i!==a||(r[n]=s)})),r}var Ft=t=>{const e=Ct({},t);let r,{data:n,withXSRFToken:o,xsrfHeaderName:i,xsrfCookieName:s,headers:a,auth:u}=e;if(e.headers=a=Pt.from(a),e.url=st(At(e.baseURL,e.url),t.params,t.paramsSerializer),u&&a.set("Authorization","Basic "+btoa((u.username||"")+":"+(u.password?unescape(encodeURIComponent(u.password)):""))),J.isFormData(n))if(yt.hasStandardBrowserEnv||yt.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if(!1!==(r=a.getContentType())){const[t,...e]=r?r.split(";").map((t=>t.trim())).filter(Boolean):[];a.setContentType([t||"multipart/form-data",...e].join("; "))}if(yt.hasStandardBrowserEnv&&(o&&J.isFunction(o)&&(o=o(e)),o||!1!==o&&kt(e.url))){const t=i&&s&&qt.read(s);t&&a.set(i,t)}return e};var Lt="undefined"!=typeof XMLHttpRequest&&function(t){return new Promise((function(e,r){const n=Ft(t);let o=n.data;const i=Pt.from(n.headers).normalize();let s,a,u,c,l,{responseType:f,onUploadProgress:p,onDownloadProgress:d}=n;function h(){c&&c(),l&&l(),n.cancelToken&&n.cancelToken.unsubscribe(s),n.signal&&n.signal.removeEventListener("abort",s)}let y=new XMLHttpRequest;function b(){if(!y)return;const n=Pt.from("getAllResponseHeaders"in y&&y.getAllResponseHeaders());Mt((function(t){e(t),h()}),(function(t){r(t),h()}),{data:f&&"text"!==f&&"json"!==f?y.response:y.responseText,status:y.status,statusText:y.statusText,headers:n,config:t,request:y}),y=null}y.open(n.method.toUpperCase(),n.url,!0),y.timeout=n.timeout,"onloadend"in y?y.onloadend=b:y.onreadystatechange=function(){y&&4===y.readyState&&(0!==y.status||y.responseURL&&0===y.responseURL.indexOf("file:"))&&setTimeout(b)},y.onabort=function(){y&&(r(new K("Request aborted",K.ECONNABORTED,t,y)),y=null)},y.onerror=function(){r(new K("Network Error",K.ERR_NETWORK,t,y)),y=null},y.ontimeout=function(){let e=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded";const o=n.transitional||ut;n.timeoutErrorMessage&&(e=n.timeoutErrorMessage),r(new K(e,o.clarifyTimeoutError?K.ETIMEDOUT:K.ECONNABORTED,t,y)),y=null},void 0===o&&i.setContentType(null),"setRequestHeader"in y&&J.forEach(i.toJSON(),(function(t,e){y.setRequestHeader(e,t)})),J.isUndefined(n.withCredentials)||(y.withCredentials=!!n.withCredentials),f&&"json"!==f&&(y.responseType=n.responseType),d&&([u,l]=Rt(d,!0),y.addEventListener("progress",u)),p&&y.upload&&([a,c]=Rt(p),y.upload.addEventListener("progress",a),y.upload.addEventListener("loadend",c)),(n.cancelToken||n.signal)&&(s=e=>{y&&(r(!e||e.type?new Dt(null,t,y):e),y.abort(),y=null)},n.cancelToken&&n.cancelToken.subscribe(s),n.signal&&(n.signal.aborted?s():n.signal.addEventListener("abort",s)));const v=function(t){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}(n.url);v&&-1===yt.protocols.indexOf(v)?r(new K("Unsupported protocol "+v+":",K.ERR_BAD_REQUEST,t)):y.send(o||null)}))};var Ut=(t,e)=>{let r,n=new AbortController;const o=function(t){if(!r){r=!0,s();const e=t instanceof Error?t:this.reason;n.abort(e instanceof K?e:new Dt(e instanceof Error?e.message:e))}};let i=e&&setTimeout((()=>{o(new K(`timeout ${e} of ms exceeded`,K.ETIMEDOUT))}),e);const s=()=>{t&&(i&&clearTimeout(i),i=null,t.forEach((t=>{t&&(t.removeEventListener?t.removeEventListener("abort",o):t.unsubscribe(o))})),t=null)};t.forEach((t=>t&&t.addEventListener&&t.addEventListener("abort",o)));const{signal:a}=n;return a.unsubscribe=s,[a,()=>{i&&clearTimeout(i),i=null}]};const Nt=function*(t,e){let r=t.byteLength;if(!e||r<e)return void(yield t);let n,o=0;for(;o<r;)n=o+e,yield t.slice(o,n),o=n},It=(t,e,r,n,o)=>{const i=async function*(t,e,r){for await(const n of t)yield*Nt(ArrayBuffer.isView(n)?n:await r(String(n)),e)}(t,e,o);let s,a=0,u=t=>{s||(s=!0,n&&n(t))};return new ReadableStream({async pull(t){try{const{done:e,value:n}=await i.next();if(e)return u(),void t.close();let o=n.byteLength;if(r){let t=a+=o;r(t)}t.enqueue(new Uint8Array(n))}catch(t){throw u(t),t}},cancel:t=>(u(t),i.return())},{highWaterMark:2})},Wt="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,Ht=Wt&&"function"==typeof ReadableStream,Vt=Wt&&("function"==typeof TextEncoder?(zt=new TextEncoder,t=>zt.encode(t)):async t=>new Uint8Array(await new Response(t).arrayBuffer()));var zt;const Gt=(t,...e)=>{try{return!!t(...e)}catch(t){return!1}},Jt=Ht&&Gt((()=>{let t=!1;const e=new Request(yt.origin,{body:new ReadableStream,method:"POST",get duplex(){return t=!0,"half"}}).headers.has("Content-Type");return t&&!e})),Kt=Ht&&Gt((()=>J.isReadableStream(new Response("").body))),$t={stream:Kt&&(t=>t.body)};var Qt;Wt&&(Qt=new Response,["text","arrayBuffer","blob","formData","stream"].forEach((t=>{!$t[t]&&($t[t]=J.isFunction(Qt[t])?e=>e[t]():(e,r)=>{throw new K(`Response type '${t}' is not supported`,K.ERR_NOT_SUPPORT,r)})})));const Xt=async(t,e)=>{const r=J.toFiniteNumber(t.getContentLength());return null==r?(async t=>null==t?0:J.isBlob(t)?t.size:J.isSpecCompliantForm(t)?(await new Request(t).arrayBuffer()).byteLength:J.isArrayBufferView(t)||J.isArrayBuffer(t)?t.byteLength:(J.isURLSearchParams(t)&&(t+=""),J.isString(t)?(await Vt(t)).byteLength:void 0))(e):r};const Yt={http:null,xhr:Lt,fetch:Wt&&(async t=>{let{url:e,method:r,data:n,signal:o,cancelToken:i,timeout:s,onDownloadProgress:a,onUploadProgress:u,responseType:c,headers:l,withCredentials:f="same-origin",fetchOptions:p}=Ft(t);c=c?(c+"").toLowerCase():"text";let d,h,[y,b]=o||i||s?Ut([o,i],s):[];const v=()=>{!d&&setTimeout((()=>{y&&y.unsubscribe()})),d=!0};let _;try{if(u&&Jt&&"get"!==r&&"head"!==r&&0!==(_=await Xt(l,n))){let t,r=new Request(e,{method:"POST",body:n,duplex:"half"});if(J.isFormData(n)&&(t=r.headers.get("content-type"))&&l.setContentType(t),r.body){const[t,e]=Tt(_,Rt(Et(u)));n=It(r.body,65536,t,e,Vt)}}J.isString(f)||(f=f?"include":"omit"),h=new Request(e,{...p,signal:y,method:r.toUpperCase(),headers:l.normalize().toJSON(),body:n,duplex:"half",credentials:f});let o=await fetch(h);const i=Kt&&("stream"===c||"response"===c);if(Kt&&(a||i)){const t={};["status","statusText","headers"].forEach((e=>{t[e]=o[e]}));const e=J.toFiniteNumber(o.headers.get("content-length")),[r,n]=a&&Tt(e,Rt(Et(a),!0))||[];o=new Response(It(o.body,65536,r,(()=>{n&&n(),i&&v()}),Vt),t)}c=c||"text";let s=await $t[J.findKey($t,c)||"text"](o,t);return!i&&v(),b&&b(),await new Promise(((e,r)=>{Mt(e,r,{data:s,headers:Pt.from(o.headers),status:o.status,statusText:o.statusText,config:t,request:h})}))}catch(e){if(v(),e&&"TypeError"===e.name&&/fetch/i.test(e.message))throw Object.assign(new K("Network Error",K.ERR_NETWORK,t,h),{cause:e.cause||e});throw K.from(e,e&&e.code,t,h)}})};J.forEach(Yt,((t,e)=>{if(t){try{Object.defineProperty(t,"name",{value:e})}catch(t){}Object.defineProperty(t,"adapterName",{value:e})}}));const Zt=t=>`- ${t}`,te=t=>J.isFunction(t)||null===t||!1===t;var ee=t=>{t=J.isArray(t)?t:[t];const{length:e}=t;let r,n;const o={};for(let i=0;i<e;i++){let e;if(r=t[i],n=r,!te(r)&&(n=Yt[(e=String(r)).toLowerCase()],void 0===n))throw new K(`Unknown adapter '${e}'`);if(n)break;o[e||"#"+i]=n}if(!n){const t=Object.entries(o).map((([t,e])=>`adapter ${t} `+(!1===e?"is not supported by the environment":"is not available in the build")));throw new K("There is no suitable adapter to dispatch the request "+(e?t.length>1?"since :\n"+t.map(Zt).join("\n"):" "+Zt(t[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return n};function re(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new Dt(null,t)}function ne(t){re(t),t.headers=Pt.from(t.headers),t.data=xt.call(t,t.transformRequest),-1!==["post","put","patch"].indexOf(t.method)&&t.headers.setContentType("application/x-www-form-urlencoded",!1);return ee(t.adapter||_t.adapter)(t).then((function(e){return re(t),e.data=xt.call(t,t.transformResponse,e),e.headers=Pt.from(e.headers),e}),(function(e){return St(e)||(re(t),e&&e.response&&(e.response.data=xt.call(t,t.transformResponse,e.response),e.response.headers=Pt.from(e.response.headers))),Promise.reject(e)}))}const oe="1.7.4",ie={};["object","boolean","number","function","string","symbol"].forEach(((t,e)=>{ie[t]=function(r){return typeof r===t||"a"+(e<1?"n ":" ")+t}}));const se={};ie.transitional=function(t,e,r){function n(t,e){return"[Axios v1.7.4] Transitional option '"+t+"'"+e+(r?". "+r:"")}return(r,o,i)=>{if(!1===t)throw new K(n(o," has been removed"+(e?" in "+e:"")),K.ERR_DEPRECATED);return e&&!se[o]&&(se[o]=!0,console.warn(n(o," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(r,o,i)}};var ae={assertOptions:function(t,e,r){if("object"!=typeof t)throw new K("options must be an object",K.ERR_BAD_OPTION_VALUE);const n=Object.keys(t);let o=n.length;for(;o-- >0;){const i=n[o],s=e[i];if(s){const e=t[i],r=void 0===e||s(e,i,t);if(!0!==r)throw new K("option "+i+" must be "+r,K.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new K("Unknown option "+i,K.ERR_BAD_OPTION)}},validators:ie};const ue=ae.validators;class Axios{constructor(t){this.defaults=t,this.interceptors={request:new at,response:new at}}async request(t,e){try{return await this._request(t,e)}catch(t){if(t instanceof Error){let e;Error.captureStackTrace?Error.captureStackTrace(e={}):e=new Error;const r=e.stack?e.stack.replace(/^.+\n/,""):"";try{t.stack?r&&!String(t.stack).endsWith(r.replace(/^.+\n.+\n/,""))&&(t.stack+="\n"+r):t.stack=r}catch(t){}}throw t}}_request(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},e=Ct(this.defaults,e);const{transitional:r,paramsSerializer:n,headers:o}=e;void 0!==r&&ae.assertOptions(r,{silentJSONParsing:ue.transitional(ue.boolean),forcedJSONParsing:ue.transitional(ue.boolean),clarifyTimeoutError:ue.transitional(ue.boolean)},!1),null!=n&&(J.isFunction(n)?e.paramsSerializer={serialize:n}:ae.assertOptions(n,{encode:ue.function,serialize:ue.function},!0)),e.method=(e.method||this.defaults.method||"get").toLowerCase();let i=o&&J.merge(o.common,o[e.method]);o&&J.forEach(["delete","get","head","post","put","patch","common"],(t=>{delete o[t]})),e.headers=Pt.concat(i,o);const s=[];let a=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(a=a&&t.synchronous,s.unshift(t.fulfilled,t.rejected))}));const u=[];let c;this.interceptors.response.forEach((function(t){u.push(t.fulfilled,t.rejected)}));let l,f=0;if(!a){const t=[ne.bind(this),void 0];for(t.unshift.apply(t,s),t.push.apply(t,u),l=t.length,c=Promise.resolve(e);f<l;)c=c.then(t[f++],t[f++]);return c}l=s.length;let p=e;for(f=0;f<l;){const t=s[f++],e=s[f++];try{p=t(p)}catch(t){e.call(this,t);break}}try{c=ne.call(this,p)}catch(t){return Promise.reject(t)}for(f=0,l=u.length;f<l;)c=c.then(u[f++],u[f++]);return c}getUri(t){return st(At((t=Ct(this.defaults,t)).baseURL,t.url),t.params,t.paramsSerializer)}}J.forEach(["delete","get","head","options"],(function(t){Axios.prototype[t]=function(e,r){return this.request(Ct(r||{},{method:t,url:e,data:(r||{}).data}))}})),J.forEach(["post","put","patch"],(function(t){function e(e){return function(r,n,o){return this.request(Ct(o||{},{method:t,headers:e?{"Content-Type":"multipart/form-data"}:{},url:r,data:n}))}}Axios.prototype[t]=e(),Axios.prototype[t+"Form"]=e(!0)}));var ce=Axios;class CancelToken{constructor(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");let e;this.promise=new Promise((function(t){e=t}));const r=this;this.promise.then((t=>{if(!r._listeners)return;let e=r._listeners.length;for(;e-- >0;)r._listeners[e](t);r._listeners=null})),this.promise.then=t=>{let e;const n=new Promise((t=>{r.subscribe(t),e=t})).then(t);return n.cancel=function(){r.unsubscribe(e)},n},t((function(t,n,o){r.reason||(r.reason=new Dt(t,n,o),e(r.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}static source(){let t;return{token:new CancelToken((function(e){t=e})),cancel:t}}}var le=CancelToken;const fe={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(fe).forEach((([t,e])=>{fe[e]=t}));var pe=fe;const de=function t(e){const r=new ce(e),o=n(ce.prototype.request,r);return J.extend(o,ce.prototype,r,{allOwnKeys:!0}),J.extend(o,r,null,{allOwnKeys:!0}),o.create=function(r){return t(Ct(e,r))},o}(_t);de.Axios=ce,de.CanceledError=Dt,de.CancelToken=le,de.isCancel=St,de.VERSION=oe,de.toFormData=et,de.AxiosError=K,de.Cancel=de.CanceledError,de.all=function(t){return Promise.all(t)},de.spread=function(t){return function(e){return t.apply(null,e)}},de.isAxiosError=function(t){return J.isObject(t)&&!0===t.isAxiosError},de.mergeConfig=Ct,de.AxiosHeaders=Pt,de.formToJSON=t=>bt(J.isHTMLForm(t)?new FormData(t):t),de.getAdapter=ee,de.HttpStatusCode=pe,de.default=de,t.exports=de}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var i=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}return r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),r(439)})()));
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFBdGhCLEVBQUEsTUFBQTRGLG1xQkNBQTBiLEVBQUF0aEIsRUFBQSxNQUFBNEYsR0FDQTBiLEVBQUF0aEIsRUFBQSxNQUFBNEYsdWxCQ0RBMGIsRUFBQXRoQixFQUFBLE1BQUE0Rix1bEJDQUEwYixFQUFBdGhCLEVBQUEsTUFBQTRGLG1xQkNBQTBiLEVBQUF0aEIsRUFBQSxNQUFBNEYsR0FDQTBiLEVBQUF0aEIsRUFBQSxNQUFBNEYsc2xCQ0RBMGIsRUFBQXRoQixFQUFBLE1BQUE0RixzNEJDQUEwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLGtxQkNKQTBiLEVBQUF0aEIsRUFBQSxNQUFBNEYsR0FDQTBiLEVBQUF0aEIsRUFBQSxNQUFBNEYsb2xCQ0RBMGIsRUFBQXRoQixFQUFBLE1BQUE0RiwyZ0JDQUEwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsS0FBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsS0FBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsR0FBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsS0FBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLHM0QkNkQTBiLEVBQUF0aEIsRUFBQSxNQUFBNEYsR0FDQTBiLEVBQUF0aEIsRUFBQSxLQUFBNEYsR0FDQTBiLEVBQUF0aEIsRUFBQSxNQUFBNEYsR0FDQTBiLEVBQUF0aEIsRUFBQSxNQUFBNEYsR0FDQTBiLEVBQUF0aEIsRUFBQSxNQUFBNEYsdTRCQ0pBMGIsRUFBQXRoQixFQUFBLE1BQUE0RixHQUNBMGIsRUFBQXRoQixFQUFBLE1BQUE0RixHQUNBMGIsRUFBQXRoQixFQUFBLE1BQUE0RixHQUNBMGIsRUFBQXRoQixFQUFBLE1BQUE0RixHQUNBMGIsRUFBQXRoQixFQUFBLE1BQUE0Rix1bEJDSkEwYixFQUFBdGhCLEVBQUEsTUFBQTRGLHVsQkNBQTBiLEVBQUF0aEIsRUFBQSxNQUFBNEYscWxCQ0FBMGIsRUFBQXRoQixFQUFBLE1BQUE0Rix1bEJDQUEwYixFQUFBdGhCLEVBQUEsTUFBQTRGLG1xQkNBQTBiLEVBQUF0aEIsRUFBQSxNQUFBNEYsR0FDQTBiLEVBQUF0aEIsRUFBQSxNQUFBNEYsc2xCQ0RBMGIsRUFBQXRoQixFQUFBLE1BQUE0Rix1bEJDQUEwYixFQUFBdGhCLEVBQUEsTUFBQTRGLHVsQkNBQTBiLEVBQUF0aEIsRUFBQSxNQUFBNEYsdWxCQ0FBMGIsRUFBQXRoQixFQUFBLE1BQUE0Rix1NEJDQUEwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLG1xQkNKQTBiLEVBQUF0aEIsRUFBQSxNQUFBNEYsR0FDQTBiLEVBQUF0aEIsRUFBQSxNQUFBNEYsdWxCQ0RBMGIsRUFBQXRoQixFQUFBLE1BQUE0RiwyZ0JDQUEwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsSUFBQTRGLEdBQ0EwYixFQUFBdGhCLEVBQUEsTUFBQTRGLEdBQ0Ew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QW9CSyxJQUFPbjFCLElBQzFCQSxFQUFPbzFCLE1BQVEsR0FDVnAxQixFQUFPcTFCLFdBQVVyMUIsRUFBT3ExQixTQUFXLElBQ2pDcjFCLEdDQWtCODBCLEVBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0RvbWFpbnMvZG9tYWluLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9Eb21haW5zL2RvbWFpbnNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0RvbWFpbnMvZG9tYWluc0NyZWRlbnRpYWxzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9Eb21haW5zL2RvbWFpbnNUYWdzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9Eb21haW5zL2RvbWFpbnNUZW1wbGF0ZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0V2ZW50cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvSVBQb29scy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvSVBzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvQXR0cmlidXRlc0NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvSW5ib3hQbGFjZW1lbnRzL0ZpbHRlcnNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0luYm94UGxhY2VtZW50cy9SZXN1bHRzL0luYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0luYm94UGxhY2VtZW50cy9SZXN1bHRzL0luYm94UGxhY2VtZW50c1Jlc3VsdHNTaGFyaW5nQ2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvU2VlZHNMaXN0cy9TZWVkc0xpc3RzQ2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvaW5ib3hQbGFjZW1lbnRzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvcHJvdmlkZXJzL0luYm94UGxhY2VtZW50c1Byb3ZpZGVycy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvTWFpbGd1bkNsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvTWFpbGluZ0xpc3RzL21haWxMaXN0TWVtYmVycy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvTWFpbGluZ0xpc3RzL21haWxpbmdMaXN0cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvTWVzc2FnZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL01ldHJpY3MvTWV0cmljc0NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvUm91dGVzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdGF0cy9TdGF0c0NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvU3RhdHMvU3RhdHNDb250YWluZXIudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1N1YmFjY291bnRzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdXBwcmVzc2lvbnMvQm91bmNlLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdXBwcmVzc2lvbnMvQ29tcGxhaW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdXBwcmVzc2lvbnMvU3VwcHJlc3Npb24udHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1N1cHByZXNzaW9ucy9TdXBwcmVzc2lvbnNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1N1cHByZXNzaW9ucy9VbnN1YnNjcmliZS50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvU3VwcHJlc3Npb25zL1doaXRlTGlzdC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvVmFsaWRhdGlvbnMvbXVsdGlwbGVWYWxpZGF0aW9uLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9WYWxpZGF0aW9ucy92YWxpZGF0ZS50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvV2ViaG9va3MudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL2NvbW1vbi9BdHRhY2htZW50c0hhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL2NvbW1vbi9FcnJvci50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvY29tbW9uL0Zvcm1EYXRhQnVpbGRlci50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL2NvbW1vbi9SZXF1ZXN0LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvRW51bXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL0NvbW1vbi9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvRG9tYWlucy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvRXZlbnRDbGllbnQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL0lQUG9vbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL0lQcy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvSW5ib3hQbGFjZW1lbnRzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9NYWlsZ3VuQ2xpZW50L2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9NYWlsaW5nTGlzdHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL01lc3NhZ2VzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9Sb3V0ZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL1N0YXRzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9TdWJhY2NvdW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvU3VwcHJlc3Npb25zL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9WYWxpZGF0aW9ucy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvV2ViaG9va3MvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvQ29tbW9uL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvRG9tYWlucy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL0V2ZW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL0lQUG9vbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9JUHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9NYWlsZ3VuQ2xpZW50L2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvTWFpbGluZ0xpc3RzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvTWVzc2FnZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9Sb3V0ZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9TdGF0cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL1N1YmFjY291bnRzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvU3VwcHJlc3Npb25zL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvVmFsaWRhdGlvbnMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9XZWJob29rcy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9iYXNlLTY0L2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL3VybC1qb2luL2xpYi91cmwtam9pbi5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2Rpc3QvYnJvd3Nlci9heGlvcy5janMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy93ZWJwYWNrL3J1bnRpbWUvbm9kZSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL21haWxndW4uanMvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEROU1JlY29yZCxcbiAgRG9tYWluRGF0YSxcbiAgRG9tYWluU2hvcnREYXRhLFxuICBURG9tYWluXG59IGZyb20gJy4uLy4uL1R5cGVzL0RvbWFpbnMnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpbiBpbXBsZW1lbnRzIFREb21haW4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHJlcXVpcmVfdGxzOiBib29sZWFuO1xuICBza2lwX3ZlcmlmaWNhdGlvbjogYm9vbGVhbjtcbiAgc3RhdGU6IHN0cmluZztcbiAgd2lsZGNhcmQ6IGJvb2xlYW47XG4gIHNwYW1fYWN0aW9uOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgc210cF9wYXNzd29yZDogc3RyaW5nO1xuICBzbXRwX2xvZ2luOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgcmVjZWl2aW5nX2Ruc19yZWNvcmRzOiBETlNSZWNvcmRbXSB8IG51bGw7XG4gIHNlbmRpbmdfZG5zX3JlY29yZHM6IEROU1JlY29yZFtdIHwgbnVsbDtcbiAgaWQ/OiBzdHJpbmc7XG4gIGlzX2Rpc2FibGVkPzogYm9vbGVhbjtcbiAgd2ViX3ByZWZpeD86IHN0cmluZztcbiAgd2ViX3NjaGVtZT86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBkYXRhOiBEb21haW5TaG9ydERhdGEgfCBEb21haW5EYXRhLFxuICAgIHJlY2VpdmluZz86IEROU1JlY29yZFtdIHwgbnVsbCxcbiAgICBzZW5kaW5nPzogRE5TUmVjb3JkW10gfCBudWxsXG4gICkge1xuICAgIHRoaXMubmFtZSA9IGRhdGEubmFtZTtcbiAgICB0aGlzLnJlcXVpcmVfdGxzID0gZGF0YS5yZXF1aXJlX3RscztcbiAgICB0aGlzLnNraXBfdmVyaWZpY2F0aW9uID0gZGF0YS5za2lwX3ZlcmlmaWNhdGlvbjtcbiAgICB0aGlzLnN0YXRlID0gZGF0YS5zdGF0ZTtcbiAgICB0aGlzLndpbGRjYXJkID0gZGF0YS53aWxkY2FyZDtcbiAgICB0aGlzLnNwYW1fYWN0aW9uID0gZGF0YS5zcGFtX2FjdGlvbjtcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBkYXRhLmNyZWF0ZWRfYXQ7XG4gICAgdGhpcy5zbXRwX3Bhc3N3b3JkID0gZGF0YS5zbXRwX3Bhc3N3b3JkO1xuICAgIHRoaXMuc210cF9sb2dpbiA9IGRhdGEuc210cF9sb2dpbjtcbiAgICB0aGlzLnR5cGUgPSBkYXRhLnR5cGU7XG4gICAgdGhpcy5yZWNlaXZpbmdfZG5zX3JlY29yZHMgPSByZWNlaXZpbmcgfHwgbnVsbDtcbiAgICB0aGlzLnNlbmRpbmdfZG5zX3JlY29yZHMgPSBzZW5kaW5nIHx8IG51bGw7XG4gICAgLypcbiAgICAgIGRvbWFpbiBsaXN0IGhhcyBzaG9ydGVyIHJlc3BvbnNlIHRoZW4gZ2V0LCBjcmVhdGUsIGFuZCB1cGRhdGUgbWV0aG9kcy5cbiAgICAqL1xuXG4gICAgY29uc3QgZHluYW1pY0tleXM6IChrZXlvZiBEb21haW5EYXRhKVtdID0gWydpZCcsICdpc19kaXNhYmxlZCcsICd3ZWJfcHJlZml4JywgJ3dlYl9zY2hlbWUnXTtcblxuICAgIGNvbnN0IGR5bmFtaWNQcm9wZXJ0aWVzID0gZHluYW1pY0tleXMucmVkdWNlKChhY2MsIHByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgaWYgKHByb3BlcnR5TmFtZSBpbiBkYXRhKSB7XG4gICAgICAgIGNvbnN0IHByb3AgPSBwcm9wZXJ0eU5hbWUgYXMga2V5b2YgRG9tYWluO1xuICAgICAgICBhY2NbcHJvcF0gPSAoZGF0YSBhcyBEb21haW5EYXRhKVtwcm9wZXJ0eU5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8a2V5b2YgRG9tYWluLCBzdHJpbmcgfCBib29sZWFuPik7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBkeW5hbWljUHJvcGVydGllcyk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCB7XG4gIElEb21haW5UZW1wbGF0ZXNDbGllbnQsXG4gIElEb21haW5UYWdzQ2xpZW50LFxuICBJRG9tYWluQ3JlZGVudGlhbHMsXG4gIElEb21haW5zQ2xpZW50XG59IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvRG9tYWlucyc7XG5cbmltcG9ydCB7IEFQSVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vVHlwZXMvQ29tbW9uL0FwaVJlc3BvbnNlJztcbmltcG9ydCBBUElFcnJvciBmcm9tICcuLi9jb21tb24vRXJyb3InO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5pbXBvcnQgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQgZnJvbSAnLi9kb21haW5zQ3JlZGVudGlhbHMnO1xuaW1wb3J0IERvbWFpblRlbXBsYXRlc0NsaWVudCBmcm9tICcuL2RvbWFpbnNUZW1wbGF0ZXMnO1xuaW1wb3J0IERvbWFpblRhZ3NDbGllbnQgZnJvbSAnLi9kb21haW5zVGFncyc7XG5pbXBvcnQge1xuICBEZXN0cm95ZWREb21haW5SZXNwb25zZSxcbiAgTWVzc2FnZVJlc3BvbnNlLFxuICBEb21haW5MaXN0UmVzcG9uc2VEYXRhLFxuICBEb21haW5SZXNwb25zZURhdGEsXG4gIERvbWFpblRyYWNraW5nUmVzcG9uc2UsXG4gIERvbWFpblRyYWNraW5nRGF0YSxcbiAgVXBkYXRlRG9tYWluVHJhY2tpbmdSZXNwb25zZSxcbiAgVXBkYXRlZE9wZW5UcmFja2luZyxcbiAgRG9tYWluc1F1ZXJ5LFxuICBEb21haW5JbmZvLFxuICBDb25uZWN0aW9uU2V0dGluZ3MsXG4gIENvbm5lY3Rpb25TZXR0aW5nc1Jlc3BvbnNlLFxuICBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzLFxuICBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzUmVzLFxuICBPcGVuVHJhY2tpbmdJbmZvLFxuICBDbGlja1RyYWNraW5nSW5mbyxcbiAgVW5zdWJzY3JpYmVUcmFja2luZ0luZm8sXG4gIFJlcGxhY2VtZW50Rm9yUG9vbCxcbiAgREtJTUF1dGhvcml0eUluZm8sXG4gIFVwZGF0ZWRES0lNQXV0aG9yaXR5LFxuICBVcGRhdGVkREtJTUF1dGhvcml0eVJlc3BvbnNlLFxuICBES0lNU2VsZWN0b3JJbmZvLFxuICBVcGRhdGVkREtJTVNlbGVjdG9yUmVzcG9uc2UsXG4gIFdlYlByZWZpeEluZm8sXG4gIFVwZGF0ZWRXZWJQcmVmaXhSZXNwb25zZSxcbiAgVERvbWFpbixcbiAgRG9tYWluVXBkYXRlSW5mbyxcbiAgRG9tYWluVXBkYXRlSW5mb1JlcSxcbiAgRG9tYWluSW5mb1JlcSxcbiAgQm9vbFRvU3RyaW5nLFxufSBmcm9tICcuLi8uLi9UeXBlcy9Eb21haW5zJztcbmltcG9ydCBEb21haW4gZnJvbSAnLi9kb21haW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5zQ2xpZW50IGltcGxlbWVudHMgSURvbWFpbnNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwdWJsaWMgZG9tYWluQ3JlZGVudGlhbHM6IElEb21haW5DcmVkZW50aWFscztcbiAgcHVibGljIGRvbWFpblRlbXBsYXRlczogSURvbWFpblRlbXBsYXRlc0NsaWVudDtcbiAgcHVibGljIGRvbWFpblRhZ3M6IElEb21haW5UYWdzQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQ6IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50LFxuICAgIGRvbWFpblRlbXBsYXRlc0NsaWVudDogRG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICAgIGRvbWFpblRhZ3NDbGllbnQ6IERvbWFpblRhZ3NDbGllbnRcbiAgKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmRvbWFpbkNyZWRlbnRpYWxzID0gZG9tYWluQ3JlZGVudGlhbHNDbGllbnQ7XG4gICAgdGhpcy5kb21haW5UZW1wbGF0ZXMgPSBkb21haW5UZW1wbGF0ZXNDbGllbnQ7XG4gICAgdGhpcy5kb21haW5UYWdzID0gZG9tYWluVGFnc0NsaWVudDtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUJvb2xWYWx1ZXMoXG4gICAgZGF0YTogRG9tYWluSW5mbyB8IERvbWFpblVwZGF0ZUluZm9cbiAgKTogRG9tYWluSW5mb1JlcSB8IERvbWFpblVwZGF0ZUluZm9SZXEge1xuICAgIGNvbnN0IHByb3BzRm9yUmVwbGFjZW1lbnQgPSBkYXRhIGFzIEJvb2xUb1N0cmluZztcbiAgICBjb25zdCByZXBsYWNlZFByb3BzID0gT2JqZWN0LmtleXMocHJvcHNGb3JSZXBsYWNlbWVudCkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgY29uc3QgcHJvcCA9IGtleSBhcyBrZXlvZiBCb29sVG9TdHJpbmc7XG4gICAgICBpZiAodHlwZW9mIHByb3BzRm9yUmVwbGFjZW1lbnRbcHJvcF0gPT09ICdib29sZWFuJykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHByb3BzRm9yUmVwbGFjZW1lbnRbcHJvcF0gYXMgYm9vbGVhbjtcbiAgICAgICAgYWNjW3Byb3BdID0gKHZhbHVlLnRvU3RyaW5nKCkgPT09ICd0cnVlJykgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8a2V5b2YgQm9vbFRvU3RyaW5nLCAndHJ1ZSd8ICdmYWxzZSc+KTtcbiAgICByZXR1cm4geyAuLi5kYXRhLCAuLi5yZXBsYWNlZFByb3BzIH0gYXMgRG9tYWluVXBkYXRlSW5mb1JlcSB8IERvbWFpbkluZm9SZXE7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZU1lc3NhZ2UocmVzcG9uc2U6IERlc3Ryb3llZERvbWFpblJlc3BvbnNlKSA6IE1lc3NhZ2VSZXNwb25zZSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRG9tYWluTGlzdChyZXNwb25zZTogRG9tYWluTGlzdFJlc3BvbnNlRGF0YSk6IFREb21haW5bXSB7XG4gICAgaWYgKHJlc3BvbnNlLmJvZHkgJiYgcmVzcG9uc2UuYm9keS5pdGVtcykge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkuaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBuZXcgRG9tYWluKGl0ZW0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlRG9tYWluKHJlc3BvbnNlOiBEb21haW5SZXNwb25zZURhdGEpOiBURG9tYWluIHtcbiAgICByZXR1cm4gbmV3IERvbWFpbihcbiAgICAgIHJlc3BvbnNlLmJvZHkuZG9tYWluLFxuICAgICAgcmVzcG9uc2UuYm9keS5yZWNlaXZpbmdfZG5zX3JlY29yZHMsXG4gICAgICByZXNwb25zZS5ib2R5LnNlbmRpbmdfZG5zX3JlY29yZHNcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VUcmFja2luZ1NldHRpbmdzKHJlc3BvbnNlOiBEb21haW5UcmFja2luZ1Jlc3BvbnNlKSA6IERvbWFpblRyYWNraW5nRGF0YSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkudHJhY2tpbmc7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVRyYWNraW5nVXBkYXRlKHJlc3BvbnNlOiBVcGRhdGVEb21haW5UcmFja2luZ1Jlc3BvbnNlKSA6VXBkYXRlZE9wZW5UcmFja2luZyB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gIH1cblxuICBsaXN0KHF1ZXJ5PzogRG9tYWluc1F1ZXJ5KTogUHJvbWlzZTxURG9tYWluW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YzL2RvbWFpbnMnLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZURvbWFpbkxpc3QocmVzIGFzIERvbWFpbkxpc3RSZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZykgOiBQcm9taXNlPFREb21haW4+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3YzL2RvbWFpbnMvJHtkb21haW59YClcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW4ocmVzIGFzIERvbWFpblJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IERvbWFpbkluZm8pIDogUHJvbWlzZTxURG9tYWluPiB7XG4gICAgY29uc3QgcG9zdE9iaiA9IHRoaXMuX2hhbmRsZUJvb2xWYWx1ZXMoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKCcvdjMvZG9tYWlucycsIHBvc3RPYmopXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIHVwZGF0ZShkb21haW46IHN0cmluZywgZGF0YTogRG9tYWluVXBkYXRlSW5mbykgOiBQcm9taXNlPFREb21haW4+IHtcbiAgICBjb25zdCBwdXREYXRhID0gdGhpcy5faGFuZGxlQm9vbFZhbHVlcyhkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRChgL3YzL2RvbWFpbnMvJHtkb21haW59YCwgcHV0RGF0YSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW4ocmVzIGFzIERvbWFpblJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgdmVyaWZ5KGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxURG9tYWluPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS92ZXJpZnlgKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbihyZXMgYXMgRG9tYWluUmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICBkZXN0cm95KGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3YzL2RvbWFpbnMvJHtkb21haW59YClcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VNZXNzYWdlKHJlcyBhcyBEZXN0cm95ZWREb21haW5SZXNwb25zZSkpO1xuICB9XG5cbiAgZ2V0Q29ubmVjdGlvbihkb21haW46IHN0cmluZyk6IFByb21pc2U8Q29ubmVjdGlvblNldHRpbmdzPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92My9kb21haW5zLyR7ZG9tYWlufS9jb25uZWN0aW9uYClcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIENvbm5lY3Rpb25TZXR0aW5nc1Jlc3BvbnNlKVxuICAgICAgLnRoZW4oKHJlczpDb25uZWN0aW9uU2V0dGluZ3NSZXNwb25zZSkgPT4gcmVzLmJvZHkuY29ubmVjdGlvbiBhcyBDb25uZWN0aW9uU2V0dGluZ3MpO1xuICB9XG5cbiAgdXBkYXRlQ29ubmVjdGlvbihkb21haW46IHN0cmluZywgZGF0YTogQ29ubmVjdGlvblNldHRpbmdzKTogUHJvbWlzZTxVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS9jb25uZWN0aW9uYCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3NSZXMpXG4gICAgICAudGhlbigocmVzOlVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3NSZXMpID0+IHJlcy5ib2R5IGFzIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3MpO1xuICB9XG5cbiAgLy8gVHJhY2tpbmdcblxuICBnZXRUcmFja2luZyhkb21haW46IHN0cmluZykgOiBQcm9taXNlPERvbWFpblRyYWNraW5nRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAndHJhY2tpbmcnKSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlVHJhY2tpbmdTZXR0aW5ncyk7XG4gIH1cblxuICB1cGRhdGVUcmFja2luZyhcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgZGF0YTogT3BlblRyYWNraW5nSW5mbyB8IENsaWNrVHJhY2tpbmdJbmZvIHwgVW5zdWJzY3JpYmVUcmFja2luZ0luZm9cbiAgKTogUHJvbWlzZTxVcGRhdGVkT3BlblRyYWNraW5nPiB7XG4gICAgaWYgKHR5cGVvZiBkYXRhPy5hY3RpdmUgPT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgQVBJRXJyb3IuZ2V0VXNlckRhdGFFcnJvcignUmVjZWl2ZWQgYm9vbGVhbiB2YWx1ZSBmb3IgYWN0aXZlIHByb3BlcnR5JywgJ1Byb3BlcnR5IFwiYWN0aXZlXCIgbXVzdCBjb250YWluIHN0cmluZyB2YWx1ZS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd0cmFja2luZycsIHR5cGUpLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZVRyYWNraW5nVXBkYXRlKHJlcyBhcyBVcGRhdGVEb21haW5UcmFja2luZ1Jlc3BvbnNlKSk7XG4gIH1cblxuICAvLyBJUHNcblxuICBnZXRJcHMoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnKSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogQVBJUmVzcG9uc2UpID0+IHJlc3BvbnNlPy5ib2R5Py5pdGVtcyk7XG4gIH1cblxuICBhc3NpZ25JcChkb21haW46IHN0cmluZywgaXA6IHN0cmluZyk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnKSwgeyBpcCB9KTtcbiAgfVxuXG4gIGRlbGV0ZUlwKGRvbWFpbjogc3RyaW5nLCBpcDogc3RyaW5nKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJywgaXApKTtcbiAgfVxuXG4gIGxpbmtJcFBvb2woZG9tYWluOiBzdHJpbmcsIHBvb2xJZDogc3RyaW5nKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpLCB7IHBvb2xfaWQ6IHBvb2xJZCB9KTtcbiAgfVxuXG4gIHVubGlua0lwUG9sbChkb21haW46IHN0cmluZywgcmVwbGFjZW1lbnQ6IFJlcGxhY2VtZW50Rm9yUG9vbCk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBsZXQgc2VhcmNoUGFyYW1zID0gJyc7XG4gICAgaWYgKHJlcGxhY2VtZW50LnBvb2xfaWQgJiYgcmVwbGFjZW1lbnQuaXApIHtcbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoJ1RvbyBtdWNoIGRhdGEgZm9yIHJlcGxhY2VtZW50JywgJ1BsZWFzZSBzcGVjaWZ5IGVpdGhlciBwb29sX2lkIG9yIGlwIChub3QgYm90aCknKTtcbiAgICB9IGVsc2UgaWYgKHJlcGxhY2VtZW50LnBvb2xfaWQpIHtcbiAgICAgIHNlYXJjaFBhcmFtcyA9IGA/cG9vbF9pZD0ke3JlcGxhY2VtZW50LnBvb2xfaWR9YDtcbiAgICB9IGVsc2UgaWYgKHJlcGxhY2VtZW50LmlwKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBgP2lwPSR7cmVwbGFjZW1lbnQuaXB9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnLCAnaXBfcG9vbCcsIHNlYXJjaFBhcmFtcykpO1xuICB9XG5cbiAgdXBkYXRlREtJTUF1dGhvcml0eShkb21haW46IHN0cmluZywgZGF0YTogREtJTUF1dGhvcml0eUluZm8pOiBQcm9taXNlPFVwZGF0ZWRES0lNQXV0aG9yaXR5PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS9ka2ltX2F1dGhvcml0eWAsIHt9LCB7IHF1ZXJ5OiBgc2VsZj0ke2RhdGEuc2VsZn1gIH0pXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBVcGRhdGVkREtJTUF1dGhvcml0eVJlc3BvbnNlKVxuICAgICAgLnRoZW4oKHJlcyA6IFVwZGF0ZWRES0lNQXV0aG9yaXR5UmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIFVwZGF0ZWRES0lNQXV0aG9yaXR5KTtcbiAgfVxuXG4gIHVwZGF0ZURLSU1TZWxlY3Rvcihkb21haW46IHN0cmluZywgZGF0YTogREtJTVNlbGVjdG9ySW5mbyk6IFByb21pc2U8VXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS9ka2ltX3NlbGVjdG9yYCwge30sIHsgcXVlcnk6IGBka2ltX3NlbGVjdG9yPSR7ZGF0YS5ka2ltU2VsZWN0b3J9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlKTtcbiAgfVxuXG4gIHVwZGF0ZVdlYlByZWZpeChkb21haW46IHN0cmluZywgZGF0YTogV2ViUHJlZml4SW5mbyk6IFByb21pc2U8VXBkYXRlZFdlYlByZWZpeFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS93ZWJfcHJlZml4YCwge30sIHsgcXVlcnk6IGB3ZWJfcHJlZml4PSR7ZGF0YS53ZWJQcmVmaXh9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZFdlYlByZWZpeFJlc3BvbnNlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24vQXBpUmVzcG9uc2UnO1xuaW1wb3J0IHsgSURvbWFpbkNyZWRlbnRpYWxzIH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9Eb21haW5zJztcbmltcG9ydCB7XG4gIERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VEYXRhLFxuICBEb21haW5DcmVkZW50aWFsc0xpc3QsXG4gIENyZWF0ZWRVcGRhdGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZSxcbiAgRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQsXG4gIERlbGV0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlLFxuICBEb21haW5DcmVkZW50aWFsc1F1ZXJ5LFxuICBEb21haW5DcmVkZW50aWFscyxcbiAgVXBkYXRlRG9tYWluQ3JlZGVudGlhbHNEYXRhXG59IGZyb20gJy4uLy4uL1R5cGVzL0RvbWFpbnMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5DcmVkZW50aWFsc0NsaWVudCBpbXBsZW1lbnRzIElEb21haW5DcmVkZW50aWFscyB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9kb21haW5zLyc7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURvbWFpbkNyZWRlbnRpYWxzTGlzdChcbiAgICByZXNwb25zZTogRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZURhdGFcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNMaXN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHJlc3BvbnNlLmJvZHkuaXRlbXMsXG4gICAgICB0b3RhbENvdW50OiByZXNwb25zZS5ib2R5LnRvdGFsX2NvdW50XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlTWVzc2FnZVJlc3BvbnNlKFxuICAgIHJlc3BvbnNlOiBDcmVhdGVkVXBkYXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlXG4gICAgfSBhcyBEb21haW5DcmVkZW50aWFsc1Jlc3VsdDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEZWxldGVkUmVzcG9uc2UoXG4gICAgcmVzcG9uc2U6RGVsZXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlLFxuICAgICAgc3BlYzogcmVzcG9uc2UuYm9keS5zcGVjXG4gICAgfSBhcyBEb21haW5DcmVkZW50aWFsc1Jlc3VsdDtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IERvbWFpbkNyZWRlbnRpYWxzUXVlcnkpOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy9jcmVkZW50aWFscycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QocmVzIGFzIERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VEYXRhKVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5DcmVkZW50aWFsc1xuICApOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS9jcmVkZW50aWFsc2AsIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VNZXNzYWdlUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICB1cGRhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbHNMb2dpbjogc3RyaW5nLFxuICAgIGRhdGE6IFVwZGF0ZURvbWFpbkNyZWRlbnRpYWxzRGF0YVxuICApOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L2NyZWRlbnRpYWxzLyR7Y3JlZGVudGlhbHNMb2dpbn1gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlTWVzc2FnZVJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgZGVzdHJveShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBjcmVkZW50aWFsc0xvZ2luOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS9jcmVkZW50aWFscy8ke2NyZWRlbnRpYWxzTG9naW59YClcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURlbGV0ZWRSZXNwb25zZShyZXMpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24vQXBpUmVzcG9uc2UnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5pbXBvcnQge1xuICBJRG9tYWluVGFnU3RhdGlzdGljUmVzdWx0LFxuICBJRG9tYWluVGFnc0NsaWVudFxufSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL0RvbWFpbnMnO1xuaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IHsgUmVzb2x1dGlvbiB9IGZyb20gJy4uLy4uL0VudW1zJztcbmltcG9ydCB7XG4gIERvbWFpblRhZ3NJdGVtLFxuICBEb21haW5UYWdzSXRlbUluZm8sXG4gIERvbWFpblRhZ1N0YXRpc3RpY0l0ZW0sXG4gIERvbWFpblRhZ1N0YXRBUElSZXNwb25zZSxcbiAgRG9tYWluVGFnQVBJUmVzcG9uc2VTdGF0c0l0ZW0sXG4gIERvbWFpblRhZ3NMaXN0LFxuICBEb21haW5UYWdzUmVzcG9uc2VEYXRhLFxuICBEb21haW5UYWdzUXVlcnksXG4gIERvbWFpblRhZ3NNZXNzYWdlUmVzLFxuICBEb21haW5UYWdzU3RhdGlzdGljUXVlcnksXG4gIERvbWFpblRhZ0NvdW50cmllc0FnZ3JlZ2F0aW9uLFxuICBEb21haW5UYWdDb3VudHJpZXNBUElSZXNwb25zZSxcbiAgRG9tYWluVGFnUHJvdmlkZXJzQWdncmVnYXRpb24sXG4gIERvbWFpblRhZ1Byb3ZpZGVyc0FQSVJlc3BvbnNlLFxuICBEb21haW5UYWdEZXZpY2VzQWdncmVnYXRpb24sXG4gIERvbWFpblRhZ0RldmljZXNBUElSZXNwb25zZVxufSBmcm9tICcuLi8uLi9UeXBlcy9Eb21haW5zJztcblxuZXhwb3J0IGNsYXNzIERvbWFpblRhZyBpbXBsZW1lbnRzIERvbWFpblRhZ3NJdGVtIHtcbiAgdGFnOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICdmaXJzdC1zZWVuJzogRGF0ZTtcbiAgJ2xhc3Qtc2Vlbic6IERhdGU7XG5cbiAgY29uc3RydWN0b3IodGFnSW5mbzogRG9tYWluVGFnc0l0ZW1JbmZvKSB7XG4gICAgdGhpcy50YWcgPSB0YWdJbmZvLnRhZztcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGFnSW5mby5kZXNjcmlwdGlvbjtcbiAgICB0aGlzWydmaXJzdC1zZWVuJ10gPSBuZXcgRGF0ZSh0YWdJbmZvWydmaXJzdC1zZWVuJ10pO1xuICAgIHRoaXNbJ2xhc3Qtc2VlbiddID0gbmV3IERhdGUodGFnSW5mb1snbGFzdC1zZWVuJ10pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEb21haW5UYWdTdGF0aXN0aWMgaW1wbGVtZW50cyBJRG9tYWluVGFnU3RhdGlzdGljUmVzdWx0IHtcbiAgdGFnOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YXJ0OiBEYXRlO1xuICBlbmQ6IERhdGU7XG4gIHJlc29sdXRpb246IFJlc29sdXRpb247XG4gIHN0YXRzOiBEb21haW5UYWdTdGF0aXN0aWNJdGVtW107XG5cbiAgY29uc3RydWN0b3IodGFnU3RhdGlzdGljSW5mbzogRG9tYWluVGFnU3RhdEFQSVJlc3BvbnNlKSB7XG4gICAgdGhpcy50YWcgPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkudGFnO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkuZGVzY3JpcHRpb247XG4gICAgdGhpcy5zdGFydCA9IG5ldyBEYXRlKHRhZ1N0YXRpc3RpY0luZm8uYm9keS5zdGFydCk7XG4gICAgdGhpcy5lbmQgPSBuZXcgRGF0ZSh0YWdTdGF0aXN0aWNJbmZvLmJvZHkuZW5kKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkucmVzb2x1dGlvbjtcbiAgICB0aGlzLnN0YXRzID0gdGFnU3RhdGlzdGljSW5mby5ib2R5LnN0YXRzLm1hcChmdW5jdGlvbiAoc3RhdDogRG9tYWluVGFnQVBJUmVzcG9uc2VTdGF0c0l0ZW0pIHtcbiAgICAgIGNvbnN0IHJlcyA9IHsgLi4uc3RhdCwgdGltZTogbmV3IERhdGUoc3RhdC50aW1lKSB9O1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5UYWdzQ2xpZW50XG4gIGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxEb21haW5UYWdzTGlzdD5cbiAgaW1wbGVtZW50cyBJRG9tYWluVGFnc0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My8nO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChcbiAgICByZXNwb25zZTogRG9tYWluVGFnc1Jlc3BvbnNlRGF0YSxcbiAgKTogRG9tYWluVGFnc0xpc3Qge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBEb21haW5UYWdzTGlzdDtcbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoKHRhZ0luZm86IERvbWFpblRhZ3NJdGVtSW5mbykgPT4gbmV3IERvbWFpblRhZyh0YWdJbmZvKSk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAndGFnJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVRhZ1N0YXRpc3RpYyhcbiAgICByZXNwb25zZTogRG9tYWluVGFnU3RhdEFQSVJlc3BvbnNlXG4gICk6IElEb21haW5UYWdTdGF0aXN0aWNSZXN1bHQge1xuICAgIHJldHVybiBuZXcgRG9tYWluVGFnU3RhdGlzdGljKHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3QoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogRG9tYWluVGFnc1F1ZXJ5KTogUHJvbWlzZTxEb21haW5UYWdzTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJyksIHF1ZXJ5KTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ3NJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiBuZXcgRG9tYWluVGFnKHJlcy5ib2R5KVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZShkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ3NNZXNzYWdlUmVzPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcpLCBkZXNjcmlwdGlvbilcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgRG9tYWluVGFnc01lc3NhZ2VSZXNcbiAgICAgICk7XG4gIH1cblxuICBkZXN0cm95KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHRhZzogc3RyaW5nXG4gICk6IFByb21pc2U8RG9tYWluVGFnc01lc3NhZ2VSZXM+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0ke2RvbWFpbn0vdGFncy8ke3RhZ31gKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IChcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6IHJlcy5ib2R5Lm1lc3NhZ2UsXG4gICAgICAgICAgc3RhdHVzOiByZXMuc3RhdHVzXG4gICAgICAgIH0gYXMgRG9tYWluVGFnc01lc3NhZ2VSZXMpKTtcbiAgfVxuXG4gIHN0YXRpc3RpYyhkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcsIHF1ZXJ5OiBEb21haW5UYWdzU3RhdGlzdGljUXVlcnkpXG4gICAgOiBQcm9taXNlPERvbWFpblRhZ1N0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnLCAnc3RhdHMnKSwgcXVlcnkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlVGFnU3RhdGlzdGljKHJlcylcbiAgICAgICk7XG4gIH1cblxuICBjb3VudHJpZXMoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdDb3VudHJpZXNBZ2dyZWdhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnLCAnc3RhdHMvYWdncmVnYXRlcy9jb3VudHJpZXMnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBEb21haW5UYWdDb3VudHJpZXNBUElSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgRG9tYWluVGFnQ291bnRyaWVzQWdncmVnYXRpb25cbiAgICAgICk7XG4gIH1cblxuICBwcm92aWRlcnMoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdQcm92aWRlcnNBZ2dyZWdhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnLCAnc3RhdHMvYWdncmVnYXRlcy9wcm92aWRlcnMnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBEb21haW5UYWdQcm92aWRlcnNBUElSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgRG9tYWluVGFnUHJvdmlkZXJzQWdncmVnYXRpb25cbiAgICAgICk7XG4gIH1cblxuICBkZXZpY2VzKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnRGV2aWNlc0FnZ3JlZ2F0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcsICdzdGF0cy9hZ2dyZWdhdGVzL2RldmljZXMnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBEb21haW5UYWdEZXZpY2VzQVBJUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIERvbWFpblRhZ0RldmljZXNBZ2dyZWdhdGlvblxuICAgICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5pbXBvcnQge1xuICBDcmVhdGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlLFxuICBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSxcbiAgQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0LFxuICBEb21haW5UZW1wbGF0ZURhdGEsXG4gIERvbWFpblRlbXBsYXRlc1F1ZXJ5LFxuICBEb21haW5UZW1wbGF0ZVVwZGF0ZURhdGEsXG4gIERvbWFpblRlbXBsYXRlVXBkYXRlVmVyc2lvbkRhdGEsXG4gIERvbWFpblRlbXBsYXRlVmVyc2lvbkRhdGEsXG4gIEdldERvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UsXG4gIExpc3REb21haW5UZW1wbGF0ZXNBUElSZXNwb25zZSxcbiAgTGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdCxcbiAgTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNBUElSZXNwb25zZSxcbiAgTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQsXG4gIE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlLFxuICBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQsXG4gIE5vdGlmaWNhdGlvbkFQSVJlc3BvbnNlLFxuICBOb3RpZmljYXRpb25SZXN1bHQsXG4gIFNob3J0VGVtcGxhdGVWZXJzaW9uLFxuICBUZW1wbGF0ZVF1ZXJ5LFxuICBUZW1wbGF0ZVZlcnNpb24sXG4gIFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSxcbiAgVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdFxufSBmcm9tICcuLi8uLi9UeXBlcy9Eb21haW5zJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4uL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCB7IElEb21haW5UZW1wbGF0ZSwgSURvbWFpblRlbXBsYXRlc0NsaWVudCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvRG9tYWlucyc7XG5cbmV4cG9ydCBjbGFzcyBEb21haW5UZW1wbGF0ZUl0ZW0gaW1wbGVtZW50cyBJRG9tYWluVGVtcGxhdGUge1xuICBuYW1lIDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbiA6IHN0cmluZztcbiAgY3JlYXRlZEF0IDogRGF0ZSB8ICcnO1xuICBjcmVhdGVkQnkgOiBzdHJpbmc7XG4gIGlkIDogc3RyaW5nO1xuICB2ZXJzaW9uPzogVGVtcGxhdGVWZXJzaW9uO1xuICB2ZXJzaW9ucz86IFNob3J0VGVtcGxhdGVWZXJzaW9uW107XG5cbiAgY29uc3RydWN0b3IoZG9tYWluVGVtcGxhdGVGcm9tQVBJOiBJRG9tYWluVGVtcGxhdGUpIHtcbiAgICB0aGlzLm5hbWUgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmNyZWF0ZWRBdCA/IG5ldyBEYXRlKGRvbWFpblRlbXBsYXRlRnJvbUFQSS5jcmVhdGVkQXQpIDogJyc7XG4gICAgdGhpcy5jcmVhdGVkQnkgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuY3JlYXRlZEJ5O1xuICAgIHRoaXMuaWQgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuaWQ7XG5cbiAgICBpZiAoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb24pIHtcbiAgICAgIHRoaXMudmVyc2lvbiA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uO1xuICAgICAgaWYgKGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uLmNyZWF0ZWRBdCkge1xuICAgICAgICB0aGlzLnZlcnNpb24uY3JlYXRlZEF0ID0gbmV3IERhdGUoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb24uY3JlYXRlZEF0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb25zICYmIGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmVyc2lvbnMgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbnMubWFwKCh2ZXJzaW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHsgLi4udmVyc2lvbiB9O1xuICAgICAgICByZXN1bHQuY3JlYXRlZEF0ID0gbmV3IERhdGUodmVyc2lvbi5jcmVhdGVkQXQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpblRlbXBsYXRlc0NsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8TGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdD5cbiAgaW1wbGVtZW50cyBJRG9tYWluVGVtcGxhdGVzQ2xpZW50IHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHN1cGVyKHJlcXVlc3QpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5iYXNlUm91dGUgPSAnL3YzLyc7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQ3JlYXRpb25SZXNwb25zZShkYXRhOiBDcmVhdGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKTogSURvbWFpblRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IERvbWFpblRlbXBsYXRlSXRlbShkYXRhLmJvZHkudGVtcGxhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUNyZWF0aW9uVmVyc2lvblJlc3BvbnNlKFxuICAgIGRhdGE6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlXG4gICk6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0OiBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQgPSB7fSBhcyBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ7XG4gICAgcmVzdWx0LnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHJlc3VsdC5tZXNzYWdlID0gZGF0YS5ib2R5Lm1lc3NhZ2U7XG4gICAgaWYgKGRhdGEuYm9keSAmJiBkYXRhLmJvZHkudGVtcGxhdGUpIHtcbiAgICAgIHJlc3VsdC50ZW1wbGF0ZSA9IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0oZGF0YS5ib2R5LnRlbXBsYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VNdXRhdGlvblJlc3BvbnNlKFxuICAgIGRhdGE6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZVxuICApOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQgPSB7fSBhcyBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIGlmIChkYXRhLmJvZHkgJiYgZGF0YS5ib2R5LnRlbXBsYXRlKSB7XG4gICAgICByZXN1bHQudGVtcGxhdGVOYW1lID0gZGF0YS5ib2R5LnRlbXBsYXRlLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTm90aWZpY2F0aW9uUmVzcG9uc2UoZGF0YTogTm90aWZpY2F0aW9uQVBJUmVzcG9uc2UpOiBOb3RpZmljYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdDogTm90aWZpY2F0aW9uUmVzdWx0ID0ge30gYXMgTm90aWZpY2F0aW9uUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UoXG4gICAgZGF0YTogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2VcbiAgKTogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCA9IHt9IGFzIE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdDtcbiAgICByZXN1bHQuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBkYXRhLmJvZHkubWVzc2FnZTtcbiAgICBpZiAoZGF0YS5ib2R5LnRlbXBsYXRlKSB7XG4gICAgICByZXN1bHQudGVtcGxhdGVOYW1lID0gZGF0YS5ib2R5LnRlbXBsYXRlLm5hbWU7XG4gICAgICByZXN1bHQudGVtcGxhdGVWZXJzaW9uID0geyB0YWc6IGRhdGEuYm9keS50ZW1wbGF0ZS52ZXJzaW9uLnRhZyB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChyZXNwb25zZTogTGlzdERvbWFpblRlbXBsYXRlc0FQSVJlc3BvbnNlKTogTGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQ7XG5cbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoKGQ6IElEb21haW5UZW1wbGF0ZSkgPT4gbmV3IERvbWFpblRlbXBsYXRlSXRlbShkKSk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAncCcpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTGlzdFRlbXBsYXRlVmVyc2lvbnMoXG4gICAgcmVzcG9uc2U6IExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zQVBJUmVzcG9uc2VcbiAgKTogTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc1Jlc3VsdDtcblxuICAgIGRhdGEudGVtcGxhdGUgPSBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKHJlc3BvbnNlLmJvZHkudGVtcGxhdGUpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ3AnKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdChkb21haW46IHN0cmluZywgcXVlcnk/OiBEb21haW5UZW1wbGF0ZXNRdWVyeSk6IFByb21pc2U8TGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMnKSwgcXVlcnkpO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nLCB0ZW1wbGF0ZU5hbWU6IHN0cmluZywgcXVlcnk/OiBUZW1wbGF0ZVF1ZXJ5KTogUHJvbWlzZTxJRG9tYWluVGVtcGxhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEdldERvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0ocmVzLmJvZHkudGVtcGxhdGUpXG4gICAgICApO1xuICB9XG5cbiAgY3JlYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IERvbWFpblRlbXBsYXRlRGF0YVxuICApOiBQcm9taXNlPElEb21haW5UZW1wbGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzJyksIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBDcmVhdGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlQ3JlYXRpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIHVwZGF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZVVwZGF0ZURhdGFcbiAgKTogUHJvbWlzZTxVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUpLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTXV0YXRpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGRlc3Ryb3koZG9tYWluOiBzdHJpbmcsIHRlbXBsYXRlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUpKVxuICAgICAgLnRoZW4oKHJlczogVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTXV0YXRpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGRlc3Ryb3lBbGwoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPE5vdGlmaWNhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMnKSlcbiAgICAgIC50aGVuKChyZXM6IE5vdGlmaWNhdGlvbkFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTm90aWZpY2F0aW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBjcmVhdGVWZXJzaW9uKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nLFxuICAgIGRhdGE6IERvbWFpblRlbXBsYXRlVmVyc2lvbkRhdGFcbiAgKTogUHJvbWlzZTxDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUsICcvdmVyc2lvbnMnKSwgZGF0YSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZUNyZWF0aW9uVmVyc2lvblJlc3BvbnNlKHJlcylcbiAgICAgICk7XG4gIH1cblxuICBnZXRWZXJzaW9uKGRvbWFpbjogc3RyaW5nLCB0ZW1wbGF0ZU5hbWU6IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPElEb21haW5UZW1wbGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zLycsIHRhZykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogR2V0RG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gbmV3IERvbWFpblRlbXBsYXRlSXRlbShyZXMuYm9keS50ZW1wbGF0ZSlcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVWZXJzaW9uKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nLFxuICAgIHRhZzogc3RyaW5nLFxuICAgIGRhdGE6IERvbWFpblRlbXBsYXRlVXBkYXRlVmVyc2lvbkRhdGFcbiAgKTogUHJvbWlzZTxNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucy8nLCB0YWcpLCBkYXRhKVxuICAgICAgLnRoZW4oXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgIChyZXM6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UocmVzKVxuICAgICAgKTtcbiAgfVxuXG4gIGRlc3Ryb3lWZXJzaW9uKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nLFxuICAgIHRhZzogc3RyaW5nXG4gICk6IFByb21pc2U8TXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUsICcvdmVyc2lvbnMvJywgdGFnKSlcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAudGhlbigocmVzOiBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU11dGF0ZVRlbXBsYXRlVmVyc2lvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgbGlzdFZlcnNpb25zKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nLFxuICAgIHF1ZXJ5PzogRG9tYWluVGVtcGxhdGVzUXVlcnlcbiAgKTogUHJvbWlzZTxMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMnLCB0ZW1wbGF0ZU5hbWUsICcvdmVyc2lvbnMnKSwgcXVlcnkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZUxpc3RUZW1wbGF0ZVZlcnNpb25zKHJlcylcbiAgICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IHtcbiAgRXZlbnRzTGlzdCxcbiAgRXZlbnRzUXVlcnksXG4gIEV2ZW50c1Jlc3BvbnNlLFxufSBmcm9tICcuLi9UeXBlcy9FdmVudHMnO1xuXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IElFdmVudENsaWVudCB9IGZyb20gJy4uL0ludGVyZmFjZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudENsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8RXZlbnRzTGlzdD5cbiAgaW1wbGVtZW50cyBJRXZlbnRDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChcbiAgICByZXNwb25zZTogRXZlbnRzUmVzcG9uc2UsXG4gICk6IEV2ZW50c0xpc3Qge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBFdmVudHNMaXN0O1xuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICcvJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBnZXQoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogRXZlbnRzUXVlcnkpIDogUHJvbWlzZTxFdmVudHNMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXModXJsam9pbignL3YzJywgZG9tYWluLCAnZXZlbnRzJyksIHF1ZXJ5KTtcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcblxuaW1wb3J0IHtcbiAgSXBQb29sQ3JlYXRlRGF0YSxcbiAgSXBQb29sQ3JlYXRlUmVzcG9uc2UsXG4gIElwUG9vbENyZWF0ZVJlc3VsdCxcbiAgSXBQb29sRGVsZXRlRGF0YSxcbiAgSXBQb29sTGlzdFJlc3BvbnNlLFxuICBJcFBvb2xMaXN0UmVzdWx0LFxuICBJcFBvb2xNZXNzYWdlUmVzcG9uc2UsXG4gIElwUG9vbE1lc3NhZ2VSZXN1bHQsXG4gIElwUG9vbFVwZGF0ZURhdGEsXG59IGZyb20gJy4uL1R5cGVzL0lQUG9vbHMnO1xuaW1wb3J0IHsgSUlQUG9vbHNDbGllbnQgfSBmcm9tICcuLi9JbnRlcmZhY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBQb29sc0NsaWVudCBpbXBsZW1lbnRzIElJUFBvb2xzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGxpc3QoKTogUHJvbWlzZTxJcFBvb2xMaXN0UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92MS9pcF9wb29scycpXG4gICAgICAudGhlbigocmVzcG9uc2U6IElwUG9vbExpc3RSZXNwb25zZSkgPT4gdGhpcy5wYXJzZUlwUG9vbHNSZXNwb25zZShyZXNwb25zZSkpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKGRhdGE6IElwUG9vbENyZWF0ZURhdGEpOiBQcm9taXNlPElwUG9vbENyZWF0ZVJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBJcFBvb2xDcmVhdGVSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKCcvdjEvaXBfcG9vbHMnLCBkYXRhKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShwb29sSWQ6IHN0cmluZywgZGF0YTogSXBQb29sVXBkYXRlRGF0YSk6IFByb21pc2U8SXBQb29sTWVzc2FnZVJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBJcFBvb2xNZXNzYWdlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QucGF0Y2hXaXRoRkQoYC92MS9pcF9wb29scy8ke3Bvb2xJZH1gLCBkYXRhKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShwb29sSWQ6IHN0cmluZywgZGF0YTogSXBQb29sRGVsZXRlRGF0YSk6IFByb21pc2U8SXBQb29sTWVzc2FnZVJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOklwUG9vbE1lc3NhZ2VSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5kZWxldGUoYC92MS9pcF9wb29scy8ke3Bvb2xJZH1gLCBkYXRhKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VJcFBvb2xzUmVzcG9uc2UocmVzcG9uc2U6IElwUG9vbExpc3RSZXNwb25zZSk6IElwUG9vbExpc3RSZXN1bHQge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG59XG4iLCJpbXBvcnQgTWdSZXF1ZXN0IGZyb20gJy4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHsgSXBEYXRhLCBJUHNMaXN0UXVlcnksIElwc0xpc3RSZXNwb25zZUJvZHkgfSBmcm9tICcuLi9UeXBlcy9JUHMnO1xuaW1wb3J0IHsgSUlQc0NsaWVudCB9IGZyb20gJy4uL0ludGVyZmFjZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcHNDbGllbnQgaW1wbGVtZW50cyBJSVBzQ2xpZW50IHtcbiAgcmVxdWVzdDogTWdSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IE1nUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBhc3luYyBsaXN0KHF1ZXJ5PzogSVBzTGlzdFF1ZXJ5KTogUHJvbWlzZTxJcHNMaXN0UmVzcG9uc2VCb2R5PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KCcvdjMvaXBzJywgcXVlcnkpO1xuICAgIHJldHVybiB0aGlzLnBhcnNlSXBzUmVzcG9uc2U8SXBzTGlzdFJlc3BvbnNlQm9keT4ocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgZ2V0KGlwOiBzdHJpbmcpOiBQcm9taXNlPElwRGF0YT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldChgL3YzL2lwcy8ke2lwfWApO1xuICAgIHJldHVybiB0aGlzLnBhcnNlSXBzUmVzcG9uc2U8SXBEYXRhPihyZXNwb25zZSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSXBzUmVzcG9uc2U8VD4ocmVzcG9uc2U6IHsgYm9keTogVCB9KTogVCB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gIH1cbn1cbiIsImltcG9ydCB7IElJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICBJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQXBpUmVzcG9uc2UsXG4gIEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNSZXN1bHQsXG4gIEluYm94UGxhY2VtZW50c1ZhbHVlc0FwaVJlc3BvbnNlLFxuICBJbmJveFBsYWNlbWVudHNWYWx1ZXNSZXN1bHRcbn0gZnJvbSAnLi4vLi4vVHlwZXMvSW5ib3hQbGFjZW1lbnRzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudCBpbXBsZW1lbnRzIElJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcGF0aDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgcGF0aDogc3RyaW5nXG4gICkge1xuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGFzeW5jIGxpc3QoKTogUHJvbWlzZTxJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KHRoaXMucGF0aCkgYXMgSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0FwaVJlc3BvbnNlO1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogcmVzcG9uc2UuYm9keS5pdGVtcyxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgIH0gYXMgSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc1Jlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIGdldChhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPEluYm94UGxhY2VtZW50c1ZhbHVlc1Jlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldChgJHt0aGlzLnBhdGh9LyR7YXR0cmlidXRlTmFtZX1gKSBhcyBJbmJveFBsYWNlbWVudHNWYWx1ZXNBcGlSZXNwb25zZTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzcG9uc2UuYm9keSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0FwaVJlc3BvbnNlLCBJbmJveFBsYWNlbWVudHNGaWx0ZXJzUmVzdWx0IH0gZnJvbSAnLi4vLi4vVHlwZXMvSW5ib3hQbGFjZW1lbnRzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IElJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQgaW1wbGVtZW50cyBJSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHBhdGg6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXF1ZXN0OiBSZXF1ZXN0LFxuICAgIHBhdGg6IHN0cmluZ1xuICApIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gIH1cblxuICBhc3luYyBsaXN0KCk6IFByb21pc2U8SW5ib3hQbGFjZW1lbnRzRmlsdGVyc1Jlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQodGhpcy5wYXRoKSBhcyBJbmJveFBsYWNlbWVudHNGaWx0ZXJzQXBpUmVzcG9uc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgIHN1cHBvcnRlZF9maWx0ZXJzOiByZXN1bHQuYm9keS5zdXBwb3J0ZWRfZmlsdGVyc1xuICAgIH07XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIElJUFJTaGFyaW5nQ2xpZW50LFxuICBJSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudCxcbiAgSUluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQsXG4gIElJbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50LFxuICBJTG9nZ2VyXG59IGZyb20gJy4uLy4uLy4uL0ludGVyZmFjZXMnO1xuXG5pbXBvcnQge1xuICBJbmJveFBsYWNlbWVudHNCb3gsXG4gIEluYm94UGxhY2VtZW50c0Rlc3Ryb3lBUElSZXNwb25zZSxcbiAgSW5ib3hQbGFjZW1lbnRzRGVzdHJveVJlc3VsdCxcbiAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0LFxuICBJbmJveFBsYWNlbWVudHNSZXN1bHRBUElSZXNwb25zZSxcbiAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0QVBJU2hhcGUsXG4gIEluYm94UGxhY2VtZW50c1Jlc3VsdFdpdGhTdGF0dXMsXG4gIEluYm94UGxhY2VtZW50c1Jlc3VsdHNBcGlRdWVyeSxcbiAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0RhdGVzLFxuICBJbmJveFBsYWNlbWVudHNSZXN1bHRzTGlzdCxcbiAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0xpc3RBUElSZXNwb25zZSxcbiAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c1F1ZXJ5XG59IGZyb20gJy4uLy4uLy4uL1R5cGVzL0luYm94UGxhY2VtZW50cyc7XG5cbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4uLy4uL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uLy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8SW5ib3hQbGFjZW1lbnRzUmVzdWx0c0xpc3Q+XG4gIGltcGxlbWVudHMgSUluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwdWJsaWMgYXR0cmlidXRlczogSUluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQ7XG4gIHB1YmxpYyBmaWx0ZXJzOiBJSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudDtcbiAgcHVibGljIHNoYXJpbmc6IElJUFJTaGFyaW5nQ2xpZW50O1xuICBwcml2YXRlIGxvZ2dlcjogSUxvZ2dlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXF1ZXN0OiBSZXF1ZXN0LFxuICAgIGF0dHJpYnV0ZXM6IElJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50LFxuICAgIGZpbHRlcnM6IElJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50LFxuICAgIHNoYXJpbmc6IElJUFJTaGFyaW5nQ2xpZW50LFxuICAgIGxvZ2dlcjogSUxvZ2dlciA9IGNvbnNvbGVcbiAgKSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xuICAgIHRoaXMuZmlsdGVycyA9IGZpbHRlcnM7XG4gICAgdGhpcy5zaGFyaW5nID0gc2hhcmluZztcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydERhdGVUb1VUQyhrZXk6c3RyaW5nLCBpbnB1dERhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIC8qXG4gICAgICBCZWNhdXNlIFwibmV3IERhdGUoJzIwMjItMTItMjVUMDA6MDA6MDAuMDAwWicpXCIgYmVjb21lcyBcIlN1biBEZWMgMjUgMjAyMiAwMjowMDowMCBHTVQrMDIwMFwiXG4gICAgICAocGx1cyAyIGhvdXJzIGZyb20gdGhlIHRpbWV6b25lKVxuICAgICAgYW5kIGJlY2F1c2UgZm9yIEFQSSwgd2UgbmVlZCB0byBwcm92aWRlIHRoZSBkYXRlIGluIHRoZSBleHBlY3RlZCBmb3JtYXRcbiAgICAgIGV4OiAnVGh1LCAxMyBPY3QgMjAxMSAxODowMjowMCArMDAwMCcuXG4gICAgICBIZXJlIHdlIHRyeSBhdXRvLWNvbnZlcnQgdGhlbSB0byBVVENcbiAgICAqL1xuICAgIHRoaXMubG9nZ2VyLndhcm4oYERhdGU6IFwiJHtpbnB1dERhdGV9XCIgd2FzIGF1dG8tY29udmVydGVkIHRvIFVUQyB0aW1lIHpvbmUuXG5WYWx1ZSBcIiR7aW5wdXREYXRlLnRvSVNPU3RyaW5nKCl9XCIgd2lsbCBiZSB1c2VkIGZvciByZXF1ZXN0LlxuQ29uc2lkZXIgdXNpbmcgc3RyaW5nIHR5cGUgZm9yIHByb3BlcnR5IFwiJHtrZXl9XCIgdG8gYXZvaWQgYXV0by1jb252ZXJ0aW5nYCk7XG4gICAgcmV0dXJuIGlucHV0RGF0ZS50b0lTT1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlUXVlcnlEYXRhKFxuICAgIHF1ZXJ5RGF0YTogSW5ib3hQbGFjZW1lbnRzUmVzdWx0c1F1ZXJ5XG4gICk6IEluYm94UGxhY2VtZW50c1Jlc3VsdHNBcGlRdWVyeSB7XG4gICAgY29uc3QgcHJvcHNGb3JSZXBsYWNlbWVudCA9IHF1ZXJ5RGF0YSBhcyBJbmJveFBsYWNlbWVudHNSZXN1bHRzRGF0ZXM7XG4gICAgY29uc3QgcmVwbGFjZWRQcm9wcyA9IE9iamVjdC5rZXlzKHByb3BzRm9yUmVwbGFjZW1lbnQpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHByb3AgPSBrZXkgYXMga2V5b2YgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0RhdGVzO1xuICAgICAgaWYgKCEhcHJvcHNGb3JSZXBsYWNlbWVudFtwcm9wXSAmJiB0eXBlb2YgcHJvcHNGb3JSZXBsYWNlbWVudFtwcm9wXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBxdWVyeURhdGFbcHJvcF0gYXMgRGF0ZTtcbiAgICAgICAgYWNjW3Byb3BdID0gdGhpcy5jb252ZXJ0RGF0ZVRvVVRDKHByb3AsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPGtleW9mIEluYm94UGxhY2VtZW50c1Jlc3VsdHNEYXRlcywgc3RyaW5nPik7XG5cbiAgICBjb25zdCByZXN1bHQ6IEluYm94UGxhY2VtZW50c1Jlc3VsdHNBcGlRdWVyeSA9IHtcbiAgICAgIC4uLnF1ZXJ5RGF0YSxcbiAgICAgIC4uLnJlcGxhY2VkUHJvcHNcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHQoZGF0YTogSW5ib3hQbGFjZW1lbnRzUmVzdWx0QVBJU2hhcGUpOiBJbmJveFBsYWNlbWVudHNSZXN1bHQge1xuICAgIGxldCBib3ggPSB7fSBhcyBJbmJveFBsYWNlbWVudHNCb3g7XG5cbiAgICBjb25zdCBoYW5kbGVkU2VlZExpc3REYXRlcyA9IHtcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCksXG4gICAgICB1cGRhdGVkX2F0OiBuZXcgRGF0ZShkYXRhLnVwZGF0ZWRfYXQpLFxuICAgICAgc2hhcmluZ19leHBpcmVzX2F0OiBuZXcgRGF0ZShkYXRhLnNoYXJpbmdfZXhwaXJlc19hdCksXG4gICAgfTtcblxuICAgIGlmIChkYXRhLkJveCkge1xuICAgICAgYm94ID0ge1xuICAgICAgICAuLi5kYXRhLkJveCxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoZGF0YS5Cb3guY3JlYXRlZF9hdCksXG4gICAgICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKGRhdGEuQm94LnVwZGF0ZWRfYXQpLFxuICAgICAgICBsYXN0X3Jlc3VsdF9hdDogbmV3IERhdGUoZGF0YS5Cb3gubGFzdF9yZXN1bHRfYXQpLFxuICAgICAgfTtcbiAgICAgIGRlbGV0ZSAoYm94IGFzIHtJRD86IHN0cmluZ30pLklEO1xuICAgIH1cblxuICAgIGNvbnN0IGluYm94UGxhY2VtZW50c1Jlc3VsdDogSW5ib3hQbGFjZW1lbnRzUmVzdWx0ID0ge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIEJveDogYm94LFxuICAgICAgLi4uaGFuZGxlZFNlZWRMaXN0RGF0ZXMsXG4gICAgICBpZDogZGF0YS5JZCxcbiAgICB9O1xuXG4gICAgZGVsZXRlIChpbmJveFBsYWNlbWVudHNSZXN1bHQgYXMge0lEPzogc3RyaW5nfSkuSUQ7XG5cbiAgICByZXR1cm4gaW5ib3hQbGFjZW1lbnRzUmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChyZXNwb25zZTogSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0xpc3RBUElSZXNwb25zZSk6IEluYm94UGxhY2VtZW50c1Jlc3VsdHNMaXN0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0xpc3Q7XG5cbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoXG4gICAgICAoaXRlbTogSW5ib3hQbGFjZW1lbnRzUmVzdWx0QVBJU2hhcGUpXG4gICAgICAgIDogSW5ib3hQbGFjZW1lbnRzUmVzdWx0ID0+IHRoaXMucHJlcGFyZUluYm94UGxhY2VtZW50c1Jlc3VsdChpdGVtKVxuICAgICk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAnYWRkcmVzcycpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0KHF1ZXJ5OiBJbmJveFBsYWNlbWVudHNSZXN1bHRzUXVlcnkpOiBQcm9taXNlPEluYm94UGxhY2VtZW50c1Jlc3VsdHNMaXN0PiB7XG4gICAgY29uc3QgcXVlcnlEYXRhID0gdGhpcy5wcmVwYXJlUXVlcnlEYXRhKHF1ZXJ5KTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy92NC9pbmJveC9yZXN1bHRzJywgcXVlcnlEYXRhKSBhcyBJbmJveFBsYWNlbWVudHNSZXN1bHRzTGlzdEFQSVJlc3BvbnNlO1xuICAgIHJldHVybiB0aGlzLnBhcnNlTGlzdChyZXNwb25zZSk7XG4gIH1cblxuICBhc3luYyBnZXQoaWQ6IHN0cmluZyk6IFByb21pc2U8SW5ib3hQbGFjZW1lbnRzUmVzdWx0V2l0aFN0YXR1cz4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBJbmJveFBsYWNlbWVudHNSZXN1bHRBUElSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92NC9pbmJveC9yZXN1bHRzLyR7aWR9YCkgYXMgSW5ib3hQbGFjZW1lbnRzUmVzdWx0QVBJUmVzcG9uc2U7XG4gICAgY29uc3QgaW5ib3hQbGFjZW1lbnRSZXN1bHQ6IEluYm94UGxhY2VtZW50c1Jlc3VsdCA9IHRoaXMucHJlcGFyZUluYm94UGxhY2VtZW50c1Jlc3VsdChcbiAgICAgIHJlc3BvbnNlLmJvZHkucmVzdWx0XG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICBpbmJveFBsYWNlbWVudFJlc3VsdFxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZXN0cm95KGlkOiBzdHJpbmcpIDogUHJvbWlzZTxJbmJveFBsYWNlbWVudHNEZXN0cm95UmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjQvaW5ib3gvcmVzdWx0cy8ke2lkfWApIGFzIEluYm94UGxhY2VtZW50c0Rlc3Ryb3lBUElSZXNwb25zZTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldFJlc3VsdEJ5U2hhcmVJZChzaGFyZUlkOiBzdHJpbmcpOiBQcm9taXNlPEluYm94UGxhY2VtZW50c1Jlc3VsdFdpdGhTdGF0dXM+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92NC9pbmJveC9zaGFyaW5nL3B1YmxpYy8ke3NoYXJlSWR9YCkgYXMgSW5ib3hQbGFjZW1lbnRzUmVzdWx0QVBJUmVzcG9uc2U7XG4gICAgY29uc3QgaW5ib3hQbGFjZW1lbnRSZXN1bHQ6IEluYm94UGxhY2VtZW50c1Jlc3VsdCA9IHRoaXMucHJlcGFyZUluYm94UGxhY2VtZW50c1Jlc3VsdChcbiAgICAgIHJlc3BvbnNlLmJvZHkucmVzdWx0XG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICBpbmJveFBsYWNlbWVudFJlc3VsdFxuICAgIH07XG4gIH1cbn1cbiIsImltcG9ydCB7IElJUFJTaGFyaW5nQ2xpZW50IH0gZnJvbSAnLi4vLi4vLi4vSW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICBJUFJTaGFyaW5nQVBJUmVzcG9uc2UsXG4gIElQUlNoYXJpbmdBcGlTaGFwZSxcbiAgSVBSU2hhcmluZ1Jlc3VsdCxcbiAgSVBSU2hhcmluZ1VwZGF0ZUFQSVJlc3BvbnNlLFxuICBJUFJTaGFyaW5nVXBkYXRlRGF0YSxcbiAgSVBSU2hhcmluZ1VwZGF0ZVJlc3VsdFxufSBmcm9tICcuLi8uLi8uLi9UeXBlcy9JbmJveFBsYWNlbWVudHMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJUFJTaGFyaW5nQ2xpZW50IGltcGxlbWVudHMgSUlQUlNoYXJpbmdDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHRTaGFyaW5nKGRhdGE6IElQUlNoYXJpbmdBcGlTaGFwZSk6IElQUlNoYXJpbmdSZXN1bHQge1xuICAgIGNvbnN0IGhhbmRsZWRTZWVkTGlzdERhdGVzID0ge1xuICAgICAgZXhwaXJlc19hdDogbmV3IERhdGUoZGF0YS5leHBpcmVzX2F0KSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0OiBJUFJTaGFyaW5nUmVzdWx0ID0ge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIC4uLmhhbmRsZWRTZWVkTGlzdERhdGVzXG4gICAgfTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBnZXQoaWQ6IHN0cmluZyk6IFByb21pc2U8SVBSU2hhcmluZ1Jlc3VsdCAmIHtzdGF0dXM6IG51bWJlcn0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92NC9pbmJveC9zaGFyaW5nLyR7aWR9YCkgYXMgSVBSU2hhcmluZ0FQSVJlc3BvbnNlO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucHJlcGFyZUluYm94UGxhY2VtZW50c1Jlc3VsdFNoYXJpbmcocmVzcG9uc2UuYm9keS5zaGFyaW5nKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZGF0YTogSVBSU2hhcmluZ1VwZGF0ZURhdGFcbiAgKTogUHJvbWlzZTxJUFJTaGFyaW5nVXBkYXRlUmVzdWx0ICYgeyBzdGF0dXM6IG51bWJlciB9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QucHV0KGAvdjQvaW5ib3gvc2hhcmluZy8ke2lkfWAsIHt9LCB7IHF1ZXJ5OiBgZW5hYmxlZD0ke2RhdGEuZW5hYmxlZH1gIH0pIGFzIElQUlNoYXJpbmdVcGRhdGVBUElSZXNwb25zZTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHRTaGFyaW5nKHJlc3BvbnNlLmJvZHkuc2hhcmluZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3VsdCxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgSUxvZ2dlcixcbiAgSUluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQsXG4gIElTZWVkc0xpc3RzQ2xpZW50LFxuICBJSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudFxufSBmcm9tICcuLi8uLi8uLi9JbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gIFNlZWRMaXN0LFxuICBTZWVkTGlzdEFQSVNoYXBlLFxuICBTZWVkc0xpc3RzQVBJUXVlcnksXG4gIFNlZWRzTGlzdHNBUElRdWVyeURhdGVzLFxuICBTZWVkc0xpc3RzQVBJUmVzcG9uc2UsXG4gIFNlZWRzTGlzdHNDcmVhdGluZ0RhdGEsXG4gIFNlZWRzTGlzdHNRdWVyeSxcbiAgU2VlZHNMaXN0c1Jlc3VsdCxcbiAgU2VlZCxcbiAgU2VlZEFQSVNoYXBlLFxuICBTZWVkc0xpc3RzRGVzdHJveUFwaVJlc3BvbnNlLFxuICBTZWVkc0xpc3RzVXBkYXRpbmdEYXRhLFxuICBTZWVkTGlzdFJlc3VsdCxcbiAgU2VlZExpc3RHZXRBUElSZXNwb25zZSxcbiAgU2VlZExpc3RBUElSZXNwb25zZVxufSBmcm9tICcuLi8uLi8uLi9UeXBlcy9JbmJveFBsYWNlbWVudHMnO1xuaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi4vLi4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWVkc0xpc3RzQ2xpZW50XG4gIGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxTZWVkc0xpc3RzUmVzdWx0PlxuICBpbXBsZW1lbnRzIElTZWVkc0xpc3RzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcHVibGljIGF0dHJpYnV0ZXM6IElJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50O1xuICBwdWJsaWMgZmlsdGVyczogSUluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQ7XG4gIHByaXZhdGUgbG9nZ2VyOiBJTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgYXR0cmlidXRlczogSUluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQsXG4gICAgZmlsdGVyczogSUluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQsXG4gICAgbG9nZ2VyOiBJTG9nZ2VyID0gY29uc29sZVxuICApIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XG4gICAgdGhpcy5maWx0ZXJzID0gZmlsdGVycztcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydERhdGVUb1VUQyhrZXk6c3RyaW5nLCBpbnB1dERhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIC8qXG4gICAgICBCZWNhdXNlIFwibmV3IERhdGUoJzIwMjItMTItMjVUMDA6MDA6MDAuMDAwWicpXCIgYmVjb21lcyBcIlN1biBEZWMgMjUgMjAyMiAwMjowMDowMCBHTVQrMDIwMFwiXG4gICAgICAocGx1cyAyIGhvdXJzIGZyb20gdGhlIHRpbWV6b25lKVxuICAgICAgYW5kIGJlY2F1c2UgZm9yIEFQSSwgd2UgbmVlZCB0byBwcm92aWRlIHRoZSBkYXRlIGluIHRoZSBleHBlY3RlZCBmb3JtYXRcbiAgICAgIGV4OiAnVGh1LCAxMyBPY3QgMjAxMSAxODowMjowMCArMDAwMCcuXG4gICAgICBIZXJlIHdlIHRyeSBhdXRvLWNvbnZlcnQgdGhlbSB0byBVVENcbiAgICAqL1xuICAgIHRoaXMubG9nZ2VyLndhcm4oYERhdGU6IFwiJHtpbnB1dERhdGV9XCIgd2FzIGF1dG8tY29udmVydGVkIHRvIFVUQyB0aW1lIHpvbmUuXG5WYWx1ZSBcIiR7aW5wdXREYXRlLnRvSVNPU3RyaW5nKCl9XCIgd2lsbCBiZSB1c2VkIGZvciByZXF1ZXN0LlxuQ29uc2lkZXIgdXNpbmcgc3RyaW5nIHR5cGUgZm9yIHByb3BlcnR5IFwiJHtrZXl9XCIgdG8gYXZvaWQgYXV0by1jb252ZXJ0aW5nYCk7XG4gICAgcmV0dXJuIGlucHV0RGF0ZS50b0lTT1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlUXVlcnlEYXRhKHF1ZXJ5RGF0YTogU2VlZHNMaXN0c1F1ZXJ5KSA6IFNlZWRzTGlzdHNBUElRdWVyeSB7XG4gICAgY29uc3QgcHJvcHNGb3JSZXBsYWNlbWVudCA9IHF1ZXJ5RGF0YSBhcyBTZWVkc0xpc3RzQVBJUXVlcnlEYXRlcztcbiAgICBjb25zdCByZXBsYWNlZFByb3BzID0gT2JqZWN0LmtleXMocHJvcHNGb3JSZXBsYWNlbWVudCkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgY29uc3QgcHJvcCA9IGtleSBhcyBrZXlvZiBTZWVkc0xpc3RzQVBJUXVlcnlEYXRlcztcbiAgICAgIGlmICghIXByb3BzRm9yUmVwbGFjZW1lbnRbcHJvcF0gJiYgdHlwZW9mIHByb3BzRm9yUmVwbGFjZW1lbnRbcHJvcF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlEYXRhW3Byb3BdIGFzIERhdGU7XG4gICAgICAgIGFjY1twcm9wXSA9IHRoaXMuY29udmVydERhdGVUb1VUQyhwcm9wLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxrZXlvZiBTZWVkc0xpc3RzQVBJUXVlcnlEYXRlcywgc3RyaW5nPik7XG5cbiAgICBjb25zdCByZXN1bHQ6IFNlZWRzTGlzdHNBUElRdWVyeSA9IHtcbiAgICAgIC4uLnF1ZXJ5RGF0YSxcbiAgICAgIC4uLnJlcGxhY2VkUHJvcHNcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVSZXN1bHQoZGF0YTogU2VlZExpc3RBUElSZXNwb25zZSk6IFNlZWRMaXN0UmVzdWx0IHtcbiAgICBsZXQgcmVzdWx0ID0ge30gYXMgU2VlZExpc3RSZXN1bHQ7XG4gICAgY29uc3Qgc2VlZExpc3QgPSB0aGlzLnByZXBhcmVTZWVkTGlzdChkYXRhLmJvZHkpO1xuICAgIHJlc3VsdCA9IHtcbiAgICAgIC4uLnNlZWRMaXN0LFxuICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1c1xuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVNlZWRMaXN0KGRhdGE6IFNlZWRMaXN0QVBJU2hhcGUpOiBTZWVkTGlzdCB7XG4gICAgbGV0IHNlZWRzOiBTZWVkW10gfCBudWxsO1xuXG4gICAgY29uc3QgaGFuZGxlZFNlZWRMaXN0RGF0ZXMgPSB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpLFxuICAgICAgdXBkYXRlZF9hdDogbmV3IERhdGUoZGF0YS51cGRhdGVkX2F0KSxcbiAgICAgIGxhc3RfcmVzdWx0X2F0OiBuZXcgRGF0ZShkYXRhLmxhc3RfcmVzdWx0X2F0KSxcbiAgICB9O1xuXG4gICAgaWYgKGRhdGEuU2VlZHMpIHtcbiAgICAgIHNlZWRzID0gZGF0YS5TZWVkcy5tYXAoKHNlZWRJdGVtOiBTZWVkQVBJU2hhcGUpOiBTZWVkID0+IHtcbiAgICAgICAgbGV0IHNlZWQgPSB7fSBhcyBTZWVkO1xuICAgICAgICBjb25zdCBoYW5kbGVkU2VlZERhdGVzID0ge1xuICAgICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKHNlZWRJdGVtLmNyZWF0ZWRfYXQpLFxuICAgICAgICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKHNlZWRJdGVtLnVwZGF0ZWRfYXQpLFxuICAgICAgICAgIG1heF9lbWFpbF9jb3VudF9oaXRfYXQ6IG5ldyBEYXRlKHNlZWRJdGVtLm1heF9lbWFpbF9jb3VudF9oaXRfYXQpLFxuICAgICAgICAgIGxhc3Rfc2VudF90b19hdDogbmV3IERhdGUoc2VlZEl0ZW0ubGFzdF9zZW50X3RvX2F0KSxcbiAgICAgICAgICBsYXN0X2RlbGl2ZXJlZF9hdDogbmV3IERhdGUoc2VlZEl0ZW0ubGFzdF9kZWxpdmVyZWRfYXQpLFxuICAgICAgICB9O1xuICAgICAgICBzZWVkID0ge1xuICAgICAgICAgIC4uLnNlZWRJdGVtLFxuICAgICAgICAgIC4uLmhhbmRsZWRTZWVkRGF0ZXNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHNlZWQ7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VlZHMgPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNlZWRMaXN0OiBTZWVkTGlzdCA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICBTZWVkczogc2VlZHMsXG4gICAgICAuLi5oYW5kbGVkU2VlZExpc3REYXRlc1xuICAgIH07XG5cbiAgICBkZWxldGUgKHNlZWRMaXN0IGFzIHtJZD86IHN0cmluZ30pLklkO1xuXG4gICAgcmV0dXJuIHNlZWRMaXN0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChyZXNwb25zZTogU2VlZHNMaXN0c0FQSVJlc3BvbnNlKTogU2VlZHNMaXN0c1Jlc3VsdCB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGl0ZW1zOiBbXVxuICAgIH0gYXMgU2VlZHNMaXN0c1Jlc3VsdDtcblxuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zPy5tYXAoXG4gICAgICAoaXRlbTogU2VlZExpc3RBUElTaGFwZSk6IFNlZWRMaXN0ID0+IHRoaXMucHJlcGFyZVNlZWRMaXN0KGl0ZW0pXG4gICAgKTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdhZGRyZXNzJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxpc3QocXVlcnk6IFNlZWRzTGlzdHNRdWVyeSk6IFByb21pc2U8U2VlZHNMaXN0c1Jlc3VsdD4ge1xuICAgIGNvbnN0IHF1ZXJ5RGF0YSA9IHRoaXMucHJlcGFyZVF1ZXJ5RGF0YShxdWVyeSk7XG4gICAgY29uc3QgcmVzcG9uc2U6IFNlZWRzTGlzdHNBUElSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy92NC9pbmJveC9zZWVkbGlzdHMnLCBxdWVyeURhdGEpIGFzIFNlZWRzTGlzdHNBUElSZXNwb25zZTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5wYXJzZUxpc3QocmVzcG9uc2UpLFxuICAgICAgc3RhdHVzOiAyMDBcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPFNlZWRMaXN0UmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFNlZWRMaXN0R2V0QVBJUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KGAvdjQvaW5ib3gvc2VlZGxpc3RzLyR7aWR9YCkgYXMgU2VlZExpc3RHZXRBUElSZXNwb25zZTtcbiAgICBjb25zdCB1cGRhdGVkU2VlZHNMaXN0ID0gdGhpcy5wcmVwYXJlU2VlZExpc3QocmVzcG9uc2UuYm9keS5zZWVkbGlzdCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnVwZGF0ZWRTZWVkc0xpc3QsXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c1xuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGUoZGF0YTogU2VlZHNMaXN0c0NyZWF0aW5nRGF0YSk6IFByb21pc2U8U2VlZExpc3RSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKCcvdjQvaW5ib3gvc2VlZGxpc3RzJywgZGF0YSkgYXMgU2VlZExpc3RBUElSZXNwb25zZTtcbiAgICByZXR1cm4gdGhpcy5wcmVwYXJlUmVzdWx0KHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShpZDogc3RyaW5nLCBkYXRhOiBTZWVkc0xpc3RzVXBkYXRpbmdEYXRhKTogUHJvbWlzZTxTZWVkTGlzdFJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnB1dChgL3Y0L2luYm94L3NlZWRsaXN0cy8ke2lkfWAsIGRhdGEpIGFzIFNlZWRMaXN0QVBJUmVzcG9uc2U7XG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZVJlc3VsdChyZXNwb25zZSk7XG4gIH1cblxuICBhc3luYyBkZXN0cm95KGlkOiBzdHJpbmcpOiBQcm9taXNlPFNlZWRzTGlzdHNEZXN0cm95QXBpUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3Y0L2luYm94L3NlZWRsaXN0cy8ke2lkfWApIGFzIHVua25vd24gYXMgU2VlZHNMaXN0c0Rlc3Ryb3lBcGlSZXNwb25zZTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSUluYm94UGxhY2VtZW50c0NsaWVudCwgSUluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzJztcbmltcG9ydCB7IElTZWVkc0xpc3RzQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9JbmJveFBsYWNlbWVudHMvU2VlZHNMaXN0cy9TZWVkc0xpc3RzQ2xpZW50JztcbmltcG9ydCB7IElJbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL0luYm94UGxhY2VtZW50cy9wcm92aWRlcnMvSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzJztcbmltcG9ydCB7IEluYm94UGxhY2VtZW50c0RhdGEsIEluYm94UGxhY2VtZW50c1Rlc3RSZXN1bHQsIEluYm94UGxhY2VtZW50c1Rlc3RSZXN1bHRBUElSZXNwb25zZSB9IGZyb20gJy4uLy4uL1R5cGVzL0luYm94UGxhY2VtZW50cyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluYm94UGxhY2VtZW50c0NsaWVudCBpbXBsZW1lbnRzIElJbmJveFBsYWNlbWVudHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwdWJsaWMgc2VlZHNMaXN0czogSVNlZWRzTGlzdHNDbGllbnQ7XG4gIHB1YmxpYyByZXN1bHRzOiBJSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudDtcbiAgcHVibGljIHByb3ZpZGVyczogSUluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXF1ZXN0OiBSZXF1ZXN0LFxuICAgIHNlZWRzTGlzdHNDbGllbnQ6IElTZWVkc0xpc3RzQ2xpZW50LFxuICAgIHJlc3VsdHM6IElJbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50LFxuICAgIHByb3ZpZGVyczogSUluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudFxuICApIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuc2VlZHNMaXN0cyA9IHNlZWRzTGlzdHNDbGllbnQ7XG4gICAgdGhpcy5zZWVkc0xpc3RzID0gc2VlZHNMaXN0c0NsaWVudDtcbiAgICB0aGlzLnJlc3VsdHMgPSByZXN1bHRzO1xuICAgIHRoaXMucHJvdmlkZXJzID0gcHJvdmlkZXJzO1xuICB9XG5cbiAgYXN5bmMgcnVuVGVzdChkYXRhOiBJbmJveFBsYWNlbWVudHNEYXRhKTogUHJvbWlzZTxJbmJveFBsYWNlbWVudHNUZXN0UmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdCgnL3Y0L2luYm94L3Rlc3RzJywgZGF0YSkgYXMgSW5ib3hQbGFjZW1lbnRzVGVzdFJlc3VsdEFQSVJlc3BvbnNlO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNwb25zZS5ib2R5LFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICB9O1xuICB9XG59XG4iLCJpbXBvcnQgeyBJSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50IH0gZnJvbSAnLi4vLi4vLi4vSW50ZXJmYWNlcy9JbmJveFBsYWNlbWVudHMvcHJvdmlkZXJzL0luYm94UGxhY2VtZW50c1Byb3ZpZGVycyc7XG5pbXBvcnQge1xuICBJbmJveFBsYWNlbWVudHNQcm92aWRlcixcbiAgSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJBUElTaGFwZSxcbiAgSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzTGlzdCxcbiAgSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzTGlzdEFQSVJlc3BvbnNlXG59IGZyb20gJy4uLy4uLy4uL1R5cGVzL0luYm94UGxhY2VtZW50cyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi8uLi9jb21tb24vUmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudCBpbXBsZW1lbnRzIElJbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwYXRoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVxdWVzdDogUmVxdWVzdCxcbiAgKSB7XG4gICAgdGhpcy5wYXRoID0gJy92NC9pbmJveC9wcm92aWRlcnMnO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTGlzdChcbiAgICByZXNwb25zZTogSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzTGlzdEFQSVJlc3BvbnNlXG4gICk6IEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0xpc3Qge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBJbmJveFBsYWNlbWVudHNQcm92aWRlcnNMaXN0O1xuXG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXMubWFwKFxuICAgICAgKGl0ZW06IEluYm94UGxhY2VtZW50c1Byb3ZpZGVyQVBJU2hhcGUpOiBJbmJveFBsYWNlbWVudHNQcm92aWRlciA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZWRQcm92aWRlckRhdGVzID0ge1xuICAgICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKGl0ZW0uY3JlYXRlZF9hdCksXG4gICAgICAgICAgdXBkYXRlZF9hdDogbmV3IERhdGUoaXRlbS51cGRhdGVkX2F0KSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBJbmJveFBsYWNlbWVudHNQcm92aWRlciA9IHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIC4uLmhhbmRsZWRQcm92aWRlckRhdGVzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0KCk6IFByb21pc2U8SW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzTGlzdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCh0aGlzLnBhdGgpIGFzIEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0xpc3RBUElSZXNwb25zZTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUxpc3QocmVzcG9uc2UpO1xuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHsgTWFpbGd1bkNsaWVudE9wdGlvbnMsIElucHV0Rm9ybURhdGEsIFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi4vVHlwZXMnO1xuXG5pbXBvcnQgRG9tYWluc0NsaWVudCBmcm9tICcuL0RvbWFpbnMvZG9tYWluc0NsaWVudCc7XG5pbXBvcnQgRXZlbnRDbGllbnQgZnJvbSAnLi9FdmVudHMnO1xuaW1wb3J0IFN0YXRzQ2xpZW50IGZyb20gJy4vU3RhdHMvU3RhdHNDbGllbnQnO1xuaW1wb3J0IFN1cHByZXNzaW9uQ2xpZW50IGZyb20gJy4vU3VwcHJlc3Npb25zL1N1cHByZXNzaW9uc0NsaWVudCc7XG5pbXBvcnQgV2ViaG9va3NDbGllbnQgZnJvbSAnLi9XZWJob29rcyc7XG5pbXBvcnQgTWVzc2FnZXNDbGllbnQgZnJvbSAnLi9NZXNzYWdlcyc7XG5pbXBvcnQgUm91dGVzQ2xpZW50IGZyb20gJy4vUm91dGVzJztcbmltcG9ydCBWYWxpZGF0ZUNsaWVudCBmcm9tICcuL1ZhbGlkYXRpb25zL3ZhbGlkYXRlJztcbmltcG9ydCBJcHNDbGllbnQgZnJvbSAnLi9JUHMnO1xuaW1wb3J0IElwUG9vbHNDbGllbnQgZnJvbSAnLi9JUFBvb2xzJztcbmltcG9ydCBNYWlsaW5nTGlzdHNDbGllbnQgZnJvbSAnLi9NYWlsaW5nTGlzdHMvbWFpbGluZ0xpc3RzJztcbmltcG9ydCBNYWlsTGlzdHNNZW1iZXJzIGZyb20gJy4vTWFpbGluZ0xpc3RzL21haWxMaXN0TWVtYmVycyc7XG5pbXBvcnQgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQgZnJvbSAnLi9Eb21haW5zL2RvbWFpbnNDcmVkZW50aWFscyc7XG5pbXBvcnQgTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IGZyb20gJy4vVmFsaWRhdGlvbnMvbXVsdGlwbGVWYWxpZGF0aW9uJztcbmltcG9ydCBEb21haW5UZW1wbGF0ZXNDbGllbnQgZnJvbSAnLi9Eb21haW5zL2RvbWFpbnNUZW1wbGF0ZXMnO1xuaW1wb3J0IERvbWFpblRhZ3NDbGllbnQgZnJvbSAnLi9Eb21haW5zL2RvbWFpbnNUYWdzJztcbmltcG9ydCBTdWJhY2NvdW50c0NsaWVudCBmcm9tICcuL1N1YmFjY291bnRzJztcblxuaW1wb3J0IHtcbiAgSURvbWFpbnNDbGllbnQsXG4gIElXZWJIb29rc0NsaWVudCxcbiAgSU1haWxndW5DbGllbnQsXG4gIElNYWlsaW5nTGlzdHNDbGllbnQsXG4gIElFdmVudENsaWVudCxcbiAgSVN0YXRzQ2xpZW50LFxuICBJU3VwcHJlc3Npb25DbGllbnQsXG4gIElNZXNzYWdlc0NsaWVudCxcbiAgSVJvdXRlc0NsaWVudCxcbiAgSVZhbGlkYXRpb25DbGllbnQsXG4gIElJUHNDbGllbnQsXG4gIElJUFBvb2xzQ2xpZW50LFxuICBJU3ViYWNjb3VudHNDbGllbnQsXG4gIElJbmJveFBsYWNlbWVudHNDbGllbnQsXG59IGZyb20gJy4uL0ludGVyZmFjZXMnO1xuaW1wb3J0IFNlZWRzTGlzdHNDbGllbnQgZnJvbSAnLi9JbmJveFBsYWNlbWVudHMvU2VlZHNMaXN0cy9TZWVkc0xpc3RzQ2xpZW50JztcbmltcG9ydCBJbmJveFBsYWNlbWVudHNDbGllbnQgZnJvbSAnLi9JbmJveFBsYWNlbWVudHMvaW5ib3hQbGFjZW1lbnRzJztcbmltcG9ydCBJbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50IGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzL1Jlc3VsdHMvSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudCc7XG5pbXBvcnQgSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudCBmcm9tICcuL0luYm94UGxhY2VtZW50cy9BdHRyaWJ1dGVzQ2xpZW50JztcbmltcG9ydCBJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50IGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzL0ZpbHRlcnNDbGllbnQnO1xuaW1wb3J0IElQUlNoYXJpbmdDbGllbnQgZnJvbSAnLi9JbmJveFBsYWNlbWVudHMvUmVzdWx0cy9JbmJveFBsYWNlbWVudHNSZXN1bHRzU2hhcmluZ0NsaWVudCc7XG5pbXBvcnQgSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50IGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzL3Byb3ZpZGVycy9JbmJveFBsYWNlbWVudHNQcm92aWRlcnMnO1xuaW1wb3J0IE1ldHJpY3NDbGllbnQgZnJvbSAnLi9NZXRyaWNzL01ldHJpY3NDbGllbnQnO1xuaW1wb3J0IHsgSU1ldHJpY3NDbGllbnQgfSBmcm9tICcuLi9JbnRlcmZhY2VzL01ldHJpY3MvTWV0cmljc0NsaWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxndW5DbGllbnQgaW1wbGVtZW50cyBJTWFpbGd1bkNsaWVudCB7XG4gIHByaXZhdGUgcmVxdWVzdDtcblxuICBwdWJsaWMgZG9tYWluczogSURvbWFpbnNDbGllbnQ7XG4gIHB1YmxpYyB3ZWJob29rczogSVdlYkhvb2tzQ2xpZW50O1xuICBwdWJsaWMgZXZlbnRzOiBJRXZlbnRDbGllbnQ7XG4gIHB1YmxpYyBzdGF0czogSVN0YXRzQ2xpZW50O1xuICBwdWJsaWMgbWV0cmljczogSU1ldHJpY3NDbGllbnQ7XG4gIHB1YmxpYyBzdXBwcmVzc2lvbnM6IElTdXBwcmVzc2lvbkNsaWVudDtcbiAgcHVibGljIG1lc3NhZ2VzOiBJTWVzc2FnZXNDbGllbnQ7XG4gIHB1YmxpYyByb3V0ZXM6IElSb3V0ZXNDbGllbnQ7XG4gIHB1YmxpYyB2YWxpZGF0ZTogSVZhbGlkYXRpb25DbGllbnQ7XG4gIHB1YmxpYyBpcHM6IElJUHNDbGllbnQ7XG4gIHB1YmxpYyBpcF9wb29sczogSUlQUG9vbHNDbGllbnQ7XG4gIHB1YmxpYyBsaXN0czogSU1haWxpbmdMaXN0c0NsaWVudDtcbiAgcHVibGljIHN1YmFjY291bnRzOiBJU3ViYWNjb3VudHNDbGllbnQ7XG4gIHB1YmxpYyBpbmJveFBsYWNlbWVudHM6IElJbmJveFBsYWNlbWVudHNDbGllbnQ7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTWFpbGd1bkNsaWVudE9wdGlvbnMsIGZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhKSB7XG4gICAgY29uc3QgY29uZmlnOiBSZXF1ZXN0T3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9IGFzIFJlcXVlc3RPcHRpb25zO1xuXG4gICAgaWYgKCFjb25maWcudXJsKSB7XG4gICAgICBjb25maWcudXJsID0gJ2h0dHBzOi8vYXBpLm1haWxndW4ubmV0JztcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy51c2VybmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgXCJ1c2VybmFtZVwiIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFjb25maWcua2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBcImtleVwiIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHRoaXMucmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGNvbmZpZywgZm9ybURhdGEpO1xuICAgIGNvbnN0IG1haWxMaXN0c01lbWJlcnMgPSBuZXcgTWFpbExpc3RzTWVtYmVycyh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50ID0gbmV3IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgZG9tYWluVGVtcGxhdGVzQ2xpZW50ID0gbmV3IERvbWFpblRlbXBsYXRlc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IGRvbWFpblRhZ3NDbGllbnQgPSBuZXcgRG9tYWluVGFnc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IG11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCA9IG5ldyBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICBjb25zdCBJbmJveFBsYWNlbWVudHNSZXN1bHRzU2hhcmluZ0NsaWVudCA9IG5ldyBJUFJTaGFyaW5nQ2xpZW50KHRoaXMucmVxdWVzdCk7XG5cbiAgICBjb25zdCBzZWVkc0xpc3RzQXR0cmlidXRlcyA9IG5ldyBJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50KHRoaXMucmVxdWVzdCwgJy92NC9pbmJveC9zZWVkbGlzdHMvYScpO1xuICAgIGNvbnN0IHJlc3VsdHNBdHRyaWJ1dGVzQ2xpZW50ID0gbmV3IEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQodGhpcy5yZXF1ZXN0LCAnL3Y0L2luYm94L3Jlc3VsdHMvYScpO1xuXG4gICAgY29uc3Qgc2VlZHNMaXN0c0ZpbHRlcnNDbGllbnQgPSBuZXcgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCh0aGlzLnJlcXVlc3QsICcvdjQvaW5ib3gvc2VlZGxpc3RzL19maWx0ZXJzJyk7XG4gICAgY29uc3QgcmVzdWx0c0ZpbHRlcnNDbGllbnQgPSBuZXcgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCh0aGlzLnJlcXVlc3QsICcvdjQvaW5ib3gvcmVzdWx0cy9fZmlsdGVycycpO1xuXG4gICAgY29uc3Qgc2VlZHNMaXN0c0NsaWVudCA9IG5ldyBTZWVkc0xpc3RzQ2xpZW50KFxuICAgICAgdGhpcy5yZXF1ZXN0LFxuICAgICAgc2VlZHNMaXN0c0F0dHJpYnV0ZXMsXG4gICAgICBzZWVkc0xpc3RzRmlsdGVyc0NsaWVudFxuICAgICk7XG5cbiAgICBjb25zdCBpbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50ID0gbmV3IEluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQoXG4gICAgICB0aGlzLnJlcXVlc3QsXG4gICAgICByZXN1bHRzQXR0cmlidXRlc0NsaWVudCxcbiAgICAgIHJlc3VsdHNGaWx0ZXJzQ2xpZW50LFxuICAgICAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c1NoYXJpbmdDbGllbnRcbiAgICApO1xuXG4gICAgY29uc3QgaW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50ID0gbmV3IEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudChcbiAgICAgIHRoaXMucmVxdWVzdFxuICAgICk7XG5cbiAgICB0aGlzLmRvbWFpbnMgPSBuZXcgRG9tYWluc0NsaWVudChcbiAgICAgIHRoaXMucmVxdWVzdCxcbiAgICAgIGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50LFxuICAgICAgZG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICAgICAgZG9tYWluVGFnc0NsaWVudFxuICAgICk7XG4gICAgdGhpcy53ZWJob29rcyA9IG5ldyBXZWJob29rc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuZXZlbnRzID0gbmV3IEV2ZW50Q2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5zdGF0cyA9IG5ldyBTdGF0c0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMubWV0cmljcyA9IG5ldyBNZXRyaWNzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5zdXBwcmVzc2lvbnMgPSBuZXcgU3VwcHJlc3Npb25DbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLm1lc3NhZ2VzID0gbmV3IE1lc3NhZ2VzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5yb3V0ZXMgPSBuZXcgUm91dGVzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5pcHMgPSBuZXcgSXBzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5pcF9wb29scyA9IG5ldyBJcFBvb2xzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5saXN0cyA9IG5ldyBNYWlsaW5nTGlzdHNDbGllbnQodGhpcy5yZXF1ZXN0LCBtYWlsTGlzdHNNZW1iZXJzKTtcbiAgICB0aGlzLnZhbGlkYXRlID0gbmV3IFZhbGlkYXRlQ2xpZW50KHRoaXMucmVxdWVzdCwgbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50KTtcbiAgICB0aGlzLnN1YmFjY291bnRzID0gbmV3IFN1YmFjY291bnRzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5pbmJveFBsYWNlbWVudHMgPSBuZXcgSW5ib3hQbGFjZW1lbnRzQ2xpZW50KFxuICAgICAgdGhpcy5yZXF1ZXN0LFxuICAgICAgc2VlZHNMaXN0c0NsaWVudCxcbiAgICAgIGluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQsXG4gICAgICBpbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnQsXG4gICAgKTtcbiAgfVxuXG4gIHNldFN1YmFjY291bnQoc3ViYWNjb3VudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlcXVlc3Q/LnNldFN1YmFjY291bnRIZWFkZXIoc3ViYWNjb3VudElkKTtcbiAgfVxuXG4gIHJlc2V0U3ViYWNjb3VudCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlcXVlc3Q/LnJlc2V0U3ViYWNjb3VudEhlYWRlcigpO1xuICB9XG59XG4iLCJpbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQge1xuICBNYWlsTGlzdE1lbWJlcnNRdWVyeSxcbiAgQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzLFxuICBNYWlsTGlzdE1lbWJlcixcbiAgTXVsdGlwbGVNZW1iZXJzRGF0YSxcbiAgTXVsdGlwbGVNZW1iZXJzUmVxRGF0YSxcbiAgRGVsZXRlZE1lbWJlcixcbiAgQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzUmVxLFxuICBOZXdNdWx0aXBsZU1lbWJlcnNSZXNwb25zZSxcbiAgTWFpbExpc3RNZW1iZXJzUmVzdWx0LFxuICBNYWlsTGlzdE1lbWJlcnNSZXNwb25zZVxufSBmcm9tICcuLi8uLi9UeXBlcy9NYWlsaW5nTGlzdHMnO1xuaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IHsgSU1haWxMaXN0c01lbWJlcnMgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL01haWxpbmdMaXN0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxMaXN0c01lbWJlcnNcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPE1haWxMaXN0TWVtYmVyc1Jlc3VsdD5cbiAgaW1wbGVtZW50cyBJTWFpbExpc3RzTWVtYmVycyB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9saXN0cyc7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQW5kVXBkYXRlRGF0YShkYXRhOiBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnMpIHtcbiAgICBjb25zdCBuZXdEYXRhID0geyAuLi5kYXRhIH07XG5cbiAgICBpZiAodHlwZW9mIGRhdGEudmFycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG5ld0RhdGEudmFycyA9IEpTT04uc3RyaW5naWZ5KG5ld0RhdGEudmFycyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhLnN1YnNjcmliZWQgPT09ICdib29sZWFuJykge1xuICAgICAgbmV3RGF0YS5zdWJzY3JpYmVkID0gZGF0YS5zdWJzY3JpYmVkID8gJ3llcycgOiAnbm8nO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdEYXRhIGFzIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1JlcTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QoXG4gICAgcmVzcG9uc2U6IE1haWxMaXN0TWVtYmVyc1Jlc3BvbnNlLFxuICApOiBNYWlsTGlzdE1lbWJlcnNSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBNYWlsTGlzdE1lbWJlcnNSZXN1bHQ7XG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXM7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAnYWRkcmVzcycpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdE1lbWJlcnMoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBNYWlsTGlzdE1lbWJlcnNRdWVyeVxuICApOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy9wYWdlc2AsIHF1ZXJ5KTtcbiAgfVxuXG4gIGdldE1lbWJlcihtYWlsTGlzdEFkZHJlc3M6IHN0cmluZywgbWFpbExpc3RNZW1iZXJBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzLyR7bWFpbExpc3RNZW1iZXJBZGRyZXNzfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubWVtYmVyIGFzIE1haWxMaXN0TWVtYmVyKTtcbiAgfVxuXG4gIGNyZWF0ZU1lbWJlcihcbiAgICBtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyxcbiAgICBkYXRhOiBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnNcbiAgKTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcj4ge1xuICAgIGNvbnN0IHJlcURhdGEgPSB0aGlzLmNoZWNrQW5kVXBkYXRlRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzYCwgcmVxRGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5tZW1iZXIgYXMgTWFpbExpc3RNZW1iZXIpO1xuICB9XG5cbiAgY3JlYXRlTWVtYmVycyhcbiAgICBtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyxcbiAgICBkYXRhOiBNdWx0aXBsZU1lbWJlcnNEYXRhXG4gICk6IFByb21pc2U8TmV3TXVsdGlwbGVNZW1iZXJzUmVzcG9uc2U+IHtcbiAgICBjb25zdCBuZXdEYXRhOiBNdWx0aXBsZU1lbWJlcnNSZXFEYXRhID0ge1xuICAgICAgbWVtYmVyczogQXJyYXkuaXNBcnJheShkYXRhLm1lbWJlcnMpID8gSlNPTi5zdHJpbmdpZnkoZGF0YS5tZW1iZXJzKSA6IGRhdGEubWVtYmVycyxcbiAgICAgIHVwc2VydDogZGF0YS51cHNlcnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy5qc29uYCwgbmV3RGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSBhcyBOZXdNdWx0aXBsZU1lbWJlcnNSZXNwb25zZSk7XG4gIH1cblxuICB1cGRhdGVNZW1iZXIoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgbWFpbExpc3RNZW1iZXJBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzXG4gICk6IFByb21pc2U8TWFpbExpc3RNZW1iZXI+IHtcbiAgICBjb25zdCByZXFEYXRhID0gdGhpcy5jaGVja0FuZFVwZGF0ZURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzLyR7bWFpbExpc3RNZW1iZXJBZGRyZXNzfWAsIHJlcURhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubWVtYmVyIGFzIE1haWxMaXN0TWVtYmVyKTtcbiAgfVxuXG4gIGRlc3Ryb3lNZW1iZXIobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nKSA6IFByb21pc2U8RGVsZXRlZE1lbWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5IGFzIERlbGV0ZWRNZW1iZXIpO1xuICB9XG59XG4iLCJpbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQge1xuICBMaXN0c1F1ZXJ5LFxuICBDcmVhdGVVcGRhdGVMaXN0LFxuICBEZXN0cm95ZWRMaXN0LFxuICBNYWlsaW5nTGlzdCxcbiAgTWFpbGluZ0xpc3RWYWxpZGF0aW9uQXBpUmVzcG9uc2UsXG4gIFN0YXJ0VmFsaWRhdGlvblJlc3VsdCxcbiAgTWFpbGluZ0xpc3RWYWxpZGF0aW9uUmVzdWx0LFxuICBNYWlsaW5nTGlzdENhbmNlbFZhbGlkYXRpb25SZXN1bHQsXG4gIE1haWxpbmdMaXN0UmVzdWx0LFxuICBNYWlsaW5nTGlzdEFwaVJlc3BvbnNlXG59IGZyb20gJy4uLy4uL1R5cGVzL01haWxpbmdMaXN0cyc7XG5pbXBvcnQgeyBJTWFpbExpc3RzTWVtYmVycyB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvTWFpbGluZ0xpc3RzL01haWxpbmdMaXN0TWVtYmVycyc7XG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuLi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5pbXBvcnQgeyBJTWFpbGluZ0xpc3RzQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxpbmdMaXN0c0NsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8TWFpbGluZ0xpc3RSZXN1bHQ+XG4gIGltcGxlbWVudHMgSU1haWxpbmdMaXN0c0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwdWJsaWMgbWVtYmVyczogSU1haWxMaXN0c01lbWJlcnM7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCwgbWVtYmVyczogSU1haWxMaXN0c01lbWJlcnMpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9saXN0cyc7XG4gICAgdGhpcy5tZW1iZXJzID0gbWVtYmVycztcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VWYWxpZGF0aW9uUmVzdWx0KFxuICAgIHN0YXR1czogbnVtYmVyLFxuICAgIGRhdGE6IE1haWxpbmdMaXN0VmFsaWRhdGlvbkFwaVJlc3BvbnNlXG4gICk6IE1haWxpbmdMaXN0VmFsaWRhdGlvblJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1cyxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0ICogMTAwMCkgLy8gYWRkIG1pbGxpc2Vjb25kIHRvIFVuaXggdGltZXN0YW1wXG4gICAgICB9XG4gICAgfSBhcyBNYWlsaW5nTGlzdFZhbGlkYXRpb25SZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KHJlc3BvbnNlOiBNYWlsaW5nTGlzdEFwaVJlc3BvbnNlKTogTWFpbGluZ0xpc3RSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBNYWlsaW5nTGlzdFJlc3VsdDtcblxuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ2FkZHJlc3MnKTtcbiAgICBkYXRhLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdChxdWVyeT86IExpc3RzUXVlcnkpOiBQcm9taXNlPE1haWxpbmdMaXN0UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXMoYCR7dGhpcy5iYXNlUm91dGV9L3BhZ2VzYCwgcXVlcnkpO1xuICB9XG5cbiAgZ2V0KG1haWxMaXN0QWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IENyZWF0ZVVwZGF0ZUxpc3QpOiBQcm9taXNlPE1haWxpbmdMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHRoaXMuYmFzZVJvdXRlLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgdXBkYXRlKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBkYXRhOiBDcmVhdGVVcGRhdGVMaXN0KTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgZGVzdHJveShtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8RGVzdHJveWVkTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5IGFzIERlc3Ryb3llZExpc3QpO1xuICB9XG5cbiAgdmFsaWRhdGUobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPFN0YXJ0VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L3ZhbGlkYXRlYCwge30pXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+ICh7XG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgICB9KSBhcyBTdGFydFZhbGlkYXRpb25SZXN1bHQpO1xuICB9XG5cbiAgdmFsaWRhdGlvblJlc3VsdChtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8TWFpbGluZ0xpc3RWYWxpZGF0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS92YWxpZGF0ZWApXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlVmFsaWRhdGlvblJlc3VsdChcbiAgICAgICAgICByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgIHJlc3BvbnNlLmJvZHkgYXMgTWFpbGluZ0xpc3RWYWxpZGF0aW9uQXBpUmVzcG9uc2VcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIGNhbmNlbFZhbGlkYXRpb24obWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPE1haWxpbmdMaXN0Q2FuY2VsVmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vdmFsaWRhdGVgKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiAoe1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlXG4gICAgICB9IGFzIE1haWxpbmdMaXN0Q2FuY2VsVmFsaWRhdGlvblJlc3VsdCkpO1xuICB9XG59XG4iLCJpbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9jb21tb24vRXJyb3InO1xuaW1wb3J0IHtcbiAgTWFpbGd1bk1lc3NhZ2VEYXRhLFxuICBNZXNzYWdlc1NlbmRBUElSZXNwb25zZSxcbiAgTWVzc2FnZXNTZW5kUmVzdWx0XG59IGZyb20gJy4uL1R5cGVzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHsgSU1lc3NhZ2VzQ2xpZW50IH0gZnJvbSAnLi4vSW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lc3NhZ2VzQ2xpZW50IGltcGxlbWVudHMgSU1lc3NhZ2VzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZUJvb2xlYW5WYWx1ZXMoZGF0YTogTWFpbGd1bk1lc3NhZ2VEYXRhKTogTWFpbGd1bk1lc3NhZ2VEYXRhIHtcbiAgICBjb25zdCB5ZXNOb1Byb3BlcnRpZXMgPSBuZXcgU2V0KFtcbiAgICAgICdvOnRlc3Rtb2RlJyxcbiAgICAgICd0OnRleHQnLFxuICAgICAgJ286ZGtpbScsXG4gICAgICAnbzp0cmFja2luZycsXG4gICAgICAnbzp0cmFja2luZy1jbGlja3MnLFxuICAgICAgJ286dHJhY2tpbmctb3BlbnMnLFxuICAgICAgJ286cmVxdWlyZS10bHMnLFxuICAgICAgJ286c2tpcC12ZXJpZmljYXRpb24nXG4gICAgXSk7XG5cbiAgICBpZiAoIWRhdGEgfHwgT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKCdNZXNzYWdlIGRhdGEgb2JqZWN0IGNhbiBub3QgYmUgZW1wdHknLCAnTWVzc2FnZSBkYXRhIG9iamVjdCBjYW4gbm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhkYXRhKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBpZiAoeWVzTm9Qcm9wZXJ0aWVzLmhhcyhrZXkpICYmIHR5cGVvZiBkYXRhW2tleV0gPT09ICdib29sZWFuJykge1xuICAgICAgICBhY2Nba2V5XSA9IGRhdGFba2V5XSA/ICd5ZXMnIDogJ25vJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjY1trZXldID0gZGF0YVtrZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBNYWlsZ3VuTWVzc2FnZURhdGEpO1xuICB9XG5cbiAgX3BhcnNlUmVzcG9uc2UocmVzcG9uc2U6IE1lc3NhZ2VzU2VuZEFQSVJlc3BvbnNlKTogTWVzc2FnZXNTZW5kUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZShkb21haW46IHN0cmluZywgZGF0YTogTWFpbGd1bk1lc3NhZ2VEYXRhKTogUHJvbWlzZTxNZXNzYWdlc1NlbmRSZXN1bHQ+IHtcbiAgICBpZiAoZGF0YS5tZXNzYWdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYC92My8ke2RvbWFpbn0vbWVzc2FnZXMubWltZWAsIGRhdGEpXG4gICAgICAgIC50aGVuKHRoaXMuX3BhcnNlUmVzcG9uc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IG1vZGlmaWVkRGF0YSA9IHRoaXMucHJlcGFyZUJvb2xlYW5WYWx1ZXMoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjMvJHtkb21haW59L21lc3NhZ2VzYCwgbW9kaWZpZWREYXRhKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VSZXNwb25zZSk7XG4gIH1cbn1cbiIsImltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IElMb2dnZXIgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL0NvbW1vbic7XG5pbXBvcnQgeyBJTWV0cmljc0NsaWVudCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvTWV0cmljcy9NZXRyaWNzQ2xpZW50JztcbmltcG9ydCB7XG4gIE1ldHJpY3NBUElRdWVyeSwgTWV0cmljc0FQSVJlc3BvbnNlLCBNZXRyaWNzUXVlcnksIE1ldHJpY3NSZXN1bHRcbn0gZnJvbSAnLi4vLi4vVHlwZXMvTWV0cmljcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDbGllbnQgaW1wbGVtZW50cyBJTWV0cmljc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHByaXZhdGUgbG9nZ2VyOiBJTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QsIGxvZ2dlcjogSUxvZ2dlciA9IGNvbnNvbGUpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0RGF0ZVRvVVRDKGtleTpzdHJpbmcsIGlucHV0RGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgLypcbiAgICAgIEJlY2F1c2UgXCJuZXcgRGF0ZSgnMjAyMi0xMi0yNVQwMDowMDowMC4wMDBaJylcIiBiZWNvbWVzIFwiU3VuIERlYyAyNSAyMDIyIDAyOjAwOjAwIEdNVCswMjAwXCJcbiAgICAgIChwbHVzIDIgaG91cnMgZnJvbSB0aGUgdGltZXpvbmUpXG4gICAgICBhbmQgYmVjYXVzZSBmb3IgQVBJLCB3ZSBuZWVkIHRvIHByb3ZpZGUgdGhlIGRhdGUgaW4gdGhlIGV4cGVjdGVkIGZvcm1hdFxuICAgICAgZXg6ICdUaHUsIDEzIE9jdCAyMDExIDE4OjAyOjAwICswMDAwJy5cbiAgICAgIEhlcmUgd2UgdHJ5IGF1dG8tY29udmVydCB0aGVtIHRvIFVUQ1xuICAgICovXG4gICAgdGhpcy5sb2dnZXIud2FybihgRGF0ZTpcIiR7aW5wdXREYXRlfVwiIHdhcyBhdXRvLWNvbnZlcnRlZCB0byBVVEMgdGltZSB6b25lLlxuVmFsdWUgXCIke2lucHV0RGF0ZS50b1VUQ1N0cmluZygpfVwiIHdpbGwgYmUgdXNlZCBmb3IgcmVxdWVzdC5cbkNvbnNpZGVyIHVzaW5nIHN0cmluZyB0eXBlIGZvciBwcm9wZXJ0eSBcIiR7a2V5fVwiIHRvIGF2b2lkIGF1dG8tY29udmVydGluZ2ApO1xuICAgIHJldHVybiBpbnB1dERhdGUudG9VVENTdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVF1ZXJ5KHF1ZXJ5OiBNZXRyaWNzUXVlcnkgfCB1bmRlZmluZWQpOiBNZXRyaWNzQVBJUXVlcnkge1xuICAgIGxldCBzdGFydERhdGU7XG4gICAgbGV0IGVuZERhdGU7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICBjb25zdCBxU3RhcnQgPSBxdWVyeT8uc3RhcnQ7XG4gICAgICBjb25zdCBxRW5kID0gcXVlcnk/LmVuZDtcbiAgICAgIHN0YXJ0RGF0ZSA9IHFTdGFydCBpbnN0YW5jZW9mIERhdGUgPyB0aGlzLmNvbnZlcnREYXRlVG9VVEMoJ3N0YXJ0JywgcVN0YXJ0KSA6IHFTdGFydCA/PyAnJztcbiAgICAgIGVuZERhdGUgPSBxRW5kICYmIHFFbmQgaW5zdGFuY2VvZiBEYXRlID8gdGhpcy5jb252ZXJ0RGF0ZVRvVVRDKCdlbmQnLCBxRW5kKSA6IHFFbmQgPz8gJyc7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogTWV0cmljc0FQSVF1ZXJ5ID0ge1xuICAgICAgLi4ucXVlcnksXG4gICAgICBzdGFydDogc3RhcnREYXRlLFxuICAgICAgZW5kOiBlbmREYXRlXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSZXNwb25zZShyZXNwb25zZTogTWV0cmljc0FQSVJlc3BvbnNlKTogTWV0cmljc1Jlc3VsdCB7XG4gICAgY29uc3QgcmVzQm9keSA9IHJlc3BvbnNlLmJvZHk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gRGF0ZS5wYXJzZShyZXNCb2R5LnN0YXJ0KSA/IG5ldyBEYXRlKHJlc0JvZHkuc3RhcnQpIDogbnVsbDtcbiAgICBjb25zdCBlbmREYXRlID0gRGF0ZS5wYXJzZShyZXNCb2R5LmVuZCkgPyBuZXcgRGF0ZShyZXNCb2R5LmVuZCkgOiBudWxsO1xuICAgIGNvbnN0IHJlc3VsdDogTWV0cmljc1Jlc3VsdCA9IHtcbiAgICAgIC4uLnJlc0JvZHksXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHN0YXJ0OiBzdGFydERhdGUsXG4gICAgICBlbmQ6IGVuZERhdGVcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBnZXRBY2NvdW50KHF1ZXJ5PzogTWV0cmljc1F1ZXJ5KTogUHJvbWlzZTxNZXRyaWNzUmVzdWx0PiB7XG4gICAgY29uc3QgcXVlcnlEYXRhID0gdGhpcy5wcmVwYXJlUXVlcnkocXVlcnkpO1xuICAgIGNvbnN0IHJlc3BvbnNlOiBNZXRyaWNzQVBJUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdCgnL3YxL2FuYWx5dGljcy9tZXRyaWNzJywgcXVlcnlEYXRhKTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXNwb25zZSk7XG4gIH1cblxuICBhc3luYyBnZXRBY2NvdW50VXNhZ2UocXVlcnk/OiBNZXRyaWNzUXVlcnkpOiBQcm9taXNlPE1ldHJpY3NSZXN1bHQ+IHtcbiAgICBjb25zdCBxdWVyeURhdGEgPSB0aGlzLnByZXBhcmVRdWVyeShxdWVyeSk7XG4gICAgY29uc3QgcmVzcG9uc2U6IE1ldHJpY3NBUElSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0KCcvdjEvYW5hbHl0aWNzL3VzYWdlL21ldHJpY3MnLCBxdWVyeURhdGEpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVJvdXRlc0NsaWVudCB9IGZyb20gJy4uL0ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlVXBkYXRlUm91dGVEYXRhLCBEZXN0cm95Um91dGVSZXNwb25zZSwgUm91dGUsIFJvdXRlc0xpc3RRdWVyeSwgVXBkYXRlUm91dGVSZXNwb25zZVxufSBmcm9tICcuLi9UeXBlcy9Sb3V0ZXMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9jb21tb24vUmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlc0NsaWVudCBpbXBsZW1lbnRzIElSb3V0ZXNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgbGlzdChxdWVyeTogUm91dGVzTGlzdFF1ZXJ5KTogUHJvbWlzZTxSb3V0ZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92My9yb3V0ZXMnLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5pdGVtcyk7XG4gIH1cblxuICBnZXQoaWQ6IHN0cmluZyk6IFByb21pc2U8Um91dGU+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3YzL3JvdXRlcy8ke2lkfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkucm91dGUpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IENyZWF0ZVVwZGF0ZVJvdXRlRGF0YSk6IFByb21pc2U8Um91dGU+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92My9yb3V0ZXMnLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5LnJvdXRlKTtcbiAgfVxuXG4gIHVwZGF0ZShpZDogc3RyaW5nLCBkYXRhOiBDcmVhdGVVcGRhdGVSb3V0ZURhdGEpOiBQcm9taXNlPFVwZGF0ZVJvdXRlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRChgL3YzL3JvdXRlcy8ke2lkfWAsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgZGVzdHJveShpZDogc3RyaW5nKTogUHJvbWlzZTxEZXN0cm95Um91dGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjMvcm91dGVzLyR7aWR9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IFN0YXRzUXVlcnksIFN0YXRzT3B0aW9ucyB9IGZyb20gJy4uLy4uL1R5cGVzL1N0YXRzJztcbmltcG9ydCB7IElMb2dnZXIgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL0NvbW1vbic7XG5pbXBvcnQgU3RhdHNDb250YWluZXIgZnJvbSAnLi9TdGF0c0NvbnRhaW5lcic7XG5pbXBvcnQgeyBJU3RhdHNDbGllbnQsIElTdGF0c0NvbnRhaW5lciB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3RhdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0c0NsaWVudCBpbXBsZW1lbnRzIElTdGF0c0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHByaXZhdGUgbG9nZ2VyOiBJTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QsIGxvZ2dlcjogSUxvZ2dlciA9IGNvbnNvbGUpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0RGF0ZVRvVVRDKGtleTpzdHJpbmcsIGlucHV0RGF0ZTogRGF0ZSk6IEFycmF5PHN0cmluZz4ge1xuICAgIC8qXG4gICAgICBCZWNhdXNlIFwibmV3IERhdGUoJzIwMjItMTItMjVUMDA6MDA6MDAuMDAwWicpXCIgYmVjb21lcyBcIlN1biBEZWMgMjUgMjAyMiAwMjowMDowMCBHTVQrMDIwMFwiXG4gICAgICAocGx1cyAyIGhvdXJzIGZyb20gdGhlIHRpbWV6b25lKVxuICAgICAgYW5kIGJlY2F1c2UgZm9yIEFQSSwgd2UgbmVlZCB0byBwcm92aWRlIHRoZSBkYXRlIGluIHRoZSBleHBlY3RlZCBmb3JtYXRcbiAgICAgIGV4OiAnVGh1LCAxMyBPY3QgMjAxMSAxODowMjowMCArMDAwMCcuXG4gICAgICBIZXJlIHdlIHRyeSBhdXRvLWNvbnZlcnQgdGhlbSB0byBVVENcbiAgICAqL1xuICAgIHRoaXMubG9nZ2VyLndhcm4oYERhdGU6XCIke2lucHV0RGF0ZX1cIiB3YXMgYXV0by1jb252ZXJ0ZWQgdG8gVVRDIHRpbWUgem9uZS5cblZhbHVlIFwiJHtpbnB1dERhdGUudG9VVENTdHJpbmcoKX1cIiB3aWxsIGJlIHVzZWQgZm9yIHJlcXVlc3QuXG5Db25zaWRlciB1c2luZyBzdHJpbmcgdHlwZSBmb3IgcHJvcGVydHkgXCIke2tleX1cIiB0byBhdm9pZCBhdXRvLWNvbnZlcnRpbmdgKTtcbiAgICByZXR1cm4gW2tleSwgaW5wdXREYXRlLnRvVVRDU3RyaW5nKCldO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlU2VhcmNoUGFyYW1zKHF1ZXJ5OiBTdGF0c1F1ZXJ5IHwgdW5kZWZpbmVkKTogQXJyYXk8QXJyYXk8c3RyaW5nPj4ge1xuICAgIGxldCBzZWFyY2hQYXJhbXMgPSBbXSBhcyBBcnJheTxBcnJheTxzdHJpbmc+PjtcbiAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhxdWVyeSkubGVuZ3RoKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBPYmplY3QuZW50cmllcyhxdWVyeSkucmVkdWNlKChhcnJheVdpdGhQYWlycywgY3VycmVudFBhaXIpID0+IHtcbiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gY3VycmVudFBhaXI7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCkgeyAvLyBldmVudDogWydkZWxpdmVyZWQnLCAnYWNjZXB0ZWQnXVxuICAgICAgICAgIGNvbnN0IHJlcGVhdGVkUHJvcGVydHkgPSB2YWx1ZS5tYXAoKGl0ZW0pID0+IFtrZXksIGl0ZW1dKTtcbiAgICAgICAgICByZXR1cm4gWy4uLmFycmF5V2l0aFBhaXJzLCAuLi5yZXBlYXRlZFByb3BlcnR5XTsgLy8gW1tldmVudCxkZWxpdmVyZWRdLCBbZXZlbnQsYWNjZXB0ZWRdXVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIGFycmF5V2l0aFBhaXJzLnB1c2godGhpcy5jb252ZXJ0RGF0ZVRvVVRDKGtleSwgdmFsdWUpKTtcbiAgICAgICAgICByZXR1cm4gYXJyYXlXaXRoUGFpcnM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGFycmF5V2l0aFBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnJheVdpdGhQYWlycztcbiAgICAgIH0sIFtdIGFzIEFycmF5PEFycmF5PHN0cmluZz4+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VhcmNoUGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVN0YXRzKHJlc3BvbnNlOiB7IGJvZHk6IFN0YXRzT3B0aW9ucyB9KTogSVN0YXRzQ29udGFpbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0YXRzQ29udGFpbmVyKHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgZ2V0RG9tYWluKGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IFN0YXRzUXVlcnkpOiBQcm9taXNlPElTdGF0c0NvbnRhaW5lcj4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMucHJlcGFyZVNlYXJjaFBhcmFtcyhxdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzJywgZG9tYWluLCAnc3RhdHMvdG90YWwnKSwgc2VhcmNoUGFyYW1zKVxuICAgICAgLnRoZW4odGhpcy5wYXJzZVN0YXRzKTtcbiAgfVxuXG4gIGdldEFjY291bnQocXVlcnk/OiBTdGF0c1F1ZXJ5KTogUHJvbWlzZTxJU3RhdHNDb250YWluZXI+IHtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLnByZXBhcmVTZWFyY2hQYXJhbXMocXVlcnkpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjMvc3RhdHMvdG90YWwnLCBzZWFyY2hQYXJhbXMpXG4gICAgICAudGhlbih0aGlzLnBhcnNlU3RhdHMpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJU3RhdHNDb250YWluZXIgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N0YXRzJztcbmltcG9ydCB7IFN0YXQsIFN0YXRzT3B0aW9ucyB9IGZyb20gJy4uLy4uL1R5cGVzL1N0YXRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdHNDb250YWluZXIgaW1wbGVtZW50cyBJU3RhdHNDb250YWluZXIge1xuICAgIHN0YXJ0OiBEYXRlO1xuICAgIGVuZDogRGF0ZTtcbiAgICByZXNvbHV0aW9uOiBzdHJpbmc7XG4gICAgc3RhdHM6IFN0YXRbXTtcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBTdGF0c09wdGlvbnMpIHtcbiAgICAgIHRoaXMuc3RhcnQgPSBuZXcgRGF0ZShkYXRhLnN0YXJ0KTtcbiAgICAgIHRoaXMuZW5kID0gbmV3IERhdGUoZGF0YS5lbmQpO1xuICAgICAgdGhpcy5yZXNvbHV0aW9uID0gZGF0YS5yZXNvbHV0aW9uO1xuICAgICAgdGhpcy5zdGF0cyA9IGRhdGEuc3RhdHMubWFwKGZ1bmN0aW9uIChzdGF0OiBTdGF0KSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHsgLi4uc3RhdCB9O1xuICAgICAgICByZXMudGltZSA9IG5ldyBEYXRlKHN0YXQudGltZSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IElTdWJhY2NvdW50c0NsaWVudCB9IGZyb20gJy4uL0ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgU3ViYWNjb3VudExpc3RSZXNwb25zZURhdGEsXG4gIFN1YmFjY291bnRSZXNwb25zZURhdGEsXG4gIFN1YmFjY291bnRzUXVlcnksXG59IGZyb20gJy4uL1R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViYWNjb3VudHNDbGllbnQgaW1wbGVtZW50cyBJU3ViYWNjb3VudHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBzdGF0aWMgU1VCQUNDT1VOVF9IRUFERVIgPSAnWC1NYWlsZ3VuLU9uLUJlaGFsZi1PZic7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBsaXN0KHF1ZXJ5PzogU3ViYWNjb3VudHNRdWVyeSk6IFByb21pc2U8U3ViYWNjb3VudExpc3RSZXNwb25zZURhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3Y1L2FjY291bnRzL3N1YmFjY291bnRzJywgcXVlcnkpXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYm9keSk7XG4gIH1cblxuICBnZXQoaWQ6c3RyaW5nKTogUHJvbWlzZTxTdWJhY2NvdW50UmVzcG9uc2VEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92NS9hY2NvdW50cy9zdWJhY2NvdW50cy8ke2lkfWApXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYm9keSk7XG4gIH1cblxuICBjcmVhdGUobmFtZTpzdHJpbmcpOiBQcm9taXNlPFN1YmFjY291bnRSZXNwb25zZURhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92NS9hY2NvdW50cy9zdWJhY2NvdW50cycsIHsgbmFtZSB9KVxuICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLmJvZHkpO1xuICB9XG5cbiAgZW5hYmxlKGlkOnN0cmluZyk6IFByb21pc2U8U3ViYWNjb3VudFJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdChgL3Y1L2FjY291bnRzL3N1YmFjY291bnRzLyR7aWR9L2VuYWJsZWApXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYm9keSk7XG4gIH1cblxuICBkaXNhYmxlKGlkOnN0cmluZyk6IFByb21pc2U8U3ViYWNjb3VudFJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdChgL3Y1L2FjY291bnRzL3N1YmFjY291bnRzLyR7aWR9L2Rpc2FibGVgKVxuICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLmJvZHkpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBTdXBwcmVzc2lvbk1vZGVscyB9IGZyb20gJy4uLy4uL0VudW1zJztcbmltcG9ydCB7IElCb3VuY2UgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucyc7XG5pbXBvcnQgeyBCb3VuY2VEYXRhIH0gZnJvbSAnLi4vLi4vVHlwZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCBTdXBwcmVzc2lvbiBmcm9tICcuL1N1cHByZXNzaW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm91bmNlIGV4dGVuZHMgU3VwcHJlc3Npb24gaW1wbGVtZW50cyBJQm91bmNlIHtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gICAgY29kZTogbnVtYmVyO1xuICAgIGVycm9yOiBzdHJpbmc7XG4gICAgLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG4gICAgY3JlYXRlZF9hdDogRGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IEJvdW5jZURhdGEpIHtcbiAgICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLkJPVU5DRVMpO1xuICAgICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgICAgdGhpcy5jb2RlID0gK2RhdGEuY29kZTtcbiAgICAgIHRoaXMuZXJyb3IgPSBkYXRhLmVycm9yO1xuICAgICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBTdXBwcmVzc2lvbk1vZGVscyB9IGZyb20gJy4uLy4uL0VudW1zJztcbmltcG9ydCB7IElDb21wbGFpbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucyc7XG5pbXBvcnQgeyBDb21wbGFpbnREYXRhIH0gZnJvbSAnLi4vLi4vVHlwZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCBTdXBwcmVzc2lvbiBmcm9tICcuL1N1cHByZXNzaW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tcGxhaW50IGV4dGVuZHMgU3VwcHJlc3Npb24gaW1wbGVtZW50cyBJQ29tcGxhaW50IHtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gICAgLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG4gICAgY3JlYXRlZF9hdDogRGF0ZTtcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBDb21wbGFpbnREYXRhKSB7XG4gICAgICBzdXBlcihTdXBwcmVzc2lvbk1vZGVscy5DT01QTEFJTlRTKTtcbiAgICAgIHRoaXMuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcztcbiAgICAgIHRoaXMuY3JlYXRlZF9hdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgU3VwcHJlc3Npb25Nb2RlbHMgfSBmcm9tICcuLi8uLi9FbnVtcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1cHByZXNzaW9uIHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IodHlwZTogU3VwcHJlc3Npb25Nb2RlbHMpIHtcbiAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi4vY29tbW9uL0Vycm9yJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4uL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCBCb3VuY2UgZnJvbSAnLi9Cb3VuY2UnO1xuaW1wb3J0IENvbXBsYWludCBmcm9tICcuL0NvbXBsYWludCc7XG5pbXBvcnQgVW5zdWJzY3JpYmUgZnJvbSAnLi9VbnN1YnNjcmliZSc7XG5pbXBvcnQgV2hpdGVMaXN0IGZyb20gJy4vV2hpdGVMaXN0JztcbmltcG9ydCBTdXBwcmVzc2lvbiBmcm9tICcuL1N1cHByZXNzaW9uJztcbmltcG9ydCB7XG4gIElCb3VuY2UsXG4gIElDb21wbGFpbnQsXG4gIElTdXBwcmVzc2lvbkNsaWVudCxcbiAgSVVuc3Vic2NyaWJlLFxuICBJV2hpdGVMaXN0XG59IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCB7XG4gIFN1cHByZXNzaW9uTGlzdCxcbiAgU3VwcHJlc3Npb25MaXN0UmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uRGF0YVR5cGUsXG4gIFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhLFxuICBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0LFxuICBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uTGlzdFF1ZXJ5LFxuICBTdXBwcmVzc2lvblJlc3BvbnNlLFxuICBTdXBwcmVzc2lvbkRlc3Ryb3lSZXN1bHQsXG4gIFN1cHByZXNzaW9uRGVzdHJveVJlc3BvbnNlXG59IGZyb20gJy4uLy4uL1R5cGVzL1N1cHByZXNzaW9ucyc7XG5cbmNvbnN0IGNyZWF0ZU9wdGlvbnMgPSB7XG4gIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdXBwcmVzc2lvbkNsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8U3VwcHJlc3Npb25MaXN0PlxuICBpbXBsZW1lbnRzIElTdXBwcmVzc2lvbkNsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIG1vZGVsczogb2JqZWN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubW9kZWxzID0ge1xuICAgICAgYm91bmNlczogQm91bmNlLFxuICAgICAgY29tcGxhaW50czogQ29tcGxhaW50LFxuICAgICAgdW5zdWJzY3JpYmVzOiBVbnN1YnNjcmliZSxcbiAgICAgIHdoaXRlbGlzdHM6IFdoaXRlTGlzdCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChcbiAgICByZXNwb25zZTogU3VwcHJlc3Npb25MaXN0UmVzcG9uc2UsXG4gICAgTW9kZWw6IHtcbiAgICAgIG5ldyhkYXRhOiBTdXBwcmVzc2lvbkRhdGFUeXBlKTpcbiAgICAgIElCb3VuY2UgfCBJQ29tcGxhaW50IHwgSVVuc3Vic2NyaWJlIHwgSVdoaXRlTGlzdFxuICAgIH1cbiAgKTogU3VwcHJlc3Npb25MaXN0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgU3VwcHJlc3Npb25MaXN0O1xuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zPy5tYXAoKGl0ZW0pID0+IG5ldyBNb2RlbChpdGVtKSkgfHwgW107XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAnYWRkcmVzcycpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgX3BhcnNlSXRlbTxUIGV4dGVuZHMgU3VwcHJlc3Npb24+KFxuICAgIGRhdGEgOiBTdXBwcmVzc2lvbkRhdGFUeXBlLFxuICAgIE1vZGVsOiB7XG4gICAgICBuZXcoZGF0YVR5cGU6IFN1cHByZXNzaW9uRGF0YVR5cGUpOlRcbiAgICB9XG4gICk6IFQge1xuICAgIHJldHVybiBuZXcgTW9kZWwoZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdoaXRlTGlzdChcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBkYXRhOiBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YSB8IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhW10sXG4gICAgaXNEYXRhQXJyYXk6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0PiB7XG4gICAgaWYgKGlzRGF0YUFycmF5KSB7XG4gICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgICAnRGF0YSBwcm9wZXJ0eSBzaG91bGQgYmUgYW4gb2JqZWN0JyxcbiAgICAgICAgJ1doaXRlbGlzdFxcJ3MgY3JlYXRpb24gcHJvY2VzcyBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIGNyZWF0aW9ucy4gRGF0YSBwcm9wZXJ0eSBzaG91bGQgYmUgYW4gb2JqZWN0J1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLnBvc3RXaXRoRkQodXJsam9pbigndjMnLCBkb21haW4sICd3aGl0ZWxpc3RzJyksIGRhdGEgYXMgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEpXG4gICAgICAudGhlbih0aGlzLnByZXBhcmVSZXNwb25zZSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVVuc3Vic2NyaWJlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhIHwgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGFbXVxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQ+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgeyAvLyBVc2VyIHByb3ZpZGVkIGFuIGFycmF5XG4gICAgICBjb25zdCBpc0NvbnRhaW5zVGFnID0gZGF0YS5zb21lKCh1bnN1YnNjcmliZTogU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEpID0+IHVuc3Vic2NyaWJlLnRhZyk7XG4gICAgICBpZiAoaXNDb250YWluc1RhZykge1xuICAgICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgICAgICdUYWcgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBjcmVhdGluZyBtdWx0aXBsZSB1bnN1YnNjcmliZXMuJyxcbiAgICAgICAgICAnVGFnIHByb3BlcnR5IGNhbiBiZSB1c2VkIG9ubHkgaWYgb25lIHVuc3Vic2NyaWJlIHByb3ZpZGVkIGFzIHNlY29uZCBhcmd1bWVudCBvZiBjcmVhdGUgbWV0aG9kLiBQbGVhc2UgdXNlIHRhZ3MgaW5zdGVhZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAgIC5wb3N0KHVybGpvaW4oJ3YzJywgZG9tYWluLCAndW5zdWJzY3JpYmVzJyksIEpTT04uc3RyaW5naWZ5KGRhdGEpLCBjcmVhdGVPcHRpb25zKVxuICAgICAgICAudGhlbih0aGlzLnByZXBhcmVSZXNwb25zZSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGE/LnRhZ3MpIHtcbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICdUYWdzIHByb3BlcnR5IHNob3VsZCBub3QgYmUgdXNlZCBmb3IgY3JlYXRpbmcgb25lIHVuc3Vic2NyaWJlLicsXG4gICAgICAgICdUYWdzIHByb3BlcnR5IGNhbiBiZSB1c2VkIGlmIHlvdSBwcm92aWRlcyBhbiBhcnJheSBvZiB1bnN1YnNjcmliZXMgYXMgc2Vjb25kIGFyZ3VtZW50IG9mIGNyZWF0ZSBtZXRob2QuIFBsZWFzZSB1c2UgdGFnIGluc3RlYWQnXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnRhZykpIHtcbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICdUYWcgcHJvcGVydHkgY2FuIG5vdCBiZSBhbiBhcnJheScsXG4gICAgICAgICdQbGVhc2UgdXNlIGFycmF5IG9mIHVuc3Vic2NyaWJlcyBhcyBzZWNvbmQgYXJndW1lbnQgb2YgY3JlYXRlIG1ldGhvZCB0byBiZSBhYmxlIHRvIHByb3ZpZGUgZmV3IHRhZ3MnXG4gICAgICApO1xuICAgIH1cbiAgICAvKiBXZSBuZWVkIEZvcm0gRGF0YSBmb3IgdW5zdWJzY3JpYmVzIGlmIHdlIHdhbnQgdG8gc3VwcG9ydCB0aGUgXCJ0YWdcIiBwcm9wZXJ0eSAqL1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5wb3N0V2l0aEZEKHVybGpvaW4oJ3YzJywgZG9tYWluLCAndW5zdWJzY3JpYmVzJyksIGRhdGEpXG4gICAgICAudGhlbih0aGlzLnByZXBhcmVSZXNwb25zZSk7XG4gIH1cblxuICBwcml2YXRlIGdldE1vZGVsKHR5cGU6IHN0cmluZykge1xuICAgIGlmICh0eXBlIGluIHRoaXMubW9kZWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RlbHNbdHlwZSBhcyBrZXlvZiB0eXBlb2YgdGhpcy5tb2RlbHNdO1xuICAgIH1cbiAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgJ1Vua25vd24gdHlwZSB2YWx1ZScsXG4gICAgICAnVHlwZSBtYXkgYmUgb25seSBvbmUgb2YgW2JvdW5jZXMsIGNvbXBsYWludHMsIHVuc3Vic2NyaWJlcywgd2hpdGVsaXN0c10nXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVJlc3BvbnNlKHJlc3BvbnNlOiBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzcG9uc2UpOiBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlLFxuICAgICAgdHlwZTogcmVzcG9uc2UuYm9keS50eXBlIHx8ICcnLFxuICAgICAgdmFsdWU6IHJlc3BvbnNlLmJvZHkudmFsdWUgfHwgJycsXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c1xuICAgIH07XG4gIH1cblxuICBhc3luYyBsaXN0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBxdWVyeT86IFN1cHByZXNzaW9uTGlzdFF1ZXJ5XG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25MaXN0PiB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLmdldE1vZGVsKHR5cGUpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKHVybGpvaW4oJ3YzJywgZG9tYWluLCB0eXBlKSwgcXVlcnksIG1vZGVsKTtcbiAgfVxuXG4gIGdldChcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgYWRkcmVzczogc3RyaW5nXG4gICk6IFByb21pc2U8SUJvdW5jZSB8IElDb21wbGFpbnQgfCBJVW5zdWJzY3JpYmUgfCBJV2hpdGVMaXN0PiB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLmdldE1vZGVsKHR5cGUpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5nZXQodXJsam9pbigndjMnLCBkb21haW4sIHR5cGUsIGVuY29kZVVSSUNvbXBvbmVudChhZGRyZXNzKSkpXG4gICAgICAudGhlbigocmVzcG9uc2U6IFN1cHByZXNzaW9uUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlSXRlbTx0eXBlb2YgbW9kZWw+KHJlc3BvbnNlLmJvZHksIG1vZGVsKSk7XG4gIH1cblxuICBjcmVhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGRhdGE6IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhIHwgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGFbXVxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQ+IHtcbiAgICB0aGlzLmdldE1vZGVsKHR5cGUpO1xuICAgIC8vIHN1cHBvcnRzIGFkZGluZyBtdWx0aXBsZSBzdXBwcmVzc2lvbnMgYnkgZGVmYXVsdFxuICAgIGxldCBwb3N0RGF0YTtcbiAgICBjb25zdCBpc0RhdGFBcnJheSA9IEFycmF5LmlzQXJyYXkoZGF0YSk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ3doaXRlbGlzdHMnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVXaGl0ZUxpc3QoZG9tYWluLCBkYXRhLCBpc0RhdGFBcnJheSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICd1bnN1YnNjcmliZXMnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVVbnN1YnNjcmliZShkb21haW4sIGRhdGEpO1xuICAgIH1cblxuICAgIGlmICghaXNEYXRhQXJyYXkpIHtcbiAgICAgIHBvc3REYXRhID0gW2RhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3N0RGF0YSA9IFsuLi5kYXRhXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAucG9zdCh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSksIEpTT04uc3RyaW5naWZ5KHBvc3REYXRhKSwgY3JlYXRlT3B0aW9ucylcbiAgICAgIC50aGVuKHRoaXMucHJlcGFyZVJlc3BvbnNlKTtcbiAgfVxuXG4gIGRlc3Ryb3koXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGFkZHJlc3M6IHN0cmluZ1xuICApOiBQcm9taXNlPFN1cHByZXNzaW9uRGVzdHJveVJlc3VsdD4ge1xuICAgIHRoaXMuZ2V0TW9kZWwodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLmRlbGV0ZSh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSwgZW5jb2RlVVJJQ29tcG9uZW50KGFkZHJlc3MpKSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogU3VwcHJlc3Npb25EZXN0cm95UmVzcG9uc2UpID0+ICh7XG4gICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZSxcbiAgICAgICAgdmFsdWU6IHJlc3BvbnNlLmJvZHkudmFsdWUgfHwgJycsXG4gICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLmJvZHkuYWRkcmVzcyB8fCAnJyxcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICAgIH0pKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFN1cHByZXNzaW9uQ2xpZW50O1xuIiwiaW1wb3J0IHsgU3VwcHJlc3Npb25Nb2RlbHMgfSBmcm9tICcuLi8uLi9FbnVtcyc7XG5pbXBvcnQgeyBJVW5zdWJzY3JpYmUgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucyc7XG5pbXBvcnQgeyBVbnN1YnNjcmliZURhdGEgfSBmcm9tICcuLi8uLi9UeXBlcy9TdXBwcmVzc2lvbnMnO1xuXG5pbXBvcnQgU3VwcHJlc3Npb24gZnJvbSAnLi9TdXBwcmVzc2lvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVuc3Vic2NyaWJlIGV4dGVuZHMgU3VwcHJlc3Npb24gaW1wbGVtZW50cyBJVW5zdWJzY3JpYmUge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICB0YWdzOiBzdHJpbmdbXTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbiAgICBjcmVhdGVkX2F0OiBEYXRlO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YTogVW5zdWJzY3JpYmVEYXRhKSB7XG4gICAgICBzdXBlcihTdXBwcmVzc2lvbk1vZGVscy5VTlNVQlNDUklCRVMpO1xuICAgICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgICAgdGhpcy50YWdzID0gZGF0YS50YWdzO1xuICAgICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBTdXBwcmVzc2lvbk1vZGVscyB9IGZyb20gJy4uLy4uL0VudW1zJztcbmltcG9ydCB7IElXaGl0ZUxpc3QgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucyc7XG5pbXBvcnQgeyBXaGl0ZUxpc3REYXRhIH0gZnJvbSAnLi4vLi4vVHlwZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCBTdXBwcmVzc2lvbiBmcm9tICcuL1N1cHByZXNzaW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2hpdGVMaXN0IGV4dGVuZHMgU3VwcHJlc3Npb24gaW1wbGVtZW50cyBJV2hpdGVMaXN0IHtcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIHJlYXNvbjogc3RyaW5nO1xuICAgIGNyZWF0ZWRBdDogRGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFdoaXRlTGlzdERhdGEpIHtcbiAgICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLldISVRFTElTVFMpO1xuICAgICAgdGhpcy52YWx1ZSA9IGRhdGEudmFsdWU7XG4gICAgICB0aGlzLnJlYXNvbiA9IGRhdGEucmVhc29uO1xuICAgICAgdGhpcy5jcmVhdGVkQXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRBdCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24vQXBpUmVzcG9uc2UnO1xuXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQgeyBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9WYWxpZGF0aW9ucyc7XG5pbXBvcnQge1xuICBNdWx0aXBsZVZhbGlkYXRpb25Kb2JSZXN1bHQsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYkRhdGEsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0LFxuICBNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFJlc3BvbnNlLFxuICBNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFF1ZXJ5LFxuICBNdWx0aXBsZVZhbGlkYXRpb25DcmVhdGlvbkRhdGEsXG4gIENyZWF0ZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2IsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YVVwZGF0ZWQsXG4gIENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iXG59IGZyb20gJy4uLy4uL1R5cGVzL1ZhbGlkYXRpb25zL011bHRpcGxlVmFsaWRhdGlvbic7XG5pbXBvcnQgQXR0YWNobWVudHNIYW5kbGVyIGZyb20gJy4uL2NvbW1vbi9BdHRhY2htZW50c0hhbmRsZXInO1xuaW1wb3J0IEFQSUVycm9yIGZyb20gJy4uL2NvbW1vbi9FcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBNdWx0aXBsZVZhbGlkYXRpb25Kb2IgaW1wbGVtZW50cyBNdWx0aXBsZVZhbGlkYXRpb25Kb2JSZXN1bHQge1xuICBjcmVhdGVkQXQ6IERhdGU7XG4gIGlkOiBzdHJpbmc7XG4gIHF1YW50aXR5OiBudW1iZXJcbiAgcmVjb3Jkc1Byb2Nlc3NlZDogbnVtYmVyIHwgbnVsbDtcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIGRvd25sb2FkVXJsPzoge1xuICAgIGNzdjogc3RyaW5nO1xuICAgIGpzb246IHN0cmluZztcbiAgfTtcblxuICByZXNwb25zZVN0YXR1c0NvZGU6IG51bWJlcjtcbiAgc3VtbWFyeT86IHtcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIGNhdGNoQWxsOiBudW1iZXI7XG4gICAgICAgICAgZGVsaXZlcmFibGU6IG51bWJlcjtcbiAgICAgICAgICBkb05vdFNlbmQ6IG51bWJlcjtcbiAgICAgICAgICB1bmRlbGl2ZXJhYmxlOiBudW1iZXI7XG4gICAgICAgICAgdW5rbm93bjogbnVtYmVyO1xuICAgICAgfTtcbiAgICAgIHJpc2s6IHtcbiAgICAgICAgICBoaWdoOiBudW1iZXI7XG4gICAgICAgICAgbG93OiBudW1iZXI7XG4gICAgICAgICAgbWVkaXVtOiBudW1iZXI7XG4gICAgICAgICAgdW5rbm93bjogbnVtYmVyO1xuICAgICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoZGF0YTogTXVsdGlwbGVWYWxpZGF0aW9uSm9iRGF0YSwgcmVzcG9uc2VTdGF0dXNDb2RlOiBudW1iZXIpIHtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCk7XG4gICAgdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgdGhpcy5xdWFudGl0eSA9IGRhdGEucXVhbnRpdHk7XG4gICAgdGhpcy5yZWNvcmRzUHJvY2Vzc2VkID0gZGF0YS5yZWNvcmRzX3Byb2Nlc3NlZDtcbiAgICB0aGlzLnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHRoaXMucmVzcG9uc2VTdGF0dXNDb2RlID0gcmVzcG9uc2VTdGF0dXNDb2RlO1xuICAgIGlmIChkYXRhLmRvd25sb2FkX3VybCkge1xuICAgICAgdGhpcy5kb3dubG9hZFVybCA9IHtcbiAgICAgICAgY3N2OiBkYXRhLmRvd25sb2FkX3VybD8uY3N2LFxuICAgICAgICBqc29uOiBkYXRhLmRvd25sb2FkX3VybD8uanNvblxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGRhdGEuc3VtbWFyeSkge1xuICAgICAgdGhpcy5zdW1tYXJ5ID0ge1xuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBjYXRjaEFsbDogZGF0YS5zdW1tYXJ5LnJlc3VsdC5jYXRjaF9hbGwsXG4gICAgICAgICAgZGVsaXZlcmFibGU6IGRhdGEuc3VtbWFyeS5yZXN1bHQuZGVsaXZlcmFibGUsXG4gICAgICAgICAgZG9Ob3RTZW5kOiBkYXRhLnN1bW1hcnkucmVzdWx0LmRvX25vdF9zZW5kLFxuICAgICAgICAgIHVuZGVsaXZlcmFibGU6IGRhdGEuc3VtbWFyeS5yZXN1bHQudW5kZWxpdmVyYWJsZSxcbiAgICAgICAgICB1bmtub3duOiBkYXRhLnN1bW1hcnkucmVzdWx0LnVua25vd25cbiAgICAgICAgfSxcbiAgICAgICAgcmlzazoge1xuICAgICAgICAgIGhpZ2g6IGRhdGEuc3VtbWFyeS5yaXNrLmhpZ2gsXG4gICAgICAgICAgbG93OiBkYXRhLnN1bW1hcnkucmlzay5sb3csXG4gICAgICAgICAgbWVkaXVtOiBkYXRhLnN1bW1hcnkucmlzay5tZWRpdW0sXG4gICAgICAgICAgdW5rbm93bjogZGF0YS5zdW1tYXJ5LnJpc2sudW5rbm93blxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0PlxuICBpbXBsZW1lbnRzIElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwcml2YXRlIGF0dGFjaG1lbnRzSGFuZGxlcjogQXR0YWNobWVudHNIYW5kbGVyO1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIgPSBuZXcgQXR0YWNobWVudHNIYW5kbGVyKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlc3BvbnNlPFQ+KHJlc3BvbnNlOiBBUElSZXNwb25zZSk6IFQge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlPy5ib2R5XG4gICAgfSBhcyBUO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChyZXNwb25zZTogTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXNwb25zZSlcbiAgICA6IE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQ7XG5cbiAgICBkYXRhLmpvYnMgPSByZXNwb25zZS5ib2R5LmpvYnMubWFwKChqb2IpID0+IG5ldyBNdWx0aXBsZVZhbGlkYXRpb25Kb2Ioam9iLCByZXNwb25zZS5zdGF0dXMpKTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdwaXZvdCcpO1xuICAgIGRhdGEudG90YWwgPSByZXNwb25zZS5ib2R5LnRvdGFsO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0KHF1ZXJ5PzogTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RRdWVyeSk6IFByb21pc2U8TXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TGlzdFdpdGhQYWdlcygnL3Y0L2FkZHJlc3MvdmFsaWRhdGUvYnVsaycsIHF1ZXJ5KTtcbiAgfVxuXG4gIGFzeW5jIGdldChsaXN0SWQ6IHN0cmluZyk6IFByb21pc2U8TXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWApO1xuICAgIHJldHVybiBuZXcgTXVsdGlwbGVWYWxpZGF0aW9uSm9iKHJlc3BvbnNlLmJvZHksIHJlc3BvbnNlLnN0YXR1cyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb0V4cGVjdGVkU2hhcGUoZGF0YTogTXVsdGlwbGVWYWxpZGF0aW9uQ3JlYXRpb25EYXRhKVxuICAgIDogTXVsdGlwbGVWYWxpZGF0aW9uQ3JlYXRpb25EYXRhVXBkYXRlZCB7XG4gICAgbGV0IG11bHRpcGxlVmFsaWRhdGlvbkRhdGE6IE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YVVwZGF0ZWQ7XG4gICAgaWYgKHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzQnVmZmVyKGRhdGEuZmlsZSkpIHtcbiAgICAgIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEgPSB7IG11bHRpcGxlVmFsaWRhdGlvbkZpbGU6IGRhdGEuZmlsZSB9O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEuZmlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEgPSB7IG11bHRpcGxlVmFsaWRhdGlvbkZpbGU6IHsgZGF0YTogZGF0YS5maWxlIH0gfTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzU3RyZWFtKGRhdGEuZmlsZSkpIHtcbiAgICAgIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEgPSB7IG11bHRpcGxlVmFsaWRhdGlvbkZpbGU6IGRhdGEuZmlsZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBtdWx0aXBsZVZhbGlkYXRpb25EYXRhID0geyBtdWx0aXBsZVZhbGlkYXRpb25GaWxlOiBkYXRhLmZpbGUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbXVsdGlwbGVWYWxpZGF0aW9uRGF0YTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShcbiAgICBsaXN0SWQ6IHN0cmluZyxcbiAgICBkYXRhOiBNdWx0aXBsZVZhbGlkYXRpb25DcmVhdGlvbkRhdGFcbiAgKTogUHJvbWlzZTxDcmVhdGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgaWYgKCFkYXRhIHx8ICFkYXRhLmZpbGUpIHtcbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoJ1wiZmlsZVwiIHByb3BlcnR5IGV4cGVjdGVkLicsICdNYWtlIHN1cmUgc2Vjb25kIGFyZ3VtZW50IGhhcyBcImZpbGVcIiBwcm9wZXJ0eS4nKTtcbiAgICB9XG4gICAgY29uc3QgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YSA9IHRoaXMuY29udmVydFRvRXhwZWN0ZWRTaGFwZShkYXRhKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWAsIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlPENyZWF0ZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+KHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3kobGlzdElkOiBzdHJpbmcpOiBQcm9taXNlPENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWApO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlPENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iPihyZXNwb25zZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IElWYWxpZGF0aW9uQ2xpZW50LCBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9WYWxpZGF0aW9ucyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUXVlcnksIFZhbGlkYXRpb25SZXN1bHQsIFZhbGlkYXRpb25SZXNwb25zZSB9IGZyb20gJy4uLy4uL1R5cGVzL1ZhbGlkYXRpb25zJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmFsaWRhdGVDbGllbnQgaW1wbGVtZW50cyBJVmFsaWRhdGlvbkNsaWVudCB7XG4gIHB1YmxpYyBtdWx0aXBsZVZhbGlkYXRpb247XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCwgbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50OiBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLm11bHRpcGxlVmFsaWRhdGlvbiA9IG11bHRpcGxlVmFsaWRhdGlvbkNsaWVudDtcbiAgfVxuXG4gIGFzeW5jIGdldChhZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBxdWVyeTogVmFsaWRhdGlvblF1ZXJ5ID0geyBhZGRyZXNzIH07XG4gICAgY29uc3QgcmVzdWx0OiBWYWxpZGF0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KCcvdjQvYWRkcmVzcy92YWxpZGF0ZScsIHF1ZXJ5KTtcbiAgICByZXR1cm4gcmVzdWx0LmJvZHkgYXMgVmFsaWRhdGlvblJlc3VsdDtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IHsgV2ViaG9va3NJZHMgfSBmcm9tICcuLi9FbnVtcyc7XG5pbXBvcnQgeyBJV2ViSG9va3NDbGllbnQgfSBmcm9tICcuLi9JbnRlcmZhY2VzL1dlYmhvb2tzJztcblxuaW1wb3J0IHtcbiAgV2ViaG9va1ZhbGlkYXRpb25SZXNwb25zZSxcbiAgV2ViaG9va0xpc3QsXG4gIFdlYmhvb2tSZXNwb25zZSxcbiAgV2ViaG9va3NRdWVyeSxcbiAgV2ViaG9va1Jlc3VsdFxufSBmcm9tICcuLi9UeXBlcy9XZWJob29rcyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGNsYXNzIFdlYmhvb2sgaW1wbGVtZW50cyBXZWJob29rUmVzdWx0IHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHVybHM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIHVybDogc3RyaW5nIHwgdW5kZWZpbmVkLCB1cmxzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLnVybHMgPSB1cmxzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYmhvb2tzQ2xpZW50IGltcGxlbWVudHMgSVdlYkhvb2tzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlV2ViaG9va0xpc3QocmVzcG9uc2U6IHsgYm9keTogeyB3ZWJob29rczogV2ViaG9va0xpc3QgfSB9KTogV2ViaG9va0xpc3Qge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5LndlYmhvb2tzO1xuICB9XG5cbiAgX3BhcnNlV2ViaG9va1dpdGhJRChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNwb25zZTogV2ViaG9va1Jlc3BvbnNlKTogV2ViaG9va1Jlc3VsdCB7XG4gICAgICBjb25zdCB3ZWJob29rUmVzcG9uc2UgPSByZXNwb25zZT8uYm9keT8ud2ViaG9vaztcbiAgICAgIGxldCB1cmwgPSB3ZWJob29rUmVzcG9uc2U/LnVybDtcbiAgICAgIGxldCB1cmxzID0gd2ViaG9va1Jlc3BvbnNlPy51cmxzO1xuICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgdXJsID0gdXJscyAmJiB1cmxzLmxlbmd0aFxuICAgICAgICAgID8gdXJsc1swXVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKCghdXJscyB8fCB1cmxzLmxlbmd0aCA9PT0gMCkgJiYgdXJsKSB7XG4gICAgICAgIHVybHMgPSBbdXJsXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgV2ViaG9vayhpZCwgdXJsLCB1cmxzIGFzIHN0cmluZ1tdKTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VXZWJob29rVGVzdChyZXNwb25zZTogeyBib2R5OiB7IGNvZGU6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nIH0gfSlcbiAgOiB7Y29kZTogbnVtYmVyLCBtZXNzYWdlOnN0cmluZ30ge1xuICAgIHJldHVybiB7XG4gICAgICBjb2RlOiByZXNwb25zZS5ib2R5LmNvZGUsXG4gICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2VcbiAgICB9IGFzIFdlYmhvb2tWYWxpZGF0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeTogV2ViaG9va3NRdWVyeSk6IFByb21pc2U8V2ViaG9va0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rTGlzdCk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIGlkOiBXZWJob29rc0lkcyk6IFByb21pc2U8V2ViaG9va1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnLCBpZCkpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxuXG4gIGNyZWF0ZShkb21haW46IHN0cmluZyxcbiAgICBpZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIHRlc3QgPSBmYWxzZSk6IFByb21pc2U8V2ViaG9va1Jlc3VsdCB8IFdlYmhvb2tWYWxpZGF0aW9uUmVzcG9uc2U+IHtcbiAgICBpZiAodGVzdCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkLCAndGVzdCcpLCB7IHVybCB9KVxuICAgICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tUZXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycpLCB7IGlkLCB1cmwgfSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG5cbiAgdXBkYXRlKGRvbWFpbjogc3RyaW5nLCBpZDogc3RyaW5nLCB1cmxWYWx1ZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogUHJvbWlzZTxXZWJob29rUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkKSwgeyB1cmw6IHVybFZhbHVlcyB9KVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cblxuICBkZXN0cm95KGRvbWFpbjogc3RyaW5nLCBpZDogc3RyaW5nKSA6IFByb21pc2U8V2ViaG9va1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnLCBpZCkpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgQ3VzdG9tRmlsZSwgQ3VzdG9tRmlsZURhdGEgfSBmcm9tICcuLi8uLi9UeXBlcyc7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9FcnJvcic7XG5pbXBvcnQgeyBBdHRhY2htZW50SW5mbywgU3RyZWFtVmFsdWUgfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24vQXR0YWNobWVudHMnO1xuXG5jbGFzcyBCbG9iRnJvbVN0cmVhbSB7XG4gIHByaXZhdGUgX3N0cmVhbTogUmVhZGFibGVcbiAgc2l6ZTogbnVtYmVyXG5cbiAgY29uc3RydWN0b3Ioc3RyZWFtOiBSZWFkYWJsZSwgc2l6ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gIH1cblxuICBzdHJlYW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0cmVhbTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0Jsb2InO1xuICB9XG59XG5cbmNsYXNzIEF0dGFjaG1lbnRzSGFuZGxlciB7XG4gIHByaXZhdGUgZ2V0QXR0YWNobWVudE9wdGlvbnMoaXRlbToge1xuICAgIGZpbGVuYW1lPzogc3RyaW5nO1xuICAgIGNvbnRlbnRUeXBlPyA6IHN0cmluZztcbiAgICBrbm93bkxlbmd0aD86IG51bWJlcjtcbiAgfSk6IEF0dGFjaG1lbnRJbmZvIHtcbiAgICBjb25zdCB7XG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAga25vd25MZW5ndGgsXG4gICAgfSA9IGl0ZW07XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihmaWxlbmFtZSA/IHsgZmlsZW5hbWUgfSA6IHsgZmlsZW5hbWU6ICdmaWxlJyB9KSxcbiAgICAgIC4uLihjb250ZW50VHlwZSAmJiB7IGNvbnRlbnRUeXBlIH0pLFxuICAgICAgLi4uKGtub3duTGVuZ3RoICYmIHsga25vd25MZW5ndGggfSlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWxlSW5mbyhmaWxlOiBGaWxlKSB7IC8vIGJyb3dzZXIgY29tcGxpYW50IGZpbGVcbiAgICBjb25zdCB7XG4gICAgICBuYW1lOiBmaWxlbmFtZSxcbiAgICAgIHR5cGU6IGNvbnRlbnRUeXBlLFxuICAgICAgc2l6ZToga25vd25MZW5ndGgsXG4gICAgfSA9IGZpbGU7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXR0YWNobWVudE9wdGlvbnMoeyBmaWxlbmFtZSwgY29udGVudFR5cGUsIGtub3duTGVuZ3RoIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXN0b21GaWxlSW5mbyhmaWxlOiBDdXN0b21GaWxlKSB7IC8vIGN1c3RvbSBjcmVhdGVkIGZpbGVcbiAgICBjb25zdCB7XG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAga25vd25MZW5ndGgsXG4gICAgfSA9IGZpbGU7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXR0YWNobWVudE9wdGlvbnMoeyBmaWxlbmFtZSwgY29udGVudFR5cGUsIGtub3duTGVuZ3RoIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdWZmZXJJbmZvKGJ1ZmZlcjogQnVmZmVyKSB7XG4gICAgY29uc3Qge1xuICAgICAgYnl0ZUxlbmd0aDoga25vd25MZW5ndGgsXG4gICAgfSA9IGJ1ZmZlcjtcbiAgICByZXR1cm4gdGhpcy5nZXRBdHRhY2htZW50T3B0aW9ucyh7IGZpbGVuYW1lOiAnZmlsZScsIGNvbnRlbnRUeXBlOiAnJywga25vd25MZW5ndGggfSk7XG4gIH1cblxuICBwdWJsaWMgaXNTdHJlYW0oZGF0YTogdW5rbm93bikgOiBkYXRhIGlzIFN0cmVhbVZhbHVlIHtcbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIHR5cGVvZiAoZGF0YSBhcyBTdHJlYW1WYWx1ZSkucGlwZSA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHB1YmxpYyBpc0N1c3RvbUZpbGUob2JqOiB1bmtub3duKTogb2JqIGlzIEN1c3RvbUZpbGUge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0J1xuICAgICAgJiYgISEob2JqIGFzIEN1c3RvbUZpbGUpLmRhdGE7XG4gIH1cblxuICBwdWJsaWMgaXNCcm93c2VyRmlsZShvYmo6IHVua25vd24pOiBvYmogaXMgRmlsZSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICghIShvYmogYXMgRmlsZSkubmFtZSB8fCAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIG9iaiBpbnN0YW5jZW9mIEJsb2IpKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0J1ZmZlcihkYXRhOiB1bmtub3duKTogZGF0YSBpcyBCdWZmZXIge1xuICAgIHJldHVybiB0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBCdWZmZXIuaXNCdWZmZXIoZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXR0YWNobWVudEluZm8oXG4gICAgYXR0YWNobWVudDogQ3VzdG9tRmlsZSB8IEZpbGUgfCBzdHJpbmcgfCBDdXN0b21GaWxlRGF0YVxuICApOiBBdHRhY2htZW50SW5mbyB7XG4gICAgY29uc3QgaXNCcm93c2VyRmlsZSA9IHRoaXMuaXNCcm93c2VyRmlsZShhdHRhY2htZW50KTtcbiAgICBjb25zdCBpc0N1c3RvbUZpbGUgPSB0aGlzLmlzQ3VzdG9tRmlsZShhdHRhY2htZW50KTtcbiAgICBjb25zdCBpc1N0cmluZyA9IHR5cGVvZiBhdHRhY2htZW50ID09PSAnc3RyaW5nJztcbiAgICBpZiAoIWlzU3RyaW5nKSB7XG4gICAgICBpZiAoaXNCcm93c2VyRmlsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWxlSW5mbyhhdHRhY2htZW50IGFzIEZpbGUpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIEJ1ZmZlci5pc0J1ZmZlcihhdHRhY2htZW50KSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXJJbmZvKGF0dGFjaG1lbnQgYXMgQnVmZmVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0N1c3RvbUZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q3VzdG9tRmlsZUluZm8oYXR0YWNobWVudCBhcyBDdXN0b21GaWxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zOiBBdHRhY2htZW50SW5mbyA9IHtcbiAgICAgIGZpbGVuYW1lOiAnZmlsZScsXG4gICAgICBjb250ZW50VHlwZTogdW5kZWZpbmVkLFxuICAgICAga25vd25MZW5ndGg6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgY29udmVydFRvRkRleHBlY3RlZFNoYXBlKFxuICAgIHVzZXJQcm92aWRlZFZhbHVlOiBDdXN0b21GaWxlIHwgRmlsZSB8IHN0cmluZyB8IEN1c3RvbUZpbGVEYXRhXG4gICkge1xuICAgIGNvbnN0IGlzU3RyZWFtID0gdGhpcy5pc1N0cmVhbSh1c2VyUHJvdmlkZWRWYWx1ZSk7XG4gICAgY29uc3QgaXNCcm93c2VyRmlsZSA9IHRoaXMuaXNCcm93c2VyRmlsZSh1c2VyUHJvdmlkZWRWYWx1ZSk7XG4gICAgY29uc3QgaXNDdXN0b21GaWxlID0gdGhpcy5pc0N1c3RvbUZpbGUodXNlclByb3ZpZGVkVmFsdWUpO1xuICAgIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIHVzZXJQcm92aWRlZFZhbHVlID09PSAnc3RyaW5nJztcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmIChpc1N0cmVhbSB8fCBpc1N0cmluZyB8fCBpc0Jyb3dzZXJGaWxlIHx8IHRoaXMuaXNCdWZmZXIodXNlclByb3ZpZGVkVmFsdWUpKSB7XG4gICAgICByZXN1bHQgPSB1c2VyUHJvdmlkZWRWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGlzQ3VzdG9tRmlsZSkge1xuICAgICAgcmVzdWx0ID0gdXNlclByb3ZpZGVkVmFsdWUuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgQVBJRXJyb3IuZ2V0VXNlckRhdGFFcnJvcihcbiAgICAgICAgYFVua25vd24gYXR0YWNobWVudCB0eXBlICR7dHlwZW9mIHVzZXJQcm92aWRlZFZhbHVlfWAsXG4gICAgICAgIGBUaGUgXCJhdHRhY2htZW50XCIgcHJvcGVydHkgZXhwZWN0cyBlaXRoZXIgQnVmZmVyLCBCbG9iLCBvciBTdHJpbmcuXG4gICAgICAgICAgQWxzbywgSXQgaXMgcG9zc2libGUgdG8gcHJvdmlkZSBhbiBvYmplY3QgdGhhdCBoYXMgdGhlIHByb3BlcnR5IFwiZGF0YVwiIHdpdGggYSB2YWx1ZSB0aGF0IGlzIGVxdWFsIHRvIG9uZSBvZiB0aGUgdHlwZXMgY291bnRlZCBiZWZvcmUuXG4gICAgICAgICAgQWRkaXRpb25hbGx5LCB5b3UgbWF5IHVzZSBhbiBhcnJheSB0byBzZW5kIG1vcmUgdGhhbiBvbmUgYXR0YWNobWVudC5gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldEJsb2JGcm9tU3RyZWFtKHN0cmVhbTogUmVhZGFibGUsIHNpemU6IG51bWJlcik6IEJsb2JGcm9tU3RyZWFtIHtcbiAgICByZXR1cm4gbmV3IEJsb2JGcm9tU3RyZWFtKHN0cmVhbSwgc2l6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXR0YWNobWVudHNIYW5kbGVyO1xuIiwiaW1wb3J0IHsgQVBJRXJyb3JPcHRpb25zLCBBUElFcnJvclR5cGUgfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBUElFcnJvciBleHRlbmRzIEVycm9yIGltcGxlbWVudHMgQVBJRXJyb3JUeXBlIHtcbiAgcHVibGljIHN0YXR1czogbnVtYmVyIDtcbiAgcHVibGljIHN0YWNrOiBzdHJpbmc7XG4gIHB1YmxpYyBkZXRhaWxzOiBzdHJpbmc7XG4gIHB1YmxpYyB0eXBlOiBzdHJpbmc7XG5cbiAgcHVibGljIHN0YXRpYyBnZXRVc2VyRGF0YUVycm9yKHN0YXR1c1RleHQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKHtcbiAgICAgIHN0YXR1czogNDAwLFxuICAgICAgc3RhdHVzVGV4dCxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgbWVzc2FnZVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIHN0YXR1cyxcbiAgICBzdGF0dXNUZXh0LFxuICAgIG1lc3NhZ2UsXG4gICAgYm9keSA9IHt9XG4gIH06IEFQSUVycm9yT3B0aW9ucykge1xuICAgIGxldCBib2R5TWVzc2FnZSA9ICcnO1xuICAgIGxldCBlcnJvciA9ICcnO1xuICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJvZHlNZXNzYWdlID0gYm9keTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keU1lc3NhZ2UgPSBib2R5Py5tZXNzYWdlIHx8ICcnO1xuICAgICAgZXJyb3IgPSBib2R5Py5lcnJvciB8fCAnJztcbiAgICB9XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8IGVycm9yIHx8IHN0YXR1c1RleHQgfHwgJyc7XG4gICAgdGhpcy5kZXRhaWxzID0gYm9keU1lc3NhZ2U7XG4gICAgdGhpcy50eXBlID0gJ01haWxndW5BUElFcnJvcic7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIE5vZGVGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgRm9ybURhdGFJbnB1dCwgSW5wdXRGb3JtRGF0YSB9IGZyb20gJy4uLy4uL1R5cGVzL0NvbW1vbic7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9FcnJvcic7XG5cbmltcG9ydCB7XG4gIEN1c3RvbUZpbGUsXG4gIEN1c3RvbUZpbGVEYXRhLFxuICBGb3JtRGF0YUlucHV0VmFsdWUsXG4gIE1lc3NhZ2VBdHRhY2htZW50LFxuICBNaW1lTWVzc2FnZVxufSBmcm9tICcuLi8uLi9UeXBlcyc7XG5pbXBvcnQgQXR0YWNobWVudHNIYW5kbGVyIGZyb20gJy4vQXR0YWNobWVudHNIYW5kbGVyJztcbmltcG9ydCB7IEF0dGFjaG1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vVHlwZXMvQ29tbW9uL0F0dGFjaG1lbnRzJztcblxuY2xhc3MgRm9ybURhdGFCdWlsZGVyIHtcbiAgcHJpdmF0ZSBGb3JtRGF0YUNvbnN0cnVjdG9yOiBJbnB1dEZvcm1EYXRhO1xuICBwcml2YXRlIGZpbGVLZXlzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSBhdHRhY2htZW50c0hhbmRsZXI6IEF0dGFjaG1lbnRzSGFuZGxlcjtcblxuICBjb25zdHJ1Y3RvcihGb3JtRGF0YUNvbnN0cnVjdG9yOiBJbnB1dEZvcm1EYXRhKSB7XG4gICAgdGhpcy5Gb3JtRGF0YUNvbnN0cnVjdG9yID0gRm9ybURhdGFDb25zdHJ1Y3RvcjtcbiAgICB0aGlzLmZpbGVLZXlzID0gWydhdHRhY2htZW50JywgJ2lubGluZScsICdtdWx0aXBsZVZhbGlkYXRpb25GaWxlJ107XG4gICAgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIgPSBuZXcgQXR0YWNobWVudHNIYW5kbGVyKCk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRm9ybURhdGEoZGF0YTogRm9ybURhdGFJbnB1dCk6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHByb3ZpZGUgZGF0YSBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgZm9ybURhdGE6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhID0gT2JqZWN0LmtleXMoZGF0YSlcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZGF0YVtrZXldOyB9KVxuICAgICAgLnJlZHVjZSgoZm9ybURhdGFBY2M6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZUtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRWYWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgICBpZiAodGhpcy5pc01lc3NhZ2VBdHRhY2htZW50KGF0dGFjaG1lbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZXNUb0ZEKGtleSwgYXR0YWNobWVudFZhbHVlLCBmb3JtRGF0YUFjYyk7XG4gICAgICAgICAgICByZXR1cm4gZm9ybURhdGFBY2M7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICAgICBgVW5rbm93biB2YWx1ZSAke2RhdGFba2V5XX0gd2l0aCB0eXBlICR7dHlwZW9mIGRhdGFba2V5XX0gZm9yIHByb3BlcnR5IFwiJHtrZXl9XCJgLFxuICAgICAgICAgICAgYFRoZSBrZXkgXCIke2tleX1cIiBzaG91bGQgaGF2ZSB0eXBlIG9mIEJ1ZmZlciwgU3RyZWFtLCBGaWxlLCBvciBTdHJpbmcgYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAnbWVzc2FnZScpIHsgLy8gbWltZSBtZXNzYWdlXG4gICAgICAgICAgY29uc3QgbWVzc2FnZVZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgIGlmICghbWVzc2FnZVZhbHVlIHx8ICF0aGlzLmlzTUlNRShtZXNzYWdlVmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgICAgICAgICBgVW5rbm93biBkYXRhIHR5cGUgZm9yIFwiJHtrZXl9XCIgcHJvcGVydHlgLFxuICAgICAgICAgICAgICAnVGhlIG1pbWUgZGF0YSBzaG91bGQgaGF2ZSB0eXBlIG9mIEJ1ZmZlciwgU3RyaW5nIG9yIEJsb2InXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFkZE1pbWVEYXRhVG9GRChrZXksIG1lc3NhZ2VWYWx1ZSwgZm9ybURhdGFBY2MpO1xuICAgICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWRkQ29tbW9uUHJvcGVydHlUb0ZEKGtleSwgZGF0YVtrZXldLCBmb3JtRGF0YUFjYyk7XG4gICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgIH0sIG5ldyB0aGlzLkZvcm1EYXRhQ29uc3RydWN0b3IoKSk7XG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNaW1lRGF0YVRvRkQoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZGF0YTogTWltZU1lc3NhZ2UsXG4gICAgZm9ybURhdGFJbnN0YW5jZTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGFcbiAgKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgeyAvLyBpZiBzdHJpbmcgb25seSB0d28gcGFyYW1ldGVycyBzaG91bGQgYmUgdXNlZC5cbiAgICAgIGZvcm1EYXRhSW5zdGFuY2UuYXBwZW5kKGtleSwgZGF0YSBhcyBzdHJpbmcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRm9ybURhdGFQYWNrYWdlKGZvcm1EYXRhSW5zdGFuY2UpKSB7IC8vIGZvcm0tZGF0YSBwYWNrYWdlIGlzIHVzZWRcbiAgICAgIGNvbnN0IG5vZGVGb3JtRGF0YSA9IGZvcm1EYXRhSW5zdGFuY2UgYXMgTm9kZUZvcm1EYXRhO1xuICAgICAgbm9kZUZvcm1EYXRhLmFwcGVuZChrZXksIGRhdGEsIHsgZmlsZW5hbWU6ICdNaW1lTWVzc2FnZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBCbG9iICE9PSB1bmRlZmluZWQpIHsgLy8gZWl0aGVyIG5vZGUgPiAxOCBvciBicm93c2VyXG4gICAgICBjb25zdCBicm93c2VyRm9ybURhdGEgPSBmb3JtRGF0YUluc3RhbmNlIGFzIEZvcm1EYXRhOyAvLyBCcm93c2VyIGNvbXBsaWFudCBGb3JtRGF0YVxuICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgIGJyb3dzZXJGb3JtRGF0YS5hcHBlbmQoa2V5LCBkYXRhLCAnTWltZU1lc3NhZ2UnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzQnVmZmVyKGRhdGEpKSB7IC8vIG5vZGUgZW52aXJvbm1lbnRcbiAgICAgICAgY29uc3QgYmxvYkluc3RhbmNlID0gbmV3IEJsb2IoW2RhdGFdKTtcbiAgICAgICAgYnJvd3NlckZvcm1EYXRhLmFwcGVuZChrZXksIGJsb2JJbnN0YW5jZSwgJ01pbWVNZXNzYWdlJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzTUlNRShkYXRhOiB1bmtub3duKSA6IGRhdGEgaXMgTWltZU1lc3NhZ2Uge1xuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZydcbiAgICAgIHx8ICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgZGF0YSBpbnN0YW5jZW9mIEJsb2IpXG4gICAgICB8fCB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc0J1ZmZlcihkYXRhKVxuICAgICAgfHwgKHR5cGVvZiBSZWFkYWJsZVN0cmVhbSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGF0YSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGb3JtRGF0YVBhY2thZ2Uob2JqOiB1bmtub3duKTogb2JqIGlzIE5vZGVGb3JtRGF0YSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnXG4gICAgICAmJiBvYmogIT09IG51bGxcbiAgICAgICYmIHR5cGVvZiAob2JqIGFzIE5vZGVGb3JtRGF0YSkuZ2V0SGVhZGVycyA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHByaXZhdGUgaXNNZXNzYWdlQXR0YWNobWVudCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIE1lc3NhZ2VBdHRhY2htZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNDdXN0b21GaWxlKHZhbHVlKVxuICAgICAgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgfHwgKHR5cGVvZiBGaWxlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpXG4gICAgICB8fCAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQmxvYilcbiAgICAgIHx8IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzQnVmZmVyKHZhbHVlKVxuICAgICAgfHwgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNTdHJlYW0odmFsdWUpXG4gICAgICB8fCAoXG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KFxuICAgICAgICAgIChpdGVtKSA9PiB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc0N1c3RvbUZpbGUoaXRlbSlcbiAgICAgICAgICAgIHx8ICh0eXBlb2YgRmlsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXRlbSBpbnN0YW5jZW9mIEZpbGUpXG4gICAgICAgICAgICB8fCAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQmxvYilcbiAgICAgICAgICAgIHx8IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzQnVmZmVyKGl0ZW0pXG4gICAgICAgICAgICB8fCB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc1N0cmVhbShpdGVtKVxuICAgICAgICApXG4gICAgICApXG5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRGaWxlc1RvRkQoXG4gICAgcHJvcGVydHlOYW1lOiB0eXBlb2YgdGhpcy5maWxlS2V5c1tudW1iZXJdLFxuICAgIHZhbHVlOiBNZXNzYWdlQXR0YWNobWVudCxcbiAgICBmb3JtRGF0YUluc3RhbmNlOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBhcHBlbmRGaWxlVG9GRCA9IChcbiAgICAgIG9yaWdpbmFsS2V5OiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50OiBDdXN0b21GaWxlIHwgRmlsZSB8IHN0cmluZ3wgQ3VzdG9tRmlsZURhdGEsXG4gICAgICBmb3JtRGF0YTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGFcbiAgICApOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IG9yaWdpbmFsS2V5ID09PSAnbXVsdGlwbGVWYWxpZGF0aW9uRmlsZScgPyAnZmlsZScgOiBvcmlnaW5hbEtleTtcbiAgICAgIGNvbnN0IG9iakRhdGEgPSB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5jb252ZXJ0VG9GRGV4cGVjdGVkU2hhcGUoYXR0YWNobWVudCk7XG4gICAgICBjb25zdCBvcHRpb25zOiBBdHRhY2htZW50SW5mbyA9IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmdldEF0dGFjaG1lbnRJbmZvKGF0dGFjaG1lbnQpO1xuXG4gICAgICBpZiAodGhpcy5pc0Zvcm1EYXRhUGFja2FnZShmb3JtRGF0YSkpIHtcbiAgICAgICAgY29uc3QgZmQgPSBmb3JtRGF0YSBhcyBOb2RlRm9ybURhdGE7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0eXBlb2Ygb2JqRGF0YSA9PT0gJ3N0cmluZycgPyBCdWZmZXIuZnJvbShvYmpEYXRhKSA6IG9iakRhdGE7XG4gICAgICAgIGZkLmFwcGVuZChrZXksIGRhdGEsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgQmxvYiAhPT0gdW5kZWZpbmVkKSB7IC8vIGVpdGhlciBub2RlID4gMTggb3IgYnJvd3NlclxuICAgICAgICBjb25zdCBicm93c2VyRm9ybURhdGEgPSBmb3JtRGF0YUluc3RhbmNlIGFzIEZvcm1EYXRhOyAvLyBCcm93c2VyIGNvbXBsaWFudCBGb3JtRGF0YVxuXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqRGF0YSA9PT0gJ3N0cmluZycgfHwgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNCdWZmZXIob2JqRGF0YSkpIHtcbiAgICAgICAgICBjb25zdCBibG9iSW5zdGFuY2UgPSBuZXcgQmxvYihbb2JqRGF0YV0pO1xuICAgICAgICAgIGJyb3dzZXJGb3JtRGF0YS5hcHBlbmQoa2V5LCBibG9iSW5zdGFuY2UsIG9wdGlvbnMuZmlsZW5hbWUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvYmpEYXRhIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICAgIGJyb3dzZXJGb3JtRGF0YS5hcHBlbmQoa2V5LCBvYmpEYXRhLCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNTdHJlYW0ob2JqRGF0YSkpIHtcbiAgICAgICAgICBjb25zdCBibG9iID0gdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuZ2V0QmxvYkZyb21TdHJlYW0oXG4gICAgICAgICAgICBvYmpEYXRhIGFzIHVua25vd24gYXMgUmVhZGFibGUsXG4gICAgICAgICAgICBvcHRpb25zLmtub3duTGVuZ3RoIGFzIG51bWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJvd3NlckZvcm1EYXRhLnNldChrZXksIGJsb2IgYXMgdW5rbm93biBhcyBGaWxlLCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgYXBwZW5kRmlsZVRvRkQocHJvcGVydHlOYW1lLCBpdGVtLCBmb3JtRGF0YUluc3RhbmNlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRGaWxlVG9GRChwcm9wZXJ0eU5hbWUsIHZhbHVlLCBmb3JtRGF0YUluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZENvbW1vblByb3BlcnR5VG9GRChcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZTogRm9ybURhdGFJbnB1dFZhbHVlLFxuICAgIGZvcm1EYXRhQWNjOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBhZGRWYWx1ZUJhc2VkT25GRCA9IChmZEtleTogc3RyaW5nLCBmZFZhbHVlOiBGb3JtRGF0YUlucHV0VmFsdWUpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLmlzRm9ybURhdGFQYWNrYWdlKGZvcm1EYXRhQWNjKSkge1xuICAgICAgICBpZiAodHlwZW9mIGZkVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSByZWNlaXZlZCB2YWx1ZSBpcyBhbiBvYmplY3QuIFxcbidcbiAgICAgICAgICArICdcIkpTT04uU3RyaW5naWZ5XCIgd2lsbCBiZSB1c2VkIHRvIGF2b2lkIFR5cGVFcnJvciBcXG4nXG4gICAgICAgICAgKyAnVG8gcmVtb3ZlIHRoaXMgd2FybmluZzogXFxuJ1xuICAgICAgICAgICsgJ0NvbnNpZGVyIHN3aXRjaGluZyB0byBidWlsdC1pbiBGb3JtRGF0YSBvciBjb252ZXJ0aW5nIHRoZSB2YWx1ZSBvbiB5b3VyIG93bi5cXG4nKTtcbiAgICAgICAgICByZXR1cm4gZm9ybURhdGFBY2MuYXBwZW5kKGZkS2V5LCBKU09OLnN0cmluZ2lmeShmZFZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjLmFwcGVuZChmZEtleSwgZmRWYWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGZkVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBmb3JtRGF0YUFjYy5hcHBlbmQoZmRLZXksIGZkVmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBCbG9iICE9PSB1bmRlZmluZWQgJiYgZmRWYWx1ZSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjLmFwcGVuZChmZEtleSwgZmRWYWx1ZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgICAnVW5rbm93biB2YWx1ZSB0eXBlIGZvciBGb3JtIERhdGEuIFN0cmluZyBvciBCbG9iIGV4cGVjdGVkJyxcbiAgICAgICAgJ0Jyb3dzZXIgY29tcGxpYW50IEZvcm1EYXRhIGFsbG93cyBvbmx5IHN0cmluZyBvciBCbG9iIHZhbHVlcyBmb3IgcHJvcGVydGllcyB0aGF0IGFyZSBub3QgYXR0YWNobWVudHMuJ1xuICAgICAgKTtcbiAgICB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtOiBGb3JtRGF0YUlucHV0VmFsdWUpIHtcbiAgICAgICAgYWRkVmFsdWVCYXNlZE9uRkQoa2V5LCBpdGVtKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgYWRkVmFsdWVCYXNlZE9uRkQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5leHBvcnQgZGVmYXVsdCBGb3JtRGF0YUJ1aWxkZXI7XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9FcnJvcic7XG5cbmltcG9ydCB7XG4gIFBhZ2VzTGlzdEFjY3VtdWxhdG9yLFxuICBQYXJzZWRQYWdlLFxuICBQYXJzZWRQYWdlc0xpc3QsXG4gIFF1ZXJ5V2l0aFBhZ2UsXG4gIFJlc3BvbnNlV2l0aFBhZ2luZyxcbiAgVXBkYXRlZFVybEFuZFF1ZXJ5LFxuICBBUElFcnJvck9wdGlvbnNcbn0gZnJvbSAnLi4vLi4vVHlwZXMvQ29tbW9uJztcbmltcG9ydCB7XG4gIElCb3VuY2UsXG4gIElDb21wbGFpbnQsXG4gIElVbnN1YnNjcmliZSxcbiAgSVdoaXRlTGlzdFxufSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL1JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgU3VwcHJlc3Npb25EYXRhVHlwZVxufSBmcm9tICcuLi8uLi9UeXBlcy9TdXBwcmVzc2lvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBhYnN0cmFjdCBjbGFzcyBOYXZpZ2F0aW9uVGhydVBhZ2VzIDxUPiB7XG4gIHJlcXVlc3Q/OiBSZXF1ZXN0O1xuICBjb25zdHJ1Y3RvcihyZXF1ZXN0PzogUmVxdWVzdCkge1xuICAgIGlmIChyZXF1ZXN0KSB7XG4gICAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVBhZ2UoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwYWdlVXJsOiBzdHJpbmcsXG4gICAgdXJsU2VwYXJhdG9yOiBzdHJpbmcsXG4gICAgaXRlcmF0b3JOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKSA6IFBhcnNlZFBhZ2Uge1xuICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwocGFnZVVybCk7XG4gICAgY29uc3QgeyBzZWFyY2hQYXJhbXMgfSA9IHBhcnNlZFVybDtcblxuICAgIGNvbnN0IHBhZ2VWYWx1ZSA9IHBhZ2VVcmwgJiYgdHlwZW9mIHBhZ2VVcmwgPT09ICdzdHJpbmcnID8gcGFnZVVybC5zcGxpdCh1cmxTZXBhcmF0b3IpLnBvcCgpIHx8ICcnIDogJyc7XG4gICAgbGV0IGl0ZXJhdG9yUG9zaXRpb24gPSBudWxsO1xuICAgIGlmIChpdGVyYXRvck5hbWUpIHtcbiAgICAgIGl0ZXJhdG9yUG9zaXRpb24gPSBzZWFyY2hQYXJhbXMuaGFzKGl0ZXJhdG9yTmFtZSlcbiAgICAgICAgPyBzZWFyY2hQYXJhbXMuZ2V0KGl0ZXJhdG9yTmFtZSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIHBhZ2U6IHVybFNlcGFyYXRvciA9PT0gJz8nID8gYD8ke3BhZ2VWYWx1ZX1gIDogcGFnZVZhbHVlLFxuICAgICAgaXRlcmF0b3JQb3NpdGlvbixcbiAgICAgIHVybDogcGFnZVVybFxuICAgIH0gYXMgUGFyc2VkUGFnZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVBhZ2VMaW5rcyhcbiAgICByZXNwb25zZTogUmVzcG9uc2VXaXRoUGFnaW5nLFxuICAgIHVybFNlcGFyYXRvcjogc3RyaW5nLFxuICAgIGl0ZXJhdG9yTmFtZT86IHN0cmluZ1xuICApOiBQYXJzZWRQYWdlc0xpc3Qge1xuICAgIGNvbnN0IHBhZ2VzID0gT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuYm9keS5wYWdpbmcpO1xuICAgIHJldHVybiBwYWdlcy5yZWR1Y2UoXG4gICAgICAoYWNjOiBQYWdlc0xpc3RBY2N1bXVsYXRvciwgW2lkLCBwYWdlVXJsXTogWyBpZDogc3RyaW5nLCBwYWdlVXJsOiBzdHJpbmddKSA9PiB7XG4gICAgICAgIGFjY1tpZF0gPSB0aGlzLnBhcnNlUGFnZShpZCwgcGFnZVVybCwgdXJsU2VwYXJhdG9yLCBpdGVyYXRvck5hbWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge31cbiAgICApIGFzIHVua25vd24gYXMgUGFyc2VkUGFnZXNMaXN0O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVVcmxBbmRRdWVyeShjbGllbnRVcmw6IHN0cmluZywgcXVlcnk/OiBRdWVyeVdpdGhQYWdlKTogVXBkYXRlZFVybEFuZFF1ZXJ5IHtcbiAgICBsZXQgdXJsID0gY2xpZW50VXJsO1xuICAgIGNvbnN0IHF1ZXJ5Q29weSA9IHsgLi4ucXVlcnkgfTtcbiAgICBpZiAocXVlcnlDb3B5LnBhZ2UpIHtcbiAgICAgIHVybCA9IHVybGpvaW4oY2xpZW50VXJsLCBxdWVyeUNvcHkucGFnZSk7XG4gICAgICBkZWxldGUgcXVlcnlDb3B5LnBhZ2U7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB1cmwsXG4gICAgICB1cGRhdGVkUXVlcnk6IHF1ZXJ5Q29weVxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVxdWVzdExpc3RXaXRoUGFnZXMoY2xpZW50VXJsOnN0cmluZywgcXVlcnk/OiBRdWVyeVdpdGhQYWdlLCBNb2RlbD86IHtcbiAgICBuZXcoZGF0YTogU3VwcHJlc3Npb25EYXRhVHlwZSk6XG4gICAgSUJvdW5jZSB8IElDb21wbGFpbnQgfCBJVW5zdWJzY3JpYmUgfCBJV2hpdGVMaXN0XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCB7IHVybCwgdXBkYXRlZFF1ZXJ5IH0gPSB0aGlzLnVwZGF0ZVVybEFuZFF1ZXJ5KGNsaWVudFVybCwgcXVlcnkpO1xuICAgIGlmICh0aGlzLnJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBSZXNwb25zZVdpdGhQYWdpbmcgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KHVybCwgdXBkYXRlZFF1ZXJ5KTtcbiAgICAgIC8vIE1vZGVsIGhlcmUgaXMgdXN1YWxseSB1bmRlZmluZWQgZXhjZXB0IGZvciBTdXBwcmVzc2lvbiBDbGllbnRcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlTGlzdChyZXNwb25zZSwgTW9kZWwpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICBzdGF0dXNUZXh0OiAnUmVxdWVzdCBwcm9wZXJ0eSBpcyBlbXB0eScsXG4gICAgICBib2R5OiB7IG1lc3NhZ2U6ICcnIH1cbiAgICB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcGFyc2VMaXN0KHJlc3BvbnNlOiBSZXNwb25zZVdpdGhQYWdpbmcsIE1vZGVsPzoge1xuICAgIG5ldyhkYXRhOiBTdXBwcmVzc2lvbkRhdGFUeXBlKTpcbiAgICBJQm91bmNlIHwgSUNvbXBsYWludCB8IElVbnN1YnNjcmliZSB8IElXaGl0ZUxpc3RcbiAgfSk6IFQ7XG59XG4iLCJpbXBvcnQgKiBhcyBiYXNlNjQgZnJvbSAnYmFzZS02NCc7XG5pbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgYXhpb3MsIHtcbiAgQXhpb3NFcnJvcixcbiAgQXhpb3NSZXNwb25zZSxcbiAgQXhpb3NIZWFkZXJzLFxuICBSYXdBeGlvc1JlcXVlc3RIZWFkZXJzLFxuICBBeGlvc1Byb3h5Q29uZmlnLFxufSBmcm9tICdheGlvcyc7XG5pbXBvcnQgKiBhcyBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCBBUElFcnJvciBmcm9tICcuL0Vycm9yJztcbmltcG9ydCB7XG4gIE9uQ2FsbFJlcXVlc3RPcHRpb25zLFxuICBSZXF1ZXN0T3B0aW9ucyxcbiAgQVBJRXJyb3JPcHRpb25zLFxuICBJbnB1dEZvcm1EYXRhLFxuICBBUElSZXNwb25zZSxcbiAgSXBQb29sRGVsZXRlRGF0YSxcbiAgRm9ybURhdGFJbnB1dFxufSBmcm9tICcuLi8uLi9UeXBlcyc7XG5cbmltcG9ydCBGb3JtRGF0YUJ1aWxkZXIgZnJvbSAnLi9Gb3JtRGF0YUJ1aWxkZXInO1xuaW1wb3J0IFN1YmFjY291bnRzQ2xpZW50IGZyb20gJy4uL1N1YmFjY291bnRzJztcblxuY2xhc3MgUmVxdWVzdCB7XG4gIHByaXZhdGUgdXNlcm5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBrZXk6IHN0cmluZztcbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSB0aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgaGVhZGVyczogQXhpb3NIZWFkZXJzO1xuICBwcml2YXRlIGZvcm1EYXRhQnVpbGRlcjogRm9ybURhdGFCdWlsZGVyO1xuICBwcml2YXRlIG1heEJvZHlMZW5ndGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBwcm94eTogQXhpb3NQcm94eUNvbmZpZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucywgZm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLnVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZTtcbiAgICB0aGlzLmtleSA9IG9wdGlvbnMua2V5O1xuICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmwgYXMgc3RyaW5nO1xuICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dDtcbiAgICB0aGlzLmhlYWRlcnMgPSB0aGlzLm1ha2VIZWFkZXJzRnJvbU9iamVjdChvcHRpb25zLmhlYWRlcnMpO1xuICAgIHRoaXMuZm9ybURhdGFCdWlsZGVyID0gbmV3IEZvcm1EYXRhQnVpbGRlcihmb3JtRGF0YSk7XG4gICAgdGhpcy5tYXhCb2R5TGVuZ3RoID0gNTI0Mjg4MDA7IC8vIDUwIE1CXG4gICAgdGhpcy5wcm94eSA9IG9wdGlvbnM/LnByb3h5O1xuICB9XG5cbiAgYXN5bmMgcmVxdWVzdChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvbkNhbGxPcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93biB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IE9uQ2FsbFJlcXVlc3RPcHRpb25zID0geyAuLi5vbkNhbGxPcHRpb25zIH07XG4gICAgZGVsZXRlIG9wdGlvbnM/LmhlYWRlcnM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSB0aGlzLmpvaW5BbmRUcmFuc2Zvcm1IZWFkZXJzKG9uQ2FsbE9wdGlvbnMpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4ub3B0aW9ucyB9O1xuXG4gICAgaWYgKG9wdGlvbnM/LnF1ZXJ5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9wdGlvbnM/LnF1ZXJ5KS5sZW5ndGggPiAwKSB7XG4gICAgICBwYXJhbXMucGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhvcHRpb25zLnF1ZXJ5KTtcbiAgICAgIGRlbGV0ZSBwYXJhbXMucXVlcnk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmJvZHkpIHtcbiAgICAgIGNvbnN0IGJvZHkgPSBvcHRpb25zPy5ib2R5O1xuICAgICAgcGFyYW1zLmRhdGEgPSBib2R5O1xuICAgICAgZGVsZXRlIHBhcmFtcy5ib2R5O1xuICAgIH1cbiAgICBsZXQgcmVzcG9uc2U6IEF4aW9zUmVzcG9uc2U7XG4gICAgY29uc3QgdXJsVmFsdWUgPSB1cmxqb2luKHRoaXMudXJsLCB1cmwpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucmVxdWVzdCh7XG4gICAgICAgIG1ldGhvZDogbWV0aG9kLnRvTG9jYWxlVXBwZXJDYXNlKCksXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgdXJsOiB1cmxWYWx1ZSxcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgbWF4Qm9keUxlbmd0aDogdGhpcy5tYXhCb2R5TGVuZ3RoLFxuICAgICAgICBwcm94eTogdGhpcy5wcm94eSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IGVyciBhcyBBeGlvc0Vycm9yO1xuXG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgICBzdGF0dXM6IGVycm9yUmVzcG9uc2U/LnJlc3BvbnNlPy5zdGF0dXMgfHwgNDAwLFxuICAgICAgICBzdGF0dXNUZXh0OiBlcnJvclJlc3BvbnNlPy5yZXNwb25zZT8uc3RhdHVzVGV4dCB8fCBlcnJvclJlc3BvbnNlLmNvZGUsXG4gICAgICAgIGJvZHk6IGVycm9yUmVzcG9uc2U/LnJlc3BvbnNlPy5kYXRhIHx8IGVycm9yUmVzcG9uc2UubWVzc2FnZVxuICAgICAgfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2V0UmVzcG9uc2VCb2R5KHJlc3BvbnNlKTtcbiAgICByZXR1cm4gcmVzIGFzIEFQSVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZXNwb25zZUJvZHkocmVzcG9uc2U6IEF4aW9zUmVzcG9uc2UpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzID0ge1xuICAgICAgYm9keToge30sXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlPy5zdGF0dXNcbiAgICB9IGFzIEFQSVJlc3BvbnNlO1xuXG4gICAgaWYgKHR5cGVvZiByZXNwb25zZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgPT09ICdNYWlsZ3VuIE1hZ25pZmljZW50IEFQSScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKHtcbiAgICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgICBzdGF0dXNUZXh0OiAnSW5jb3JyZWN0IHVybCcsXG4gICAgICAgICAgYm9keTogcmVzcG9uc2UuZGF0YVxuICAgICAgICB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICByZXMuYm9keSA9IHtcbiAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLmJvZHkgPSByZXNwb25zZS5kYXRhO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBqb2luQW5kVHJhbnNmb3JtSGVhZGVycyhcbiAgICBvbkNhbGxPcHRpb25zPzogT25DYWxsUmVxdWVzdE9wdGlvbnNcbiAgKTogQXhpb3NIZWFkZXJzIHtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IG5ldyBBeGlvc0hlYWRlcnMoKTtcblxuICAgIGNvbnN0IGJhc2ljID0gYmFzZTY0LmVuY29kZShgJHt0aGlzLnVzZXJuYW1lfToke3RoaXMua2V5fWApO1xuICAgIHJlcXVlc3RIZWFkZXJzLnNldEF1dGhvcml6YXRpb24oYEJhc2ljICR7YmFzaWN9YCk7XG4gICAgcmVxdWVzdEhlYWRlcnMuc2V0KHRoaXMuaGVhZGVycyk7XG5cbiAgICBjb25zdCByZWNlaXZlZE9uQ2FsbEhlYWRlcnMgPSBvbkNhbGxPcHRpb25zICYmIG9uQ2FsbE9wdGlvbnMuaGVhZGVycztcbiAgICBjb25zdCBvbkNhbGxIZWFkZXJzID0gdGhpcy5tYWtlSGVhZGVyc0Zyb21PYmplY3QocmVjZWl2ZWRPbkNhbGxIZWFkZXJzKTtcbiAgICByZXF1ZXN0SGVhZGVycy5zZXQob25DYWxsSGVhZGVycyk7XG4gICAgcmV0dXJuIHJlcXVlc3RIZWFkZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlSGVhZGVyc0Zyb21PYmplY3QoXG4gICAgaGVhZGVyc09iamVjdDogUmF3QXhpb3NSZXF1ZXN0SGVhZGVycyA9IHt9XG4gICk6IEF4aW9zSGVhZGVycyB7XG4gICAgbGV0IHJlcXVlc3RIZWFkZXJzID0gbmV3IEF4aW9zSGVhZGVycygpO1xuICAgIHJlcXVlc3RIZWFkZXJzID0gT2JqZWN0LmVudHJpZXMoaGVhZGVyc09iamVjdCkucmVkdWNlKFxuICAgICAgKGhlYWRlcnNBY2N1bXVsYXRvcjogQXhpb3NIZWFkZXJzLCBjdXJyZW50UGFpcikgPT4ge1xuICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBjdXJyZW50UGFpcjtcbiAgICAgICAgaGVhZGVyc0FjY3VtdWxhdG9yLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGhlYWRlcnNBY2N1bXVsYXRvcjtcbiAgICAgIH0sIHJlcXVlc3RIZWFkZXJzXG4gICAgKTtcbiAgICByZXR1cm4gcmVxdWVzdEhlYWRlcnM7XG4gIH1cblxuICBzZXRTdWJhY2NvdW50SGVhZGVyKHN1YmFjY291bnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMubWFrZUhlYWRlcnNGcm9tT2JqZWN0KHtcbiAgICAgIC4uLnRoaXMuaGVhZGVycyxcbiAgICAgIFtTdWJhY2NvdW50c0NsaWVudC5TVUJBQ0NPVU5UX0hFQURFUl06IHN1YmFjY291bnRJZFxuICAgIH0pO1xuICAgIHRoaXMuaGVhZGVycy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICByZXNldFN1YmFjY291bnRIZWFkZXIoKTogdm9pZCB7XG4gICAgdGhpcy5oZWFkZXJzLmRlbGV0ZShTdWJhY2NvdW50c0NsaWVudC5TVUJBQ0NPVU5UX0hFQURFUik7XG4gIH1cblxuICBxdWVyeShcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBxdWVyeT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgQXJyYXk8QXJyYXk8c3RyaW5nPj4sXG4gICAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1ldGhvZCwgdXJsLCB7IHF1ZXJ5LCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgY29tbWFuZChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdIHwgc3RyaW5nIHwgTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEsXG4gICAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIGFkZERlZmF1bHRIZWFkZXJzID0gdHJ1ZVxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgbGV0IGhlYWRlcnMgPSB7fTtcbiAgICBpZiAoYWRkRGVmYXVsdEhlYWRlcnMpIHtcbiAgICAgIGhlYWRlcnMgPSB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9O1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIC4uLmhlYWRlcnMsXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHJlcXVlc3RPcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIGdldChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBxdWVyeT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgQXJyYXk8QXJyYXk8c3RyaW5nPj4sXG4gICAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeSgnZ2V0JywgdXJsLCBxdWVyeSwgb3B0aW9ucyk7XG4gIH1cblxuICBwb3N0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHN0cmluZyxcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3Bvc3QnLCB1cmwsIGRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgcG9zdFdpdGhGRChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhOiBGb3JtRGF0YUlucHV0XG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybURhdGFCdWlsZGVyLmNyZWF0ZUZvcm1EYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3Bvc3QnLCB1cmwsIGZvcm1EYXRhLCB7XG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScgfVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIHB1dFdpdGhGRCh1cmw6IHN0cmluZywgZGF0YTogRm9ybURhdGFJbnB1dCk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybURhdGFCdWlsZGVyLmNyZWF0ZUZvcm1EYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3B1dCcsIHVybCwgZm9ybURhdGEsIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyB9XG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgcGF0Y2hXaXRoRkQodXJsOiBzdHJpbmcsIGRhdGE6IEZvcm1EYXRhSW5wdXQpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmZvcm1EYXRhQnVpbGRlci5jcmVhdGVGb3JtRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwYXRjaCcsIHVybCwgZm9ybURhdGEsIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyB9XG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgcHV0KHVybDogc3RyaW5nLCBkYXRhPzogRm9ybURhdGFJbnB1dCB8IHN0cmluZywgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICA6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwdXQnLCB1cmwsIGRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgZGVsZXRlKHVybDogc3RyaW5nLCBkYXRhPzogSXBQb29sRGVsZXRlRGF0YSk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdkZWxldGUnLCB1cmwsIGRhdGEpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3Q7XG4iLCJleHBvcnQgZW51bSBSZXNvbHV0aW9uIHtcbiAgICBIT1VSID0gJ2hvdXInLFxuICAgIERBWSA9ICdkYXknLFxuICAgIE1PTlRIID0gJ21vbnRoJ1xufVxuXG5leHBvcnQgZW51bSBTdXBwcmVzc2lvbk1vZGVscyB7XG4gICAgQk9VTkNFUyA9ICdib3VuY2VzJyxcbiAgICBDT01QTEFJTlRTID0gJ2NvbXBsYWludHMnLFxuICAgIFVOU1VCU0NSSUJFUyA9ICd1bnN1YnNjcmliZXMnLFxuICAgIFdISVRFTElTVFMgPSAnd2hpdGVsaXN0cydcbn1cblxuZXhwb3J0IGVudW0gV2ViaG9va3NJZHMge1xuICAgIENMSUNLRUQgPSAnY2xpY2tlZCcsXG4gICAgQ09NUExBSU5FRCA9ICdjb21wbGFpbmVkJyxcbiAgICBERUxJVkVSRUQgPSAnZGVsaXZlcmVkJyxcbiAgICBPUEVORUQgPSAnb3BlbmVkJyxcbiAgICBQRVJNQU5FTlRfRkFJTCA9ICdwZXJtYW5lbnRfZmFpbCcsXG4gICAgVEVNUE9SQVJZX0ZBSUwgPSAndGVtcG9yYXJ5X2ZhaWwnLFxuICAgIFVOU1VCU0NSSUJFRCA9ICd1bnN1YnNjcmliZScsXG59XG5cbmV4cG9ydCBlbnVtIFllc05vIHtcbiAgICBZRVMgPSAneWVzJyxcbiAgICBOTyA9ICdubydcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vTG9nZ2VyJztcbiIsImV4cG9ydCAqIGZyb20gJy4vRG9tYWluQ3JlZGVudGlhbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5UYWdzJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWluVGVtcGxhdGVzJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWluc0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lFdmVudENsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lJUFBvb2xzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vSUlQc0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0luYm94UGxhY2VtZW50c0NsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL0F0dHJpYnV0ZXNDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9GaWx0ZXJzQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vU2VlZHNMaXN0cy9TZWVkc0xpc3RzQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vUmVzdWx0cy9JbmJveFBsYWNlbWVudHNSZXN1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vUmVzdWx0cy9JbmJveFBsYWNlbWVudHNSZXN1bHRzU2hhcmluZyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lNYWlsZ3VuQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vTWFpbGluZ0xpc3RNZW1iZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vTWFpbGluZ0xpc3RzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vSU1lc3NhZ2VzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vSVJvdXRlc0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL1N0YXRzQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vU3RhdHNDb250YWluZXInO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JU3ViYWNjb3VudHNDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Cb3VuY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Db21wbGFpbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9VbnN1YnNjcmliZSc7XG5leHBvcnQgKiBmcm9tICcuL1doaXRlTGlzdCc7XG5leHBvcnQgKiBmcm9tICcuL0lTdXBwcmVzc2lvbnNDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9NdWx0aXBsZVZhbGlkYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9WYWxpZGF0aW9uJztcbiIsImV4cG9ydCAqIGZyb20gJy4vSVdlYkhvb2tzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vQ29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWlucyc7XG5leHBvcnQgKiBmcm9tICcuL01haWxndW5DbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9NYWlsaW5nTGlzdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9TdGF0cyc7XG5leHBvcnQgKiBmcm9tICcuL1N1cHByZXNzaW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL1ZhbGlkYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vRXZlbnRDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9XZWJob29rcyc7XG5leHBvcnQgKiBmcm9tICcuL01lc3NhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vUm91dGVzJztcbmV4cG9ydCAqIGZyb20gJy4vSVBzJztcbmV4cG9ydCAqIGZyb20gJy4vSVBQb29scyc7XG5leHBvcnQgKiBmcm9tICcuL1N1YmFjY291bnRzJztcbmV4cG9ydCAqIGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vRXJyb3InO1xuZXhwb3J0ICogZnJvbSAnLi9BcGlSZXNwb25zZSc7XG5leHBvcnQgKiBmcm9tICcuL0Zvcm1EYXRhJztcbmV4cG9ydCAqIGZyb20gJy4vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5leHBvcnQgKiBmcm9tICcuL1JlcXVlc3RPcHRpb25zJztcbiIsImV4cG9ydCAqIGZyb20gJy4vRG9tYWluQ3JlZGVudGlhbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5zJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWluVGFncyc7XG5leHBvcnQgKiBmcm9tICcuL0RvbWFpblRlbXBsYXRlcyc7XG5leHBvcnQgKiBmcm9tICcuL0RvbWFpblRyYWNraW5nJztcbiIsImV4cG9ydCAqIGZyb20gJy4vRXZlbnRzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vSXBQb29scyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lQcyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL01haWxndW5DbGllbnRPcHRpb25zJztcbiIsImV4cG9ydCAqIGZyb20gJy4vTWFpbGluZ0xpc3RNZW1iZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vTWFpbGluZ0xpc3RzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vTWVzc2FnZXMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Sb3V0ZXMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9TdGF0cyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL1N1YmFjY291bnRzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vQm91bmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29tcGxhaW50JztcbmV4cG9ydCAqIGZyb20gJy4vU3VwcHJlc3Npb25zJztcbmV4cG9ydCAqIGZyb20gJy4vVW5zdWJzY3JpYmUnO1xuZXhwb3J0ICogZnJvbSAnLi9XaGl0ZUxpc3QnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9NdWx0aXBsZVZhbGlkYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9WYWxpZGF0aW9uJztcbiIsImV4cG9ydCAqIGZyb20gJy4vV2ViaG9va3MnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Db21tb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5zJztcbmV4cG9ydCAqIGZyb20gJy4vRXZlbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vSVBQb29scyc7XG5leHBvcnQgKiBmcm9tICcuL0lQcyc7XG5leHBvcnQgKiBmcm9tICcuL01haWxndW5DbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9NYWlsaW5nTGlzdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9NZXNzYWdlcyc7XG5leHBvcnQgKiBmcm9tICcuL1JvdXRlcyc7XG5leHBvcnQgKiBmcm9tICcuL1N0YXRzJztcbmV4cG9ydCAqIGZyb20gJy4vU3ViYWNjb3VudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9TdXBwcmVzc2lvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9WYWxpZGF0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL1dlYmhvb2tzJztcbiIsImltcG9ydCBNYWlsZ3VuQ2xpZW50IGZyb20gJy4vQ2xhc3Nlcy9NYWlsZ3VuQ2xpZW50JztcbmltcG9ydCB7IElNYWlsZ3VuQ2xpZW50IH0gZnJvbSAnLi9JbnRlcmZhY2VzJztcbmltcG9ydCB7IElucHV0Rm9ybURhdGEsIE1haWxndW5DbGllbnRPcHRpb25zIH0gZnJvbSAnLi9UeXBlcyc7XG5cbmV4cG9ydCAqIGFzIEVudW1zIGZyb20gJy4vRW51bXMnO1xuZXhwb3J0ICogZnJvbSAnLi9UeXBlcyc7XG5leHBvcnQgKiBhcyBJbnRlcmZhY2VzIGZyb20gJy4vSW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxndW4ge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHQoKTogdHlwZW9mIE1haWxndW4geyByZXR1cm4gdGhpczsgfVxuICBwcml2YXRlIGZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhXG5cbiAgY29uc3RydWN0b3IoRm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gRm9ybURhdGE7XG4gIH1cblxuICBjbGllbnQob3B0aW9uczogTWFpbGd1bkNsaWVudE9wdGlvbnMpIDogSU1haWxndW5DbGllbnQge1xuICAgIHJldHVybiBuZXcgTWFpbGd1bkNsaWVudChvcHRpb25zLCB0aGlzLmZvcm1EYXRhKTtcbiAgfVxufVxuIiwiLyohIGh0dHBzOi8vbXRocy5iZS9iYXNlNjQgdjEuMC4wIGJ5IEBtYXRoaWFzIHwgTUlUIGxpY2Vuc2UgKi9cbjsoZnVuY3Rpb24ocm9vdCkge1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlcyBgZXhwb3J0c2AuXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHM7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuXG5cdHZhciBmcmVlTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiZcblx0XHRtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cyAmJiBtb2R1bGU7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAsIGZyb20gTm9kZS5qcyBvciBCcm93c2VyaWZpZWQgY29kZSwgYW5kIHVzZVxuXHQvLyBpdCBhcyBgcm9vdGAuXG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0dmFyIEludmFsaWRDaGFyYWN0ZXJFcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcblx0XHR0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuXHR9O1xuXHRJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yO1xuXHRJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcblxuXHR2YXIgZXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG5cdFx0Ly8gTm90ZTogdGhlIGVycm9yIG1lc3NhZ2VzIHVzZWQgdGhyb3VnaG91dCB0aGlzIGZpbGUgbWF0Y2ggdGhvc2UgdXNlZCBieVxuXHRcdC8vIHRoZSBuYXRpdmUgYGF0b2JgL2BidG9hYCBpbXBsZW1lbnRhdGlvbiBpbiBDaHJvbWl1bS5cblx0XHR0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKG1lc3NhZ2UpO1xuXHR9O1xuXG5cdHZhciBUQUJMRSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblx0Ly8gaHR0cDovL3doYXR3Zy5vcmcvaHRtbC9jb21tb24tbWljcm9zeW50YXhlcy5odG1sI3NwYWNlLWNoYXJhY3RlclxuXHR2YXIgUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyA9IC9bXFx0XFxuXFxmXFxyIF0vZztcblxuXHQvLyBgZGVjb2RlYCBpcyBkZXNpZ25lZCB0byBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggYGF0b2JgIGFzIGRlc2NyaWJlZCBpbiB0aGVcblx0Ly8gSFRNTCBTdGFuZGFyZC4gaHR0cDovL3doYXR3Zy5vcmcvaHRtbC93ZWJhcHBhcGlzLmh0bWwjZG9tLXdpbmRvd2Jhc2U2NC1hdG9iXG5cdC8vIFRoZSBvcHRpbWl6ZWQgYmFzZTY0LWRlY29kaW5nIGFsZ29yaXRobSB1c2VkIGlzIGJhc2VkIG9uIEBhdGvigJlzIGV4Y2VsbGVudFxuXHQvLyBpbXBsZW1lbnRhdGlvbi4gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vYXRrLzEwMjAzOTZcblx0dmFyIGRlY29kZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdFx0aW5wdXQgPSBTdHJpbmcoaW5wdXQpXG5cdFx0XHQucmVwbGFjZShSRUdFWF9TUEFDRV9DSEFSQUNURVJTLCAnJyk7XG5cdFx0dmFyIGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblx0XHRpZiAobGVuZ3RoICUgNCA9PSAwKSB7XG5cdFx0XHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoLz09PyQvLCAnJyk7XG5cdFx0XHRsZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cdFx0fVxuXHRcdGlmIChcblx0XHRcdGxlbmd0aCAlIDQgPT0gMSB8fFxuXHRcdFx0Ly8gaHR0cDovL3doYXR3Zy5vcmcvQyNhbHBoYW51bWVyaWMtYXNjaWktY2hhcmFjdGVyc1xuXHRcdFx0L1teK2EtekEtWjAtOS9dLy50ZXN0KGlucHV0KVxuXHRcdCkge1xuXHRcdFx0ZXJyb3IoXG5cdFx0XHRcdCdJbnZhbGlkIGNoYXJhY3RlcjogdGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4nXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR2YXIgYml0Q291bnRlciA9IDA7XG5cdFx0dmFyIGJpdFN0b3JhZ2U7XG5cdFx0dmFyIGJ1ZmZlcjtcblx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0dmFyIHBvc2l0aW9uID0gLTE7XG5cdFx0d2hpbGUgKCsrcG9zaXRpb24gPCBsZW5ndGgpIHtcblx0XHRcdGJ1ZmZlciA9IFRBQkxFLmluZGV4T2YoaW5wdXQuY2hhckF0KHBvc2l0aW9uKSk7XG5cdFx0XHRiaXRTdG9yYWdlID0gYml0Q291bnRlciAlIDQgPyBiaXRTdG9yYWdlICogNjQgKyBidWZmZXIgOiBidWZmZXI7XG5cdFx0XHQvLyBVbmxlc3MgdGhpcyBpcyB0aGUgZmlyc3Qgb2YgYSBncm91cCBvZiA0IGNoYXJhY3RlcnPigKZcblx0XHRcdGlmIChiaXRDb3VudGVyKysgJSA0KSB7XG5cdFx0XHRcdC8vIOKApmNvbnZlcnQgdGhlIGZpcnN0IDggYml0cyB0byBhIHNpbmdsZSBBU0NJSSBjaGFyYWN0ZXIuXG5cdFx0XHRcdG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuXHRcdFx0XHRcdDB4RkYgJiBiaXRTdG9yYWdlID4+ICgtMiAqIGJpdENvdW50ZXIgJiA2KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9O1xuXG5cdC8vIGBlbmNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYnRvYWAgYXMgZGVzY3JpYmVkIGluIHRoZVxuXHQvLyBIVE1MIFN0YW5kYXJkOiBodHRwOi8vd2hhdHdnLm9yZy9odG1sL3dlYmFwcGFwaXMuaHRtbCNkb20td2luZG93YmFzZTY0LWJ0b2Fcblx0dmFyIGVuY29kZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdFx0aW5wdXQgPSBTdHJpbmcoaW5wdXQpO1xuXHRcdGlmICgvW15cXDAtXFx4RkZdLy50ZXN0KGlucHV0KSkge1xuXHRcdFx0Ly8gTm90ZTogbm8gbmVlZCB0byBzcGVjaWFsLWNhc2UgYXN0cmFsIHN5bWJvbHMgaGVyZSwgYXMgc3Vycm9nYXRlcyBhcmVcblx0XHRcdC8vIG1hdGNoZWQsIGFuZCB0aGUgaW5wdXQgaXMgc3VwcG9zZWQgdG8gb25seSBjb250YWluIEFTQ0lJIGFueXdheS5cblx0XHRcdGVycm9yKFxuXHRcdFx0XHQnVGhlIHN0cmluZyB0byBiZSBlbmNvZGVkIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3V0c2lkZSBvZiB0aGUgJyArXG5cdFx0XHRcdCdMYXRpbjEgcmFuZ2UuJ1xuXHRcdFx0KTtcblx0XHR9XG5cdFx0dmFyIHBhZGRpbmcgPSBpbnB1dC5sZW5ndGggJSAzO1xuXHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHR2YXIgcG9zaXRpb24gPSAtMTtcblx0XHR2YXIgYTtcblx0XHR2YXIgYjtcblx0XHR2YXIgYztcblx0XHR2YXIgYnVmZmVyO1xuXHRcdC8vIE1ha2Ugc3VyZSBhbnkgcGFkZGluZyBpcyBoYW5kbGVkIG91dHNpZGUgb2YgdGhlIGxvb3AuXG5cdFx0dmFyIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCAtIHBhZGRpbmc7XG5cblx0XHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xuXHRcdFx0Ly8gUmVhZCB0aHJlZSBieXRlcywgaS5lLiAyNCBiaXRzLlxuXHRcdFx0YSA9IGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24pIDw8IDE2O1xuXHRcdFx0YiA9IGlucHV0LmNoYXJDb2RlQXQoKytwb3NpdGlvbikgPDwgODtcblx0XHRcdGMgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xuXHRcdFx0YnVmZmVyID0gYSArIGIgKyBjO1xuXHRcdFx0Ly8gVHVybiB0aGUgMjQgYml0cyBpbnRvIGZvdXIgY2h1bmtzIG9mIDYgYml0cyBlYWNoLCBhbmQgYXBwZW5kIHRoZVxuXHRcdFx0Ly8gbWF0Y2hpbmcgY2hhcmFjdGVyIGZvciBlYWNoIG9mIHRoZW0gdG8gdGhlIG91dHB1dC5cblx0XHRcdG91dHB1dCArPSAoXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTggJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTIgJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gNiAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciAmIDB4M0YpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChwYWRkaW5nID09IDIpIHtcblx0XHRcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCA4O1xuXHRcdFx0YiA9IGlucHV0LmNoYXJDb2RlQXQoKytwb3NpdGlvbik7XG5cdFx0XHRidWZmZXIgPSBhICsgYjtcblx0XHRcdG91dHB1dCArPSAoXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTApICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KChidWZmZXIgPj4gNCkgJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDIpICYgMHgzRikgK1xuXHRcdFx0XHQnPSdcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChwYWRkaW5nID09IDEpIHtcblx0XHRcdGJ1ZmZlciA9IGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24pO1xuXHRcdFx0b3V0cHV0ICs9IChcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAyKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDQpICYgMHgzRikgK1xuXHRcdFx0XHQnPT0nXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH07XG5cblx0dmFyIGJhc2U2NCA9IHtcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCdkZWNvZGUnOiBkZWNvZGUsXG5cdFx0J3ZlcnNpb24nOiAnMS4wLjAnXG5cdH07XG5cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gYmFzZTY0O1xuXHRcdH0pO1xuXHR9XHRlbHNlIGlmIChmcmVlRXhwb3J0cyAmJiAhZnJlZUV4cG9ydHMubm9kZVR5cGUpIHtcblx0XHRpZiAoZnJlZU1vZHVsZSkgeyAvLyBpbiBOb2RlLmpzIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gYmFzZTY0O1xuXHRcdH0gZWxzZSB7IC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gYmFzZTY0KSB7XG5cdFx0XHRcdGJhc2U2NC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gYmFzZTY0W2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHsgLy8gaW4gUmhpbm8gb3IgYSB3ZWIgYnJvd3NlclxuXHRcdHJvb3QuYmFzZTY0ID0gYmFzZTY0O1xuXHR9XG5cbn0odGhpcykpO1xuIiwiKGZ1bmN0aW9uIChuYW1lLCBjb250ZXh0LCBkZWZpbml0aW9uKSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKCk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgZGVmaW5lKGRlZmluaXRpb24pO1xuICBlbHNlIGNvbnRleHRbbmFtZV0gPSBkZWZpbml0aW9uKCk7XG59KSgndXJsam9pbicsIHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuICBmdW5jdGlvbiBub3JtYWxpemUgKHN0ckFycmF5KSB7XG4gICAgdmFyIHJlc3VsdEFycmF5ID0gW107XG4gICAgaWYgKHN0ckFycmF5Lmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cblxuICAgIGlmICh0eXBlb2Ygc3RyQXJyYXlbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIHN0ckFycmF5WzBdKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgZmlyc3QgcGFydCBpcyBhIHBsYWluIHByb3RvY29sLCB3ZSBjb21iaW5lIGl0IHdpdGggdGhlIG5leHQgcGFydC5cbiAgICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15bXi86XSs6XFwvKiQvKSAmJiBzdHJBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgICB2YXIgZmlyc3QgPSBzdHJBcnJheS5zaGlmdCgpO1xuICAgICAgc3RyQXJyYXlbMF0gPSBmaXJzdCArIHN0ckFycmF5WzBdO1xuICAgIH1cblxuICAgIC8vIFRoZXJlIG11c3QgYmUgdHdvIG9yIHRocmVlIHNsYXNoZXMgaW4gdGhlIGZpbGUgcHJvdG9jb2wsIHR3byBzbGFzaGVzIGluIGFueXRoaW5nIGVsc2UuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eZmlsZTpcXC9cXC9cXC8vKSkge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLycpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSBzdHJBcnJheVtpXTtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgY29tcG9uZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gJycpIHsgY29udGludWU7IH1cblxuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIHRoZSBzdGFydGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGZpcnN0LlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvXltcXC9dKy8sICcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChpIDwgc3RyQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgZW5kaW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgbGFzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3IgdGhlIGxhc3QgY29tcG9uZW50IHdlIHdpbGwgY29tYmluZSBtdWx0aXBsZSBzbGFzaGVzIHRvIGEgc2luZ2xlIG9uZS5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnLycpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRBcnJheS5wdXNoKGNvbXBvbmVudCk7XG5cbiAgICB9XG5cbiAgICB2YXIgc3RyID0gcmVzdWx0QXJyYXkuam9pbignLycpO1xuICAgIC8vIEVhY2ggaW5wdXQgY29tcG9uZW50IGlzIG5vdyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc2xhc2ggZXhjZXB0IHRoZSBwb3NzaWJsZSBmaXJzdCBwbGFpbiBwcm90b2NvbCBwYXJ0LlxuXG4gICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGJlZm9yZSBwYXJhbWV0ZXJzIG9yIGhhc2hcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFwvKFxcP3wmfCNbXiFdKS9nLCAnJDEnKTtcblxuICAgIC8vIHJlcGxhY2UgPyBpbiBwYXJhbWV0ZXJzIHdpdGggJlxuICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnPycpO1xuICAgIHN0ciA9IHBhcnRzLnNoaWZ0KCkgKyAocGFydHMubGVuZ3RoID4gMCA/ICc/JzogJycpICsgcGFydHMuam9pbignJicpO1xuXG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlucHV0O1xuXG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICBpbnB1dCA9IGFyZ3VtZW50c1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZShpbnB1dCk7XG4gIH07XG5cbn0pO1xuIiwiLy8gQXhpb3MgdjEuNy40IENvcHlyaWdodCAoYykgMjAyNCBNYXR0IFphYnJpc2tpZSBhbmQgY29udHJpYnV0b3JzXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcblxuY29uc3Qga2luZE9mID0gKGNhY2hlID0+IHRoaW5nID0+IHtcbiAgICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3Qga2luZE9mVGVzdCA9ICh0eXBlKSA9PiB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAodGhpbmcpID0+IGtpbmRPZih0aGluZykgPT09IHR5cGVcbn07XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8IChcbiAgICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiAoXG4gICAgICAgIChraW5kID0ga2luZE9mKHRoaW5nKSkgPT09ICdmb3JtZGF0YScgfHxcbiAgICAgICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZVxuICAgICAgICAoa2luZCA9PT0gJ29iamVjdCcgJiYgaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJylcbiAgICAgIClcbiAgICApXG4gIClcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG5jb25zdCBbaXNSZWFkYWJsZVN0cmVhbSwgaXNSZXF1ZXN0LCBpc1Jlc3BvbnNlLCBpc0hlYWRlcnNdID0gWydSZWFkYWJsZVN0cmVhbScsICdSZXF1ZXN0JywgJ1Jlc3BvbnNlJywgJ0hlYWRlcnMnXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBhcmd1bWVudHNbaV0gJiYgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHthbGxPd25LZXlzfT0ge30pID0+IHtcbiAgZm9yRWFjaChiLCAodmFsLCBrZXkpID0+IHtcbiAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSwge2FsbE93bktleXN9KTtcbiAgcmV0dXJuIGE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5jb25zdCBzdHJpcEJPTSA9IChjb250ZW50KSA9PiB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufTtcblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59O1xuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT4ge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoVHlwZWRBcnJheSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiB0aGluZyA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl07XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59O1xuXG4vKipcbiAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8Ym9vbGVhbj59XG4gKi9cbmNvbnN0IG1hdGNoQWxsID0gKHJlZ0V4cCwgc3RyKSA9PiB7XG4gIGxldCBtYXRjaGVzO1xuICBjb25zdCBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufTtcblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXFwnJyArIG5hbWUgKyAnXFwnJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmNvbnN0IHRvRmluaXRlTnVtYmVyID0gKHZhbHVlLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlID0gK3ZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufTtcblxuY29uc3QgQUxQSEEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xuXG5jb25zdCBESUdJVCA9ICcwMTIzNDU2Nzg5JztcblxuY29uc3QgQUxQSEFCRVQgPSB7XG4gIERJR0lULFxuICBBTFBIQSxcbiAgQUxQSEFfRElHSVQ6IEFMUEhBICsgQUxQSEEudG9VcHBlckNhc2UoKSArIERJR0lUXG59O1xuXG5jb25zdCBnZW5lcmF0ZVN0cmluZyA9IChzaXplID0gMTYsIGFscGhhYmV0ID0gQUxQSEFCRVQuQUxQSEFfRElHSVQpID0+IHtcbiAgbGV0IHN0ciA9ICcnO1xuICBjb25zdCB7bGVuZ3RofSA9IGFscGhhYmV0O1xuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgc3RyICs9IGFscGhhYmV0W01hdGgucmFuZG9tKCkgKiBsZW5ndGh8MF07XG4gIH1cblxuICByZXR1cm4gc3RyO1xufTtcblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pO1xufVxuXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcblxuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZighKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH07XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59O1xuXG5jb25zdCBpc0FzeW5jRm4gPSBraW5kT2ZUZXN0KCdBc3luY0Z1bmN0aW9uJyk7XG5cbmNvbnN0IGlzVGhlbmFibGUgPSAodGhpbmcpID0+XG4gIHRoaW5nICYmIChpc09iamVjdCh0aGluZykgfHwgaXNGdW5jdGlvbih0aGluZykpICYmIGlzRnVuY3Rpb24odGhpbmcudGhlbikgJiYgaXNGdW5jdGlvbih0aGluZy5jYXRjaCk7XG5cbi8vIG9yaWdpbmFsIGNvZGVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EaWdpdGFsQnJhaW5KUy9BeGlvc1Byb21pc2UvYmxvYi8xNmRlYWIxMzcxMGVjMDk3Nzk5MjIxMzFmM2ZhNTk1NDMyMGY4M2FiL2xpYi91dGlscy5qcyNMMTEtTDM0XG5cbmNvbnN0IF9zZXRJbW1lZGlhdGUgPSAoKHNldEltbWVkaWF0ZVN1cHBvcnRlZCwgcG9zdE1lc3NhZ2VTdXBwb3J0ZWQpID0+IHtcbiAgaWYgKHNldEltbWVkaWF0ZVN1cHBvcnRlZCkge1xuICAgIHJldHVybiBzZXRJbW1lZGlhdGU7XG4gIH1cblxuICByZXR1cm4gcG9zdE1lc3NhZ2VTdXBwb3J0ZWQgPyAoKHRva2VuLCBjYWxsYmFja3MpID0+IHtcbiAgICBfZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsICh7c291cmNlLCBkYXRhfSkgPT4ge1xuICAgICAgaWYgKHNvdXJjZSA9PT0gX2dsb2JhbCAmJiBkYXRhID09PSB0b2tlbikge1xuICAgICAgICBjYWxsYmFja3MubGVuZ3RoICYmIGNhbGxiYWNrcy5zaGlmdCgpKCk7XG4gICAgICB9XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgcmV0dXJuIChjYikgPT4ge1xuICAgICAgY2FsbGJhY2tzLnB1c2goY2IpO1xuICAgICAgX2dsb2JhbC5wb3N0TWVzc2FnZSh0b2tlbiwgXCIqXCIpO1xuICAgIH1cbiAgfSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLCBbXSkgOiAoY2IpID0+IHNldFRpbWVvdXQoY2IpO1xufSkoXG4gIHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicsXG4gIGlzRnVuY3Rpb24oX2dsb2JhbC5wb3N0TWVzc2FnZSlcbik7XG5cbmNvbnN0IGFzYXAgPSB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgIT09ICd1bmRlZmluZWQnID9cbiAgcXVldWVNaWNyb3Rhc2suYmluZChfZ2xvYmFsKSA6ICggdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MubmV4dFRpY2sgfHwgX3NldEltbWVkaWF0ZSk7XG5cbi8vICoqKioqKioqKioqKioqKioqKioqKlxuXG52YXIgdXRpbHMkMSA9IHtcbiAgaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZyxcbiAgaXNOdW1iZXIsXG4gIGlzQm9vbGVhbixcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVxdWVzdCxcbiAgaXNSZXNwb25zZSxcbiAgaXNIZWFkZXJzLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlLFxuICBpc0ZpbGUsXG4gIGlzQmxvYixcbiAgaXNSZWdFeHAsXG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoLFxuICBtZXJnZSxcbiAgZXh0ZW5kLFxuICB0cmltLFxuICBzdHJpcEJPTSxcbiAgaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdCxcbiAga2luZE9mLFxuICBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aCxcbiAgdG9BcnJheSxcbiAgZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHksXG4gIGhhc093blByb3A6IGhhc093blByb3BlcnR5LCAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvblxuICByZWR1Y2VEZXNjcmlwdG9ycyxcbiAgZnJlZXplTWV0aG9kcyxcbiAgdG9PYmplY3RTZXQsXG4gIHRvQ2FtZWxDYXNlLFxuICBub29wLFxuICB0b0Zpbml0ZU51bWJlcixcbiAgZmluZEtleSxcbiAgZ2xvYmFsOiBfZ2xvYmFsLFxuICBpc0NvbnRleHREZWZpbmVkLFxuICBBTFBIQUJFVCxcbiAgZ2VuZXJhdGVTdHJpbmcsXG4gIGlzU3BlY0NvbXBsaWFudEZvcm0sXG4gIHRvSlNPTk9iamVjdCxcbiAgaXNBc3luY0ZuLFxuICBpc1RoZW5hYmxlLFxuICBzZXRJbW1lZGlhdGU6IF9zZXRJbW1lZGlhdGUsXG4gIGFzYXBcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBBeGlvc0Vycm9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzJDEuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMkMS50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfVxufSk7XG5cbmNvbnN0IHByb3RvdHlwZSQxID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG5jb25zdCBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJyxcbiAgJ0VSUl9OT1RfU1VQUE9SVCcsXG4gICdFUlJfSU5WQUxJRF9VUkwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXS5mb3JFYWNoKGNvZGUgPT4ge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSQxLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSAoZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSA9PiB7XG4gIGNvbnN0IGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSQxKTtcblxuICB1dGlscyQxLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSwgcHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AgIT09ICdpc0F4aW9zRXJyb3InO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG52YXIgaHR0cEFkYXB0ZXIgPSBudWxsO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzJDEuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMkMS5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMkMS5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzJDEuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscyQxLnRvRmxhdE9iamVjdCh1dGlscyQxLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMkMS5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMkMS50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzJDEuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscyQxLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMkMS5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzJDEuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMkMS5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMkMS5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzJDEuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMkMS5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMkMS50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMkMS5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzJDEuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscyQxLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscyQxLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzJDEuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscyQxLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSQxKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlJDEpO1xuICB9IDogZW5jb2RlJDE7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgXG4gIGNvbnN0IF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyJDEgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG5cbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcblxudmFyIFVSTFNlYXJjaFBhcmFtcyQxID0gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcblxudmFyIEZvcm1EYXRhJDEgPSB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRm9ybURhdGEgOiBudWxsO1xuXG52YXIgQmxvYiQxID0gdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnID8gQmxvYiA6IG51bGw7XG5cbnZhciBwbGF0Zm9ybSQxID0ge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcyQxLFxuICAgIEZvcm1EYXRhOiBGb3JtRGF0YSQxLFxuICAgIEJsb2I6IEJsb2IkMVxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcblxuY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSAoXG4gIChwcm9kdWN0KSA9PiB7XG4gICAgcmV0dXJuIGhhc0Jyb3dzZXJFbnYgJiYgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKHByb2R1Y3QpIDwgMFxuICB9KSh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmNvbnN0IG9yaWdpbiA9IGhhc0Jyb3dzZXJFbnYgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYgfHwgJ2h0dHA6Ly9sb2NhbGhvc3QnO1xuXG52YXIgdXRpbHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgaGFzQnJvd3NlckVudjogaGFzQnJvd3NlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OiBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudjogaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBvcmlnaW46IG9yaWdpblxufSk7XG5cbnZhciBwbGF0Zm9ybSA9IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtJDFcbn07XG5cbmZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwgT2JqZWN0LmFzc2lnbih7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24odmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscyQxLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpKTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J11cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMkMS5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMkMS5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscyQxLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscyQxLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvblxuICogb2YgdGhlIGlucHV0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyc2VyIC0gQSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmNvZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYSBzdHJpbmcuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSByYXdWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzJDEudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnLCAnZmV0Y2gnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMkMS5pc09iamVjdChkYXRhKTtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMkMS5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscyQxLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNCbG9iKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0oZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMkMS5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAodXRpbHMkMS5pc1Jlc3BvbnNlKGRhdGEpIHx8IHV0aWxzJDEuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMkMS5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscyQxLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgKG1ldGhvZCkgPT4ge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG52YXIgZGVmYXVsdHMkMSA9IGRlZmF1bHRzO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzJDEudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xudmFyIHBhcnNlSGVhZGVycyA9IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzJDEuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMkMS50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscyQxLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZih1dGlscyQxLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzSGVhZGVycyhoZWFkZXIpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBoZWFkZXIuZW50cmllcygpKSB7XG4gICAgICAgIHNldEhlYWRlcih2YWx1ZSwga2V5LCByZXdyaXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzJDEuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoa2V5ICYmIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMkMS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1skaW50ZXJuYWxzXSA9ICh0aGlzWyRpbnRlcm5hbHNdID0ge1xuICAgICAgYWNjZXNzb3JzOiB7fVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMkMS5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzJDEucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHt2YWx1ZX0sIGtleSkgPT4ge1xuICBsZXQgbWFwcGVkID0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7IC8vIG1hcCBgc2V0YCA9PiBgU2V0YFxuICByZXR1cm4ge1xuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gICAgc2V0KGhlYWRlclZhbHVlKSB7XG4gICAgICB0aGlzW21hcHBlZF0gPSBoZWFkZXJWYWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG51dGlscyQxLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzKTtcblxudmFyIEF4aW9zSGVhZGVycyQxID0gQXhpb3NIZWFkZXJzO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcGFyYW0gez9PYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZm5zLCByZXNwb25zZSkge1xuICBjb25zdCBjb25maWcgPSB0aGlzIHx8IGRlZmF1bHRzJDE7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzJDEuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbmZpZywgZGF0YSwgaGVhZGVycy5ub3JtYWxpemUoKSwgcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBoZWFkZXJzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge0NhbmNlbGVkRXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgdGhpcy5uYW1lID0gJ0NhbmNlbGVkRXJyb3InO1xufVxuXG51dGlscyQxLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5mdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbi8qKlxuICogVGhyb3R0bGUgZGVjb3JhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtOdW1iZXJ9IGZyZXFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmbiwgZnJlcSkge1xuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgbGV0IHRocmVzaG9sZCA9IDEwMDAgLyBmcmVxO1xuICBsZXQgbGFzdEFyZ3M7XG4gIGxldCB0aW1lcjtcblxuICBjb25zdCBpbnZva2UgPSAoYXJncywgbm93ID0gRGF0ZS5ub3coKSkgPT4ge1xuICAgIHRpbWVzdGFtcCA9IG5vdztcbiAgICBsYXN0QXJncyA9IG51bGw7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgfTtcblxuICBjb25zdCB0aHJvdHRsZWQgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcGFzc2VkID0gbm93IC0gdGltZXN0YW1wO1xuICAgIGlmICggcGFzc2VkID49IHRocmVzaG9sZCkge1xuICAgICAgaW52b2tlKGFyZ3MsIG5vdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RBcmdzID0gYXJncztcbiAgICAgIGlmICghdGltZXIpIHtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgICAgaW52b2tlKGxhc3RBcmdzKTtcbiAgICAgICAgfSwgdGhyZXNob2xkIC0gcGFzc2VkKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZmx1c2ggPSAoKSA9PiBsYXN0QXJncyAmJiBpbnZva2UobGFzdEFyZ3MpO1xuXG4gIHJldHVybiBbdGhyb3R0bGVkLCBmbHVzaF07XG59XG5cbmNvbnN0IHByb2dyZXNzRXZlbnRSZWR1Y2VyID0gKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtLCBmcmVxID0gMykgPT4ge1xuICBsZXQgYnl0ZXNOb3RpZmllZCA9IDA7XG4gIGNvbnN0IF9zcGVlZG9tZXRlciA9IHNwZWVkb21ldGVyKDUwLCAyNTApO1xuXG4gIHJldHVybiB0aHJvdHRsZShlID0+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBlLmxvYWRlZDtcbiAgICBjb25zdCB0b3RhbCA9IGUubGVuZ3RoQ29tcHV0YWJsZSA/IGUudG90YWwgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQ7XG4gICAgY29uc3QgcmF0ZSA9IF9zcGVlZG9tZXRlcihwcm9ncmVzc0J5dGVzKTtcbiAgICBjb25zdCBpblJhbmdlID0gbG9hZGVkIDw9IHRvdGFsO1xuXG4gICAgYnl0ZXNOb3RpZmllZCA9IGxvYWRlZDtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IChsb2FkZWQgLyB0b3RhbCkgOiB1bmRlZmluZWQsXG4gICAgICBieXRlczogcHJvZ3Jlc3NCeXRlcyxcbiAgICAgIHJhdGU6IHJhdGUgPyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXN0aW1hdGVkOiByYXRlICYmIHRvdGFsICYmIGluUmFuZ2UgPyAodG90YWwgLSBsb2FkZWQpIC8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50OiBlLFxuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdG90YWwgIT0gbnVsbCxcbiAgICAgIFtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXTogdHJ1ZVxuICAgIH07XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfSwgZnJlcSk7XG59O1xuXG5jb25zdCBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yID0gKHRvdGFsLCB0aHJvdHRsZWQpID0+IHtcbiAgY29uc3QgbGVuZ3RoQ29tcHV0YWJsZSA9IHRvdGFsICE9IG51bGw7XG5cbiAgcmV0dXJuIFsobG9hZGVkKSA9PiB0aHJvdHRsZWRbMF0oe1xuICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgdG90YWwsXG4gICAgbG9hZGVkXG4gIH0pLCB0aHJvdHRsZWRbMV1dO1xufTtcblxuY29uc3QgYXN5bmNEZWNvcmF0b3IgPSAoZm4pID0+ICguLi5hcmdzKSA9PiB1dGlscyQxLmFzYXAoKCkgPT4gZm4oLi4uYXJncykpO1xuXG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4vLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICBjb25zdCBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBjb25zdCB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsZXQgb3JpZ2luVVJMO1xuXG4gICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdHMgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgbGV0IGhyZWYgPSB1cmw7XG5cbiAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgfVxuXG4gICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9ICh1dGlscyQxLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcblxudmFyIGNvb2tpZXMgPSBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICB7XG4gICAgd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICBjb25zdCBjb29raWUgPSBbbmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSldO1xuXG4gICAgICB1dGlscyQxLmlzTnVtYmVyKGV4cGlyZXMpICYmIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcblxuICAgICAgdXRpbHMkMS5pc1N0cmluZyhwYXRoKSAmJiBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG5cbiAgICAgIHV0aWxzJDEuaXNTdHJpbmcoZG9tYWluKSAmJiBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuXG4gICAgICBzZWN1cmUgPT09IHRydWUgJiYgY29va2llLnB1c2goJ3NlY3VyZScpO1xuXG4gICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICB9LFxuXG4gICAgcmVhZChuYW1lKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgIH0sXG5cbiAgICByZW1vdmUobmFtZSkge1xuICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICB9XG4gIH1cblxuICA6XG5cbiAgLy8gTm9uLXN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICB7XG4gICAgd3JpdGUoKSB7fSxcbiAgICByZWFkKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICByZW1vdmUoKSB7fVxuICB9O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8/XFwvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xuZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMkMSA/IHsgLi4udGhpbmcgfSA6IHRoaW5nO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICBjb25zdCBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSwgY2FzZWxlc3MpIHtcbiAgICBpZiAodXRpbHMkMS5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMkMS5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscyQxLm1lcmdlLmNhbGwoe2Nhc2VsZXNzfSwgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscyQxLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKGEsIGIsIGNhc2VsZXNzKSB7XG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYik7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYikgPT4gbWVyZ2VEZWVwUHJvcGVydGllcyhoZWFkZXJzVG9PYmplY3QoYSksIGhlYWRlcnNUb09iamVjdChiKSwgdHJ1ZSlcbiAgfTtcblxuICB1dGlscyQxLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnMSwgY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIGNvbnN0IG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IG1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0sIHByb3ApO1xuICAgICh1dGlscyQxLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuXG52YXIgcmVzb2x2ZUNvbmZpZyA9IChjb25maWcpID0+IHtcbiAgY29uc3QgbmV3Q29uZmlnID0gbWVyZ2VDb25maWcoe30sIGNvbmZpZyk7XG5cbiAgbGV0IHtkYXRhLCB3aXRoWFNSRlRva2VuLCB4c3JmSGVhZGVyTmFtZSwgeHNyZkNvb2tpZU5hbWUsIGhlYWRlcnMsIGF1dGh9ID0gbmV3Q29uZmlnO1xuXG4gIG5ld0NvbmZpZy5oZWFkZXJzID0gaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oaGVhZGVycyk7XG5cbiAgbmV3Q29uZmlnLnVybCA9IGJ1aWxkVVJMKGJ1aWxkRnVsbFBhdGgobmV3Q29uZmlnLmJhc2VVUkwsIG5ld0NvbmZpZy51cmwpLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG5cbiAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICBpZiAoYXV0aCkge1xuICAgIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgK1xuICAgICAgYnRvYSgoYXV0aC51c2VybmFtZSB8fCAnJykgKyAnOicgKyAoYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhdXRoLnBhc3N3b3JkKSkgOiAnJykpXG4gICAgKTtcbiAgfVxuXG4gIGxldCBjb250ZW50VHlwZTtcblxuICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGRhdGEpKSB7XG4gICAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiB8fCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUodW5kZWZpbmVkKTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH0gZWxzZSBpZiAoKGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpKSAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIGZpeCBzZW1pY29sb24gZHVwbGljYXRpb24gaXNzdWUgZm9yIFJlYWN0TmF0aXZlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uXG4gICAgICBjb25zdCBbdHlwZSwgLi4udG9rZW5zXSA9IGNvbnRlbnRUeXBlID8gY29udGVudFR5cGUuc3BsaXQoJzsnKS5tYXAodG9rZW4gPT4gdG9rZW4udHJpbSgpKS5maWx0ZXIoQm9vbGVhbikgOiBbXTtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoW3R5cGUgfHwgJ211bHRpcGFydC9mb3JtLWRhdGEnLCAuLi50b2tlbnNdLmpvaW4oJzsgJykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB4c3JmIGhlYWRlclxuICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cblxuICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgd2l0aFhTUkZUb2tlbiAmJiB1dGlscyQxLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikgJiYgKHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKG5ld0NvbmZpZykpO1xuXG4gICAgaWYgKHdpdGhYU1JGVG9rZW4gfHwgKHdpdGhYU1JGVG9rZW4gIT09IGZhbHNlICYmIGlzVVJMU2FtZU9yaWdpbihuZXdDb25maWcudXJsKSkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgY29uc3QgeHNyZlZhbHVlID0geHNyZkhlYWRlck5hbWUgJiYgeHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKHhzcmZDb29raWVOYW1lKTtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICBoZWFkZXJzLnNldCh4c3JmSGVhZGVyTmFtZSwgeHNyZlZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3Q29uZmlnO1xufTtcblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxudmFyIHhockFkYXB0ZXIgPSBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNvbnN0IF9jb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShfY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuICAgIGxldCB7cmVzcG9uc2VUeXBlLCBvblVwbG9hZFByb2dyZXNzLCBvbkRvd25sb2FkUHJvZ3Jlc3N9ID0gX2NvbmZpZztcbiAgICBsZXQgb25DYW5jZWxlZDtcbiAgICBsZXQgdXBsb2FkVGhyb3R0bGVkLCBkb3dubG9hZFRocm90dGxlZDtcbiAgICBsZXQgZmx1c2hVcGxvYWQsIGZsdXNoRG93bmxvYWQ7XG5cbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZmx1c2hVcGxvYWQgJiYgZmx1c2hVcGxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG4gICAgICBmbHVzaERvd25sb2FkICYmIGZsdXNoRG93bmxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcblxuICAgICAgX2NvbmZpZy5zaWduYWwgJiYgX2NvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgcmVxdWVzdC5vcGVuKF9jb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIF9jb25maWcudXJsLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gX2NvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKFxuICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIF9jb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBfY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzJDEuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChfY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFfY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBfY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKG9uRG93bmxvYWRQcm9ncmVzcykge1xuICAgICAgKFtkb3dubG9hZFRocm90dGxlZCwgZmx1c2hEb3dubG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvbkRvd25sb2FkUHJvZ3Jlc3MsIHRydWUpKTtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBkb3dubG9hZFRocm90dGxlZCk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAob25VcGxvYWRQcm9ncmVzcyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgKFt1cGxvYWRUaHJvdHRsZWQsIGZsdXNoVXBsb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uVXBsb2FkUHJvZ3Jlc3MpKTtcblxuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB1cGxvYWRUaHJvdHRsZWQpO1xuXG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgZmx1c2hVcGxvYWQpO1xuICAgIH1cblxuICAgIGlmIChfY29uZmlnLmNhbmNlbFRva2VuIHx8IF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGNhbmNlbCA9PiB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIGlmIChfY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBfY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogX2NvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woX2NvbmZpZy51cmwpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIHBsYXRmb3JtLnByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhIHx8IG51bGwpO1xuICB9KTtcbn07XG5cbmNvbnN0IGNvbXBvc2VTaWduYWxzID0gKHNpZ25hbHMsIHRpbWVvdXQpID0+IHtcbiAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgbGV0IGFib3J0ZWQ7XG5cbiAgY29uc3Qgb25hYm9ydCA9IGZ1bmN0aW9uIChjYW5jZWwpIHtcbiAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgIGNvbnN0IGVyciA9IGNhbmNlbCBpbnN0YW5jZW9mIEVycm9yID8gY2FuY2VsIDogdGhpcy5yZWFzb247XG4gICAgICBjb250cm9sbGVyLmFib3J0KGVyciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IgPyBlcnIgOiBuZXcgQ2FuY2VsZWRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyKSk7XG4gICAgfVxuICB9O1xuXG4gIGxldCB0aW1lciA9IHRpbWVvdXQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgb25hYm9ydChuZXcgQXhpb3NFcnJvcihgdGltZW91dCAke3RpbWVvdXR9IG9mIG1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKTtcbiAgfSwgdGltZW91dCk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgaWYgKHNpZ25hbHMpIHtcbiAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgICBzaWduYWxzLmZvckVhY2goc2lnbmFsID0+IHtcbiAgICAgICAgc2lnbmFsICYmXG4gICAgICAgIChzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lciA/IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uYWJvcnQpIDogc2lnbmFsLnVuc3Vic2NyaWJlKG9uYWJvcnQpKTtcbiAgICAgIH0pO1xuICAgICAgc2lnbmFscyA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiBzaWduYWwgJiYgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gIGNvbnN0IHtzaWduYWx9ID0gY29udHJvbGxlcjtcblxuICBzaWduYWwudW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZTtcblxuICByZXR1cm4gW3NpZ25hbCwgKCkgPT4ge1xuICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBudWxsO1xuICB9XTtcbn07XG5cbnZhciBjb21wb3NlU2lnbmFscyQxID0gY29tcG9zZVNpZ25hbHM7XG5cbmNvbnN0IHN0cmVhbUNodW5rID0gZnVuY3Rpb24qIChjaHVuaywgY2h1bmtTaXplKSB7XG4gIGxldCBsZW4gPSBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gIGlmICghY2h1bmtTaXplIHx8IGxlbiA8IGNodW5rU2l6ZSkge1xuICAgIHlpZWxkIGNodW5rO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwb3MgPSAwO1xuICBsZXQgZW5kO1xuXG4gIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICBlbmQgPSBwb3MgKyBjaHVua1NpemU7XG4gICAgeWllbGQgY2h1bmsuc2xpY2UocG9zLCBlbmQpO1xuICAgIHBvcyA9IGVuZDtcbiAgfVxufTtcblxuY29uc3QgcmVhZEJ5dGVzID0gYXN5bmMgZnVuY3Rpb24qIChpdGVyYWJsZSwgY2h1bmtTaXplLCBlbmNvZGUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgIHlpZWxkKiBzdHJlYW1DaHVuayhBcnJheUJ1ZmZlci5pc1ZpZXcoY2h1bmspID8gY2h1bmsgOiAoYXdhaXQgZW5jb2RlKFN0cmluZyhjaHVuaykpKSwgY2h1bmtTaXplKTtcbiAgfVxufTtcblxuY29uc3QgdHJhY2tTdHJlYW0gPSAoc3RyZWFtLCBjaHVua1NpemUsIG9uUHJvZ3Jlc3MsIG9uRmluaXNoLCBlbmNvZGUpID0+IHtcbiAgY29uc3QgaXRlcmF0b3IgPSByZWFkQnl0ZXMoc3RyZWFtLCBjaHVua1NpemUsIGVuY29kZSk7XG5cbiAgbGV0IGJ5dGVzID0gMDtcbiAgbGV0IGRvbmU7XG4gIGxldCBfb25GaW5pc2ggPSAoZSkgPT4ge1xuICAgIGlmICghZG9uZSkge1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICBvbkZpbmlzaCAmJiBvbkZpbmlzaChlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgYXN5bmMgcHVsbChjb250cm9sbGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7ZG9uZSwgdmFsdWV9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICBfb25GaW5pc2goKTtcbiAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxlbiA9IHZhbHVlLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmIChvblByb2dyZXNzKSB7XG4gICAgICAgICAgbGV0IGxvYWRlZEJ5dGVzID0gYnl0ZXMgKz0gbGVuO1xuICAgICAgICAgIG9uUHJvZ3Jlc3MobG9hZGVkQnl0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheSh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9vbkZpbmlzaChlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfSxcbiAgICBjYW5jZWwocmVhc29uKSB7XG4gICAgICBfb25GaW5pc2gocmVhc29uKTtcbiAgICAgIHJldHVybiBpdGVyYXRvci5yZXR1cm4oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBoaWdoV2F0ZXJNYXJrOiAyXG4gIH0pXG59O1xuXG5jb25zdCBpc0ZldGNoU3VwcG9ydGVkID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXF1ZXN0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXNwb25zZSA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgPSBpc0ZldGNoU3VwcG9ydGVkICYmIHR5cGVvZiBSZWFkYWJsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJztcblxuLy8gdXNlZCBvbmx5IGluc2lkZSB0aGUgZmV0Y2ggYWRhcHRlclxuY29uc3QgZW5jb2RlVGV4dCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgKChlbmNvZGVyKSA9PiAoc3RyKSA9PiBlbmNvZGVyLmVuY29kZShzdHIpKShuZXcgVGV4dEVuY29kZXIoKSkgOlxuICAgIGFzeW5jIChzdHIpID0+IG5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShzdHIpLmFycmF5QnVmZmVyKCkpXG4pO1xuXG5jb25zdCB0ZXN0ID0gKGZuLCAuLi5hcmdzKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZm4oLi4uYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufTtcblxuY29uc3Qgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJiB0ZXN0KCgpID0+IHtcbiAgbGV0IGR1cGxleEFjY2Vzc2VkID0gZmFsc2U7XG5cbiAgY29uc3QgaGFzQ29udGVudFR5cGUgPSBuZXcgUmVxdWVzdChwbGF0Zm9ybS5vcmlnaW4sIHtcbiAgICBib2R5OiBuZXcgUmVhZGFibGVTdHJlYW0oKSxcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBnZXQgZHVwbGV4KCkge1xuICAgICAgZHVwbGV4QWNjZXNzZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuICdoYWxmJztcbiAgICB9LFxuICB9KS5oZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJyk7XG5cbiAgcmV0dXJuIGR1cGxleEFjY2Vzc2VkICYmICFoYXNDb250ZW50VHlwZTtcbn0pO1xuXG5jb25zdCBERUZBVUxUX0NIVU5LX1NJWkUgPSA2NCAqIDEwMjQ7XG5cbmNvbnN0IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmXG4gIHRlc3QoKCkgPT4gdXRpbHMkMS5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgnJykuYm9keSkpO1xuXG5cbmNvbnN0IHJlc29sdmVycyA9IHtcbiAgc3RyZWFtOiBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmICgocmVzKSA9PiByZXMuYm9keSlcbn07XG5cbmlzRmV0Y2hTdXBwb3J0ZWQgJiYgKCgocmVzKSA9PiB7XG4gIFsndGV4dCcsICdhcnJheUJ1ZmZlcicsICdibG9iJywgJ2Zvcm1EYXRhJywgJ3N0cmVhbSddLmZvckVhY2godHlwZSA9PiB7XG4gICAgIXJlc29sdmVyc1t0eXBlXSAmJiAocmVzb2x2ZXJzW3R5cGVdID0gdXRpbHMkMS5pc0Z1bmN0aW9uKHJlc1t0eXBlXSkgPyAocmVzKSA9PiByZXNbdHlwZV0oKSA6XG4gICAgICAoXywgY29uZmlnKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBSZXNwb25zZSB0eXBlICcke3R5cGV9JyBpcyBub3Qgc3VwcG9ydGVkYCwgQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQsIGNvbmZpZyk7XG4gICAgICB9KTtcbiAgfSk7XG59KShuZXcgUmVzcG9uc2UpKTtcblxuY29uc3QgZ2V0Qm9keUxlbmd0aCA9IGFzeW5jIChib2R5KSA9PiB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNCbG9iKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZTtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNTcGVjQ29tcGxpYW50Rm9ybShib2R5KSkge1xuICAgIHJldHVybiAoYXdhaXQgbmV3IFJlcXVlc3QoYm9keSkuYXJyYXlCdWZmZXIoKSkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkgfHwgdXRpbHMkMS5pc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMoYm9keSkpIHtcbiAgICBib2R5ID0gYm9keSArICcnO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1N0cmluZyhib2R5KSkge1xuICAgIHJldHVybiAoYXdhaXQgZW5jb2RlVGV4dChib2R5KSkuYnl0ZUxlbmd0aDtcbiAgfVxufTtcblxuY29uc3QgcmVzb2x2ZUJvZHlMZW5ndGggPSBhc3luYyAoaGVhZGVycywgYm9keSkgPT4ge1xuICBjb25zdCBsZW5ndGggPSB1dGlscyQxLnRvRmluaXRlTnVtYmVyKGhlYWRlcnMuZ2V0Q29udGVudExlbmd0aCgpKTtcblxuICByZXR1cm4gbGVuZ3RoID09IG51bGwgPyBnZXRCb2R5TGVuZ3RoKGJvZHkpIDogbGVuZ3RoO1xufTtcblxudmFyIGZldGNoQWRhcHRlciA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKGFzeW5jIChjb25maWcpID0+IHtcbiAgbGV0IHtcbiAgICB1cmwsXG4gICAgbWV0aG9kLFxuICAgIGRhdGEsXG4gICAgc2lnbmFsLFxuICAgIGNhbmNlbFRva2VuLFxuICAgIHRpbWVvdXQsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgcmVzcG9uc2VUeXBlLFxuICAgIGhlYWRlcnMsXG4gICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICBmZXRjaE9wdGlvbnNcbiAgfSA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcblxuICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgbGV0IFtjb21wb3NlZFNpZ25hbCwgc3RvcFRpbWVvdXRdID0gKHNpZ25hbCB8fCBjYW5jZWxUb2tlbiB8fCB0aW1lb3V0KSA/XG4gICAgY29tcG9zZVNpZ25hbHMkMShbc2lnbmFsLCBjYW5jZWxUb2tlbl0sIHRpbWVvdXQpIDogW107XG5cbiAgbGV0IGZpbmlzaGVkLCByZXF1ZXN0O1xuXG4gIGNvbnN0IG9uRmluaXNoID0gKCkgPT4ge1xuICAgICFmaW5pc2hlZCAmJiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbXBvc2VkU2lnbmFsICYmIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG5cbiAgICBmaW5pc2hlZCA9IHRydWU7XG4gIH07XG5cbiAgbGV0IHJlcXVlc3RDb250ZW50TGVuZ3RoO1xuXG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gJiYgbWV0aG9kICE9PSAnZ2V0JyAmJiBtZXRob2QgIT09ICdoZWFkJyAmJlxuICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgKSB7XG4gICAgICBsZXQgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgIGR1cGxleDogXCJoYWxmXCJcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgY29udGVudFR5cGVIZWFkZXI7XG5cbiAgICAgIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZGF0YSkgJiYgKGNvbnRlbnRUeXBlSGVhZGVyID0gX3JlcXVlc3QuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSkge1xuICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlSGVhZGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9yZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgcmVxdWVzdENvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25VcGxvYWRQcm9ncmVzcykpXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YSA9IHRyYWNrU3RyZWFtKF9yZXF1ZXN0LmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgZmx1c2gsIGVuY29kZVRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdXRpbHMkMS5pc1N0cmluZyh3aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHMgPSB3aXRoQ3JlZGVudGlhbHMgPyAnaW5jbHVkZScgOiAnb21pdCc7XG4gICAgfVxuXG4gICAgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgLi4uZmV0Y2hPcHRpb25zLFxuICAgICAgc2lnbmFsOiBjb21wb3NlZFNpZ25hbCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLm5vcm1hbGl6ZSgpLnRvSlNPTigpLFxuICAgICAgYm9keTogZGF0YSxcbiAgICAgIGR1cGxleDogXCJoYWxmXCIsXG4gICAgICBjcmVkZW50aWFsczogd2l0aENyZWRlbnRpYWxzXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0KTtcblxuICAgIGNvbnN0IGlzU3RyZWFtUmVzcG9uc2UgPSBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChyZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3Jlc3BvbnNlJyk7XG5cbiAgICBpZiAoc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAob25Eb3dubG9hZFByb2dyZXNzIHx8IGlzU3RyZWFtUmVzcG9uc2UpKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICAgIFsnc3RhdHVzJywgJ3N0YXR1c1RleHQnLCAnaGVhZGVycyddLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgIG9wdGlvbnNbcHJvcF0gPSByZXNwb25zZVtwcm9wXTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNwb25zZUNvbnRlbnRMZW5ndGggPSB1dGlscyQxLnRvRmluaXRlTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpKTtcblxuICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IG9uRG93bmxvYWRQcm9ncmVzcyAmJiBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICByZXNwb25zZUNvbnRlbnRMZW5ndGgsXG4gICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uRG93bmxvYWRQcm9ncmVzcyksIHRydWUpXG4gICAgICApIHx8IFtdO1xuXG4gICAgICByZXNwb25zZSA9IG5ldyBSZXNwb25zZShcbiAgICAgICAgdHJhY2tTdHJlYW0ocmVzcG9uc2UuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCAoKSA9PiB7XG4gICAgICAgICAgZmx1c2ggJiYgZmx1c2goKTtcbiAgICAgICAgICBpc1N0cmVhbVJlc3BvbnNlICYmIG9uRmluaXNoKCk7XG4gICAgICAgIH0sIGVuY29kZVRleHQpLFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSB8fCAndGV4dCc7XG5cbiAgICBsZXQgcmVzcG9uc2VEYXRhID0gYXdhaXQgcmVzb2x2ZXJzW3V0aWxzJDEuZmluZEtleShyZXNvbHZlcnMsIHJlc3BvbnNlVHlwZSkgfHwgJ3RleHQnXShyZXNwb25zZSwgY29uZmlnKTtcblxuICAgICFpc1N0cmVhbVJlc3BvbnNlICYmIG9uRmluaXNoKCk7XG5cbiAgICBzdG9wVGltZW91dCAmJiBzdG9wVGltZW91dCgpO1xuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBoZWFkZXJzOiBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpLFxuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9KTtcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBvbkZpbmlzaCgpO1xuXG4gICAgaWYgKGVyciAmJiBlcnIubmFtZSA9PT0gJ1R5cGVFcnJvcicgJiYgL2ZldGNoL2kudGVzdChlcnIubWVzc2FnZSkpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSxcbiAgICAgICAge1xuICAgICAgICAgIGNhdXNlOiBlcnIuY2F1c2UgfHwgZXJyXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG5cbiAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZXJyLCBlcnIgJiYgZXJyLmNvZGUsIGNvbmZpZywgcmVxdWVzdCk7XG4gIH1cbn0pO1xuXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyLFxuICBmZXRjaDogZmV0Y2hBZGFwdGVyXG59O1xuXG51dGlscyQxLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscyQxLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxudmFyIGFkYXB0ZXJzID0ge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzJDEuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgICBjb25zdCB7bGVuZ3RofSA9IGFkYXB0ZXJzO1xuICAgIGxldCBuYW1lT3JBZGFwdGVyO1xuICAgIGxldCBhZGFwdGVyO1xuXG4gICAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgICBsZXQgaWQ7XG5cbiAgICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFkYXB0ZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJlamVjdGVkUmVhc29uc1tpZCB8fCAnIycgKyBpXSA9IGFkYXB0ZXI7XG4gICAgfVxuXG4gICAgaWYgKCFhZGFwdGVyKSB7XG5cbiAgICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpXG4gICAgICAgIC5tYXAoKFtpZCwgc3RhdGVdKSA9PiBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgICAoc3RhdGUgPT09IGZhbHNlID8gJ2lzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50JyA6ICdpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCcpXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBzID0gbGVuZ3RoID9cbiAgICAgICAgKHJlYXNvbnMubGVuZ3RoID4gMSA/ICdzaW5jZSA6XFxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXFxuJykgOiAnICcgKyByZW5kZXJSZWFzb24ocmVhc29uc1swXSkpIDpcbiAgICAgICAgJ2FzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkJztcblxuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRhcHRlcjtcbiAgfSxcbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnNcbn07XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMkMS5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn1cblxuY29uc3QgVkVSU0lPTiA9IFwiMS43LjRcIjtcblxuY29uc3QgdmFsaWRhdG9ycyQxID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzJDFbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG5jb25zdCBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycyQxLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbGlkYXRvciA9IHtcbiAgYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yczogdmFsaWRhdG9ycyQxXG59O1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyJDEoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyJDEoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICBhc3luYyByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbGV0IGR1bW15O1xuXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlID8gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZHVtbXkgPSB7fSkgOiAoZHVtbXkgPSBuZXcgRXJyb3IoKSk7XG5cbiAgICAgICAgLy8gc2xpY2Ugb2ZmIHRoZSBFcnJvcjogLi4uIGxpbmVcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBkdW1teS5zdGFjayA/IGR1bW15LnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sICcnKSA6ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghZXJyLnN0YWNrKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgICAgIC8vIG1hdGNoIHdpdGhvdXQgdGhlIDIgdG9wIHN0YWNrIGxpbmVzXG4gICAgICAgICAgfSBlbHNlIGlmIChzdGFjayAmJiAhU3RyaW5nKGVyci5zdGFjaykuZW5kc1dpdGgoc3RhY2sucmVwbGFjZSgvXi4rXFxuLitcXG4vLCAnJykpKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgKz0gJ1xcbicgKyBzdGFjaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgdGhlIGNhc2Ugd2hlcmUgXCJzdGFja1wiIGlzIGFuIHVuLXdyaXRhYmxlIHByb3BlcnR5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihwYXJhbXNTZXJpYWxpemVyKSkge1xuICAgICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplciA9IHtcbiAgICAgICAgICBzZXJpYWxpemU6IHBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscyQxLm1lcmdlKFxuICAgICAgaGVhZGVycy5jb21tb24sXG4gICAgICBoZWFkZXJzW2NvbmZpZy5tZXRob2RdXG4gICAgKTtcblxuICAgIGhlYWRlcnMgJiYgdXRpbHMkMS5mb3JFYWNoKFxuICAgICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgICAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscyQxLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMkMS5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbnZhciBBeGlvcyQxID0gQXhpb3M7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMge0NhbmNlbFRva2VufVxuICovXG5jbGFzcyBDYW5jZWxUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlUHJvbWlzZTtcblxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuKGNhbmNlbCA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gb25mdWxmaWxsZWQgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbFxuICAgIH07XG4gIH1cbn1cblxudmFyIENhbmNlbFRva2VuJDEgPSBDYW5jZWxUb2tlbjtcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscyQxLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59XG5cbmNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG52YXIgSHR0cFN0YXR1c0NvZGUkMSA9IEh0dHBTdGF0dXNDb2RlO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MkMShkZWZhdWx0Q29uZmlnKTtcbiAgY29uc3QgaW5zdGFuY2UgPSBiaW5kKEF4aW9zJDEucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzJDEuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcyQxLnByb3RvdHlwZSwgY29udGV4dCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMkMS5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyQxKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zJDE7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IENhbmNlbGVkRXJyb3I7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuJDE7XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDE7XG5cbmF4aW9zLmZvcm1Ub0pTT04gPSB0aGluZyA9PiBmb3JtRGF0YVRvSlNPTih1dGlscyQxLmlzSFRNTEZvcm0odGhpbmcpID8gbmV3IEZvcm1EYXRhKHRoaW5nKSA6IHRoaW5nKTtcblxuYXhpb3MuZ2V0QWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXI7XG5cbmF4aW9zLkh0dHBTdGF0dXNDb2RlID0gSHR0cFN0YXR1c0NvZGUkMTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXhpb3MuY2pzLm1hcFxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG5cdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm5tZCA9IChtb2R1bGUpID0+IHtcblx0bW9kdWxlLnBhdGhzID0gW107XG5cdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0cmV0dXJuIG1vZHVsZTtcbn07IiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzOSk7XG4iXSwibmFtZXMiOlsiRG9tYWluIiwiZGF0YSIsInJlY2VpdmluZyIsInNlbmRpbmciLCJ0aGlzIiwibmFtZSIsInJlcXVpcmVfdGxzIiwic2tpcF92ZXJpZmljYXRpb24iLCJzdGF0ZSIsIndpbGRjYXJkIiwic3BhbV9hY3Rpb24iLCJjcmVhdGVkX2F0Iiwic210cF9wYXNzd29yZCIsInNtdHBfbG9naW4iLCJ0eXBlIiwicmVjZWl2aW5nX2Ruc19yZWNvcmRzIiwic2VuZGluZ19kbnNfcmVjb3JkcyIsImR5bmFtaWNQcm9wZXJ0aWVzIiwicmVkdWNlIiwiYWNjIiwicHJvcGVydHlOYW1lIiwiT2JqZWN0IiwiYXNzaWduIiwidXJsX2pvaW5fMSIsIl9faW1wb3J0RGVmYXVsdCIsInJlcXVpcmUiLCJFcnJvcl8xIiwiZG9tYWluXzEiLCJEb21haW5zQ2xpZW50IiwicmVxdWVzdCIsImRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IiwiZG9tYWluVGVtcGxhdGVzQ2xpZW50IiwiZG9tYWluVGFnc0NsaWVudCIsImRvbWFpbkNyZWRlbnRpYWxzIiwiZG9tYWluVGVtcGxhdGVzIiwiZG9tYWluVGFncyIsInByb3RvdHlwZSIsIl9oYW5kbGVCb29sVmFsdWVzIiwicHJvcHNGb3JSZXBsYWNlbWVudCIsInJlcGxhY2VkUHJvcHMiLCJrZXlzIiwia2V5IiwicHJvcCIsInZhbHVlIiwidG9TdHJpbmciLCJfX2Fzc2lnbiIsIl9wYXJzZU1lc3NhZ2UiLCJyZXNwb25zZSIsImJvZHkiLCJwYXJzZURvbWFpbkxpc3QiLCJpdGVtcyIsIm1hcCIsIml0ZW0iLCJkZWZhdWx0IiwiX3BhcnNlRG9tYWluIiwiZG9tYWluIiwiX3BhcnNlVHJhY2tpbmdTZXR0aW5ncyIsInRyYWNraW5nIiwiX3BhcnNlVHJhY2tpbmdVcGRhdGUiLCJsaXN0IiwicXVlcnkiLCJfdGhpcyIsImdldCIsInRoZW4iLCJyZXMiLCJjb25jYXQiLCJjcmVhdGUiLCJwb3N0T2JqIiwicG9zdFdpdGhGRCIsInVwZGF0ZSIsInB1dERhdGEiLCJwdXRXaXRoRkQiLCJ2ZXJpZnkiLCJwdXQiLCJkZXN0cm95IiwiZGVsZXRlIiwiZ2V0Q29ubmVjdGlvbiIsImNvbm5lY3Rpb24iLCJ1cGRhdGVDb25uZWN0aW9uIiwiZ2V0VHJhY2tpbmciLCJ1cGRhdGVUcmFja2luZyIsImFjdGl2ZSIsImdldFVzZXJEYXRhRXJyb3IiLCJnZXRJcHMiLCJfYSIsImFzc2lnbklwIiwiaXAiLCJkZWxldGVJcCIsImxpbmtJcFBvb2wiLCJwb29sSWQiLCJwb29sX2lkIiwidW5saW5rSXBQb2xsIiwicmVwbGFjZW1lbnQiLCJzZWFyY2hQYXJhbXMiLCJ1cGRhdGVES0lNQXV0aG9yaXR5Iiwic2VsZiIsInVwZGF0ZURLSU1TZWxlY3RvciIsImRraW1TZWxlY3RvciIsInVwZGF0ZVdlYlByZWZpeCIsIndlYlByZWZpeCIsIkRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IiwiYmFzZVJvdXRlIiwiX3BhcnNlRG9tYWluQ3JlZGVudGlhbHNMaXN0IiwidG90YWxDb3VudCIsInRvdGFsX2NvdW50IiwiX3BhcnNlTWVzc2FnZVJlc3BvbnNlIiwic3RhdHVzIiwibWVzc2FnZSIsIl9wYXJzZURlbGV0ZWRSZXNwb25zZSIsInNwZWMiLCJjcmVkZW50aWFsc0xvZ2luIiwiTmF2aWdhdGlvblRocnVQYWdlc18xIiwiRG9tYWluVGFnIiwidGFnSW5mbyIsInRhZyIsImRlc2NyaXB0aW9uIiwiRGF0ZSIsImV4cG9ydHMiLCJEb21haW5UYWdTdGF0aXN0aWMiLCJ0YWdTdGF0aXN0aWNJbmZvIiwic3RhcnQiLCJlbmQiLCJyZXNvbHV0aW9uIiwic3RhdHMiLCJzdGF0IiwidGltZSIsIkRvbWFpblRhZ3NDbGllbnQiLCJfc3VwZXIiLCJjYWxsIiwiX19leHRlbmRzIiwicGFyc2VMaXN0IiwicGFnZXMiLCJwYXJzZVBhZ2VMaW5rcyIsIl9wYXJzZVRhZ1N0YXRpc3RpYyIsInJlcXVlc3RMaXN0V2l0aFBhZ2VzIiwic3RhdGlzdGljIiwiY291bnRyaWVzIiwicHJvdmlkZXJzIiwiZGV2aWNlcyIsIkRvbWFpblRlbXBsYXRlSXRlbSIsImRvbWFpblRlbXBsYXRlRnJvbUFQSSIsImNyZWF0ZWRBdCIsImNyZWF0ZWRCeSIsImlkIiwidmVyc2lvbiIsInZlcnNpb25zIiwibGVuZ3RoIiwicmVzdWx0IiwiRG9tYWluVGVtcGxhdGVzQ2xpZW50IiwicGFyc2VDcmVhdGlvblJlc3BvbnNlIiwidGVtcGxhdGUiLCJwYXJzZUNyZWF0aW9uVmVyc2lvblJlc3BvbnNlIiwicGFyc2VNdXRhdGlvblJlc3BvbnNlIiwidGVtcGxhdGVOYW1lIiwicGFyc2VOb3RpZmljYXRpb25SZXNwb25zZSIsInBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UiLCJ0ZW1wbGF0ZVZlcnNpb24iLCJkIiwicGFyc2VMaXN0VGVtcGxhdGVWZXJzaW9ucyIsImRlc3Ryb3lBbGwiLCJjcmVhdGVWZXJzaW9uIiwiZ2V0VmVyc2lvbiIsInVwZGF0ZVZlcnNpb24iLCJkZXN0cm95VmVyc2lvbiIsImxpc3RWZXJzaW9ucyIsIkV2ZW50Q2xpZW50IiwiSXBQb29sc0NsaWVudCIsInBhcnNlSXBQb29sc1Jlc3BvbnNlIiwic2VudCIsInBhdGNoV2l0aEZEIiwiSXBzQ2xpZW50IiwicGFyc2VJcHNSZXNwb25zZSIsIkluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQiLCJwYXRoIiwiYXR0cmlidXRlTmFtZSIsIkluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQiLCJzdXBwb3J0ZWRfZmlsdGVycyIsIkluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQiLCJhdHRyaWJ1dGVzIiwiZmlsdGVycyIsInNoYXJpbmciLCJsb2dnZXIiLCJjb25zb2xlIiwiY29udmVydERhdGVUb1VUQyIsImlucHV0RGF0ZSIsIndhcm4iLCJ0b0lTT1N0cmluZyIsInByZXBhcmVRdWVyeURhdGEiLCJxdWVyeURhdGEiLCJwcmVwYXJlSW5ib3hQbGFjZW1lbnRzUmVzdWx0IiwiYm94IiwiaGFuZGxlZFNlZWRMaXN0RGF0ZXMiLCJ1cGRhdGVkX2F0Iiwic2hhcmluZ19leHBpcmVzX2F0IiwiQm94IiwibGFzdF9yZXN1bHRfYXQiLCJJRCIsImluYm94UGxhY2VtZW50c1Jlc3VsdCIsIklkIiwiaW5ib3hQbGFjZW1lbnRSZXN1bHQiLCJnZXRSZXN1bHRCeVNoYXJlSWQiLCJzaGFyZUlkIiwiSVBSU2hhcmluZ0NsaWVudCIsInByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHRTaGFyaW5nIiwiZXhwaXJlc19hdCIsImVuYWJsZWQiLCJTZWVkc0xpc3RzQ2xpZW50IiwicHJlcGFyZVJlc3VsdCIsInNlZWRMaXN0IiwicHJlcGFyZVNlZWRMaXN0Iiwic2VlZHMiLCJTZWVkcyIsInNlZWRJdGVtIiwiaGFuZGxlZFNlZWREYXRlcyIsIm1heF9lbWFpbF9jb3VudF9oaXRfYXQiLCJsYXN0X3NlbnRfdG9fYXQiLCJsYXN0X2RlbGl2ZXJlZF9hdCIsInVwZGF0ZWRTZWVkc0xpc3QiLCJzZWVkbGlzdCIsIkluYm94UGxhY2VtZW50c0NsaWVudCIsInNlZWRzTGlzdHNDbGllbnQiLCJyZXN1bHRzIiwic2VlZHNMaXN0cyIsInJ1blRlc3QiLCJwb3N0IiwiSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50IiwiaGFuZGxlZFByb3ZpZGVyRGF0ZXMiLCJSZXF1ZXN0XzEiLCJkb21haW5zQ2xpZW50XzEiLCJFdmVudHNfMSIsIlN0YXRzQ2xpZW50XzEiLCJTdXBwcmVzc2lvbnNDbGllbnRfMSIsIldlYmhvb2tzXzEiLCJNZXNzYWdlc18xIiwiUm91dGVzXzEiLCJ2YWxpZGF0ZV8xIiwiSVBzXzEiLCJJUFBvb2xzXzEiLCJtYWlsaW5nTGlzdHNfMSIsIm1haWxMaXN0TWVtYmVyc18xIiwiZG9tYWluc0NyZWRlbnRpYWxzXzEiLCJtdWx0aXBsZVZhbGlkYXRpb25fMSIsImRvbWFpbnNUZW1wbGF0ZXNfMSIsImRvbWFpbnNUYWdzXzEiLCJTdWJhY2NvdW50c18xIiwiU2VlZHNMaXN0c0NsaWVudF8xIiwiaW5ib3hQbGFjZW1lbnRzXzEiLCJJbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50XzEiLCJBdHRyaWJ1dGVzQ2xpZW50XzEiLCJGaWx0ZXJzQ2xpZW50XzEiLCJJbmJveFBsYWNlbWVudHNSZXN1bHRzU2hhcmluZ0NsaWVudF8xIiwiSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzXzEiLCJNZXRyaWNzQ2xpZW50XzEiLCJNYWlsZ3VuQ2xpZW50Iiwib3B0aW9ucyIsImZvcm1EYXRhIiwiY29uZmlnIiwidXJsIiwidXNlcm5hbWUiLCJFcnJvciIsIm1haWxMaXN0c01lbWJlcnMiLCJtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQiLCJJbmJveFBsYWNlbWVudHNSZXN1bHRzU2hhcmluZ0NsaWVudCIsInNlZWRzTGlzdHNBdHRyaWJ1dGVzIiwicmVzdWx0c0F0dHJpYnV0ZXNDbGllbnQiLCJzZWVkc0xpc3RzRmlsdGVyc0NsaWVudCIsInJlc3VsdHNGaWx0ZXJzQ2xpZW50IiwiaW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudCIsImluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudCIsImRvbWFpbnMiLCJ3ZWJob29rcyIsImV2ZW50cyIsIm1ldHJpY3MiLCJzdXBwcmVzc2lvbnMiLCJtZXNzYWdlcyIsInJvdXRlcyIsImlwcyIsImlwX3Bvb2xzIiwibGlzdHMiLCJ2YWxpZGF0ZSIsInN1YmFjY291bnRzIiwiaW5ib3hQbGFjZW1lbnRzIiwic2V0U3ViYWNjb3VudCIsInN1YmFjY291bnRJZCIsInNldFN1YmFjY291bnRIZWFkZXIiLCJyZXNldFN1YmFjY291bnQiLCJyZXNldFN1YmFjY291bnRIZWFkZXIiLCJNYWlsTGlzdHNNZW1iZXJzIiwiY2hlY2tBbmRVcGRhdGVEYXRhIiwibmV3RGF0YSIsInZhcnMiLCJKU09OIiwic3RyaW5naWZ5Iiwic3Vic2NyaWJlZCIsImxpc3RNZW1iZXJzIiwibWFpbExpc3RBZGRyZXNzIiwiZ2V0TWVtYmVyIiwibWFpbExpc3RNZW1iZXJBZGRyZXNzIiwibWVtYmVyIiwiY3JlYXRlTWVtYmVyIiwicmVxRGF0YSIsImNyZWF0ZU1lbWJlcnMiLCJtZW1iZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwidXBzZXJ0IiwidXBkYXRlTWVtYmVyIiwiZGVzdHJveU1lbWJlciIsIk1haWxpbmdMaXN0c0NsaWVudCIsInBhcnNlVmFsaWRhdGlvblJlc3VsdCIsInZhbGlkYXRpb25SZXN1bHQiLCJjYW5jZWxWYWxpZGF0aW9uIiwiTWVzc2FnZXNDbGllbnQiLCJwcmVwYXJlQm9vbGVhblZhbHVlcyIsInllc05vUHJvcGVydGllcyIsIlNldCIsImhhcyIsIl9wYXJzZVJlc3BvbnNlIiwibW9kaWZpZWREYXRhIiwiTWV0cmljc0NsaWVudCIsInRvVVRDU3RyaW5nIiwicHJlcGFyZVF1ZXJ5Iiwic3RhcnREYXRlIiwiZW5kRGF0ZSIsInFTdGFydCIsInFFbmQiLCJoYW5kbGVSZXNwb25zZSIsInJlc0JvZHkiLCJwYXJzZSIsImdldEFjY291bnQiLCJnZXRBY2NvdW50VXNhZ2UiLCJSb3V0ZXNDbGllbnQiLCJyb3V0ZSIsIlN0YXRzQ29udGFpbmVyXzEiLCJTdGF0c0NsaWVudCIsInByZXBhcmVTZWFyY2hQYXJhbXMiLCJlbnRyaWVzIiwiYXJyYXlXaXRoUGFpcnMiLCJjdXJyZW50UGFpciIsInJlcGVhdGVkUHJvcGVydHkiLCJfX3NwcmVhZEFycmF5IiwicHVzaCIsInBhcnNlU3RhdHMiLCJnZXREb21haW4iLCJTdGF0c0NvbnRhaW5lciIsIlN1YmFjY291bnRzQ2xpZW50IiwiZW5hYmxlIiwiZGlzYWJsZSIsIlNVQkFDQ09VTlRfSEVBREVSIiwiRW51bXNfMSIsIkJvdW5jZSIsIlN1cHByZXNzaW9uTW9kZWxzIiwiQk9VTkNFUyIsImFkZHJlc3MiLCJjb2RlIiwiZXJyb3IiLCJDb21wbGFpbnQiLCJDT01QTEFJTlRTIiwiU3VwcHJlc3Npb24iLCJCb3VuY2VfMSIsIkNvbXBsYWludF8xIiwiVW5zdWJzY3JpYmVfMSIsIldoaXRlTGlzdF8xIiwiY3JlYXRlT3B0aW9ucyIsImhlYWRlcnMiLCJTdXBwcmVzc2lvbkNsaWVudCIsIm1vZGVscyIsImJvdW5jZXMiLCJjb21wbGFpbnRzIiwidW5zdWJzY3JpYmVzIiwid2hpdGVsaXN0cyIsIk1vZGVsIiwiX3BhcnNlSXRlbSIsImNyZWF0ZVdoaXRlTGlzdCIsImlzRGF0YUFycmF5IiwicHJlcGFyZVJlc3BvbnNlIiwiY3JlYXRlVW5zdWJzY3JpYmUiLCJzb21lIiwidW5zdWJzY3JpYmUiLCJ0YWdzIiwiZ2V0TW9kZWwiLCJtb2RlbCIsImVuY29kZVVSSUNvbXBvbmVudCIsInBvc3REYXRhIiwibW9kdWxlIiwiVW5zdWJzY3JpYmUiLCJVTlNVQlNDUklCRVMiLCJXaGl0ZUxpc3QiLCJXSElURUxJU1RTIiwicmVhc29uIiwiQXR0YWNobWVudHNIYW5kbGVyXzEiLCJNdWx0aXBsZVZhbGlkYXRpb25Kb2IiLCJyZXNwb25zZVN0YXR1c0NvZGUiLCJxdWFudGl0eSIsInJlY29yZHNQcm9jZXNzZWQiLCJyZWNvcmRzX3Byb2Nlc3NlZCIsImRvd25sb2FkX3VybCIsImRvd25sb2FkVXJsIiwiY3N2IiwianNvbiIsIl9iIiwic3VtbWFyeSIsImNhdGNoQWxsIiwiY2F0Y2hfYWxsIiwiZGVsaXZlcmFibGUiLCJkb05vdFNlbmQiLCJkb19ub3Rfc2VuZCIsInVuZGVsaXZlcmFibGUiLCJ1bmtub3duIiwicmlzayIsImhpZ2giLCJsb3ciLCJtZWRpdW0iLCJNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQiLCJhdHRhY2htZW50c0hhbmRsZXIiLCJqb2JzIiwiam9iIiwidG90YWwiLCJsaXN0SWQiLCJjb252ZXJ0VG9FeHBlY3RlZFNoYXBlIiwiaXNCdWZmZXIiLCJmaWxlIiwibXVsdGlwbGVWYWxpZGF0aW9uRmlsZSIsImlzU3RyZWFtIiwibXVsdGlwbGVWYWxpZGF0aW9uRGF0YSIsIlZhbGlkYXRlQ2xpZW50IiwibXVsdGlwbGVWYWxpZGF0aW9uIiwiV2ViaG9vayIsInVybHMiLCJXZWJob29rc0NsaWVudCIsIl9wYXJzZVdlYmhvb2tMaXN0IiwiX3BhcnNlV2ViaG9va1dpdGhJRCIsIndlYmhvb2tSZXNwb25zZSIsIndlYmhvb2siLCJ1bmRlZmluZWQiLCJfcGFyc2VXZWJob29rVGVzdCIsInRlc3QiLCJ1cmxWYWx1ZXMiLCJCbG9iRnJvbVN0cmVhbSIsInN0cmVhbSIsInNpemUiLCJfc3RyZWFtIiwiZGVmaW5lUHJvcGVydHkiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsIkF0dGFjaG1lbnRzSGFuZGxlciIsImdldEF0dGFjaG1lbnRPcHRpb25zIiwiZmlsZW5hbWUiLCJjb250ZW50VHlwZSIsImtub3duTGVuZ3RoIiwiZ2V0RmlsZUluZm8iLCJnZXRDdXN0b21GaWxlSW5mbyIsImdldEJ1ZmZlckluZm8iLCJidWZmZXIiLCJieXRlTGVuZ3RoIiwicGlwZSIsImlzQ3VzdG9tRmlsZSIsIm9iaiIsImlzQnJvd3NlckZpbGUiLCJCbG9iIiwiQnVmZmVyIiwiZ2V0QXR0YWNobWVudEluZm8iLCJhdHRhY2htZW50IiwiY29udmVydFRvRkRleHBlY3RlZFNoYXBlIiwidXNlclByb3ZpZGVkVmFsdWUiLCJnZXRCbG9iRnJvbVN0cmVhbSIsIkFQSUVycm9yIiwic3RhdHVzVGV4dCIsImJvZHlNZXNzYWdlIiwic3RhY2siLCJkZXRhaWxzIiwiRm9ybURhdGFCdWlsZGVyIiwiRm9ybURhdGFDb25zdHJ1Y3RvciIsImZpbGVLZXlzIiwiY3JlYXRlRm9ybURhdGEiLCJmaWx0ZXIiLCJmb3JtRGF0YUFjYyIsImluY2x1ZGVzIiwiYXR0YWNobWVudFZhbHVlIiwiaXNNZXNzYWdlQXR0YWNobWVudCIsImFkZEZpbGVzVG9GRCIsIm1lc3NhZ2VWYWx1ZSIsImlzTUlNRSIsImFkZE1pbWVEYXRhVG9GRCIsImFkZENvbW1vblByb3BlcnR5VG9GRCIsImZvcm1EYXRhSW5zdGFuY2UiLCJpc0Zvcm1EYXRhUGFja2FnZSIsImFwcGVuZCIsImJyb3dzZXJGb3JtRGF0YSIsImJsb2JJbnN0YW5jZSIsIlJlYWRhYmxlU3RyZWFtIiwiZ2V0SGVhZGVycyIsIkZpbGUiLCJldmVyeSIsImFwcGVuZEZpbGVUb0ZEIiwib3JpZ2luYWxLZXkiLCJvYmpEYXRhIiwiZmQiLCJmcm9tIiwiYmxvYiIsInNldCIsImZvckVhY2giLCJhZGRWYWx1ZUJhc2VkT25GRCIsImZkS2V5IiwiZmRWYWx1ZSIsIk5hdmlnYXRpb25UaHJ1UGFnZXMiLCJwYXJzZVBhZ2UiLCJwYWdlVXJsIiwidXJsU2VwYXJhdG9yIiwiaXRlcmF0b3JOYW1lIiwiVVJMIiwicGFnZVZhbHVlIiwic3BsaXQiLCJwb3AiLCJpdGVyYXRvclBvc2l0aW9uIiwicGFnZSIsInBhZ2luZyIsInVwZGF0ZVVybEFuZFF1ZXJ5IiwiY2xpZW50VXJsIiwicXVlcnlDb3B5IiwidXBkYXRlZFF1ZXJ5IiwiYmFzZTY0IiwiX19pbXBvcnRTdGFyIiwiYXhpb3NfMSIsIkZvcm1EYXRhQnVpbGRlcl8xIiwiUmVxdWVzdCIsInRpbWVvdXQiLCJtYWtlSGVhZGVyc0Zyb21PYmplY3QiLCJmb3JtRGF0YUJ1aWxkZXIiLCJtYXhCb2R5TGVuZ3RoIiwicHJveHkiLCJtZXRob2QiLCJvbkNhbGxPcHRpb25zIiwicmVxdWVzdEhlYWRlcnMiLCJqb2luQW5kVHJhbnNmb3JtSGVhZGVycyIsInBhcmFtcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJ1cmxWYWx1ZSIsInRvTG9jYWxlVXBwZXJDYXNlIiwiX2QiLCJlcnJvclJlc3BvbnNlIiwiZXJyXzEiLCJfYyIsImdldFJlc3BvbnNlQm9keSIsIkF4aW9zSGVhZGVycyIsImJhc2ljIiwiZW5jb2RlIiwic2V0QXV0aG9yaXphdGlvbiIsInJlY2VpdmVkT25DYWxsSGVhZGVycyIsIm9uQ2FsbEhlYWRlcnMiLCJoZWFkZXJzT2JqZWN0IiwiaGVhZGVyc0FjY3VtdWxhdG9yIiwiY29tbWFuZCIsImFkZERlZmF1bHRIZWFkZXJzIiwicmVxdWVzdE9wdGlvbnMiLCJSZXNvbHV0aW9uIiwiV2ViaG9va3NJZHMiLCJZZXNObyIsIl9fZXhwb3J0U3RhciIsIk1haWxndW5DbGllbnRfMSIsIk1haWxndW4iLCJGb3JtRGF0YSIsImNsaWVudCIsImZyZWVFeHBvcnRzIiwiZnJlZUdsb2JhbCIsImciLCJnbG9iYWwiLCJ3aW5kb3ciLCJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiLCJUQUJMRSIsIlJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMiLCJpbnB1dCIsIlN0cmluZyIsImEiLCJiIiwiYyIsInBhZGRpbmciLCJvdXRwdXQiLCJwb3NpdGlvbiIsImNoYXJDb2RlQXQiLCJjaGFyQXQiLCJyZXBsYWNlIiwiYml0U3RvcmFnZSIsImJpdENvdW50ZXIiLCJpbmRleE9mIiwiZnJvbUNoYXJDb2RlIiwic3RyQXJyYXkiLCJyZXN1bHRBcnJheSIsIlR5cGVFcnJvciIsIm1hdGNoIiwiZmlyc3QiLCJzaGlmdCIsImkiLCJjb21wb25lbnQiLCJzdHIiLCJqb2luIiwicGFydHMiLCJub3JtYWxpemUiLCJhcmd1bWVudHMiLCJzbGljZSIsImRlZmluaXRpb24iLCJiaW5kIiwiZm4iLCJ0aGlzQXJnIiwiYXBwbHkiLCJnZXRQcm90b3R5cGVPZiIsImtpbmRPZiIsImNhY2hlIiwidGhpbmciLCJ0b0xvd2VyQ2FzZSIsImtpbmRPZlRlc3QiLCJ0eXBlT2ZUZXN0IiwiaXNVbmRlZmluZWQiLCJpc0FycmF5QnVmZmVyIiwiaXNTdHJpbmciLCJpc0Z1bmN0aW9uIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzUGxhaW5PYmplY3QiLCJ2YWwiLCJpdGVyYXRvciIsImlzRGF0ZSIsImlzRmlsZSIsImlzQmxvYiIsImlzRmlsZUxpc3QiLCJpc1VSTFNlYXJjaFBhcmFtcyIsImlzUmVhZGFibGVTdHJlYW0iLCJpc1JlcXVlc3QiLCJpc1Jlc3BvbnNlIiwiaXNIZWFkZXJzIiwiYWxsT3duS2V5cyIsImwiLCJsZW4iLCJmaW5kS2V5IiwiX2tleSIsIl9nbG9iYWwiLCJnbG9iYWxUaGlzIiwiaXNDb250ZXh0RGVmaW5lZCIsImNvbnRleHQiLCJpc1R5cGVkQXJyYXkiLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImlzSFRNTEZvcm0iLCJoYXNPd25Qcm9wZXJ0eSIsImlzUmVnRXhwIiwicmVkdWNlRGVzY3JpcHRvcnMiLCJyZWR1Y2VyIiwiZGVzY3JpcHRvcnMiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwicmVkdWNlZERlc2NyaXB0b3JzIiwiZGVzY3JpcHRvciIsInJldCIsImRlZmluZVByb3BlcnRpZXMiLCJBTFBIQSIsIkRJR0lUIiwiQUxQSEFCRVQiLCJBTFBIQV9ESUdJVCIsInRvVXBwZXJDYXNlIiwiaXNBc3luY0ZuIiwiX3NldEltbWVkaWF0ZSIsInNldEltbWVkaWF0ZVN1cHBvcnRlZCIsInNldEltbWVkaWF0ZSIsInBvc3RNZXNzYWdlU3VwcG9ydGVkIiwicG9zdE1lc3NhZ2UiLCJ0b2tlbiIsIk1hdGgiLCJyYW5kb20iLCJjYWxsYmFja3MiLCJhZGRFdmVudExpc3RlbmVyIiwic291cmNlIiwiY2IiLCJzZXRUaW1lb3V0IiwiYXNhcCIsInF1ZXVlTWljcm90YXNrIiwicHJvY2VzcyIsIm5leHRUaWNrIiwidXRpbHMkMSIsImNvbnN0cnVjdG9yIiwiaXNGb3JtRGF0YSIsImtpbmQiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaXNCb29sZWFuIiwibWVyZ2UiLCJjYXNlbGVzcyIsImFzc2lnblZhbHVlIiwidGFyZ2V0S2V5IiwiZXh0ZW5kIiwidHJpbSIsInN0cmlwQk9NIiwiY29udGVudCIsImluaGVyaXRzIiwic3VwZXJDb25zdHJ1Y3RvciIsInByb3BzIiwidG9GbGF0T2JqZWN0Iiwic291cmNlT2JqIiwiZGVzdE9iaiIsInByb3BGaWx0ZXIiLCJtZXJnZWQiLCJlbmRzV2l0aCIsInNlYXJjaFN0cmluZyIsImxhc3RJbmRleCIsInRvQXJyYXkiLCJhcnIiLCJmb3JFYWNoRW50cnkiLCJuZXh0IiwiZG9uZSIsInBhaXIiLCJtYXRjaEFsbCIsInJlZ0V4cCIsIm1hdGNoZXMiLCJleGVjIiwiaGFzT3duUHJvcCIsImZyZWV6ZU1ldGhvZHMiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJ0b09iamVjdFNldCIsImFycmF5T3JTdHJpbmciLCJkZWxpbWl0ZXIiLCJkZWZpbmUiLCJ0b0NhbWVsQ2FzZSIsIm0iLCJwMSIsInAyIiwibm9vcCIsInRvRmluaXRlTnVtYmVyIiwiZGVmYXVsdFZhbHVlIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJnZW5lcmF0ZVN0cmluZyIsImFscGhhYmV0IiwiaXNTcGVjQ29tcGxpYW50Rm9ybSIsInRvSlNPTk9iamVjdCIsInZpc2l0IiwidGFyZ2V0IiwicmVkdWNlZFZhbHVlIiwiaXNUaGVuYWJsZSIsImNhdGNoIiwiQXhpb3NFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwidG9KU09OIiwibnVtYmVyIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwicHJvdG90eXBlJDEiLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJjYXVzZSIsImlzVmlzaXRhYmxlIiwicmVtb3ZlQnJhY2tldHMiLCJyZW5kZXJLZXkiLCJkb3RzIiwicHJlZGljYXRlcyIsInRvRm9ybURhdGEiLCJtZXRhVG9rZW5zIiwiaW5kZXhlcyIsIm9wdGlvbiIsInZpc2l0b3IiLCJkZWZhdWx0VmlzaXRvciIsInVzZUJsb2IiLCJjb252ZXJ0VmFsdWUiLCJpc0ZsYXRBcnJheSIsImVsIiwiaW5kZXgiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwiZW5jb2RlJDEiLCJjaGFyTWFwIiwiQXhpb3NVUkxTZWFyY2hQYXJhbXMiLCJfcGFpcnMiLCJidWlsZFVSTCIsIl9lbmNvZGUiLCJzZXJpYWxpemVGbiIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZWRQYXJhbXMiLCJoYXNobWFya0luZGV4IiwiZW5jb2RlciIsIkludGVyY2VwdG9yTWFuYWdlciQxIiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiaGFuZGxlcnMiLCJ1c2UiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInN5bmNocm9ub3VzIiwicnVuV2hlbiIsImVqZWN0IiwiY2xlYXIiLCJoIiwidHJhbnNpdGlvbmFsRGVmYXVsdHMiLCJzaWxlbnRKU09OUGFyc2luZyIsImZvcmNlZEpTT05QYXJzaW5nIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsInBsYXRmb3JtJDEiLCJpc0Jyb3dzZXIiLCJjbGFzc2VzIiwicHJvdG9jb2xzIiwiaGFzQnJvd3NlckVudiIsImRvY3VtZW50IiwiaGFzU3RhbmRhcmRCcm93c2VyRW52IiwicHJvZHVjdCIsIm5hdmlnYXRvciIsImhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiIsIldvcmtlckdsb2JhbFNjb3BlIiwiaW1wb3J0U2NyaXB0cyIsIm9yaWdpbiIsImxvY2F0aW9uIiwiaHJlZiIsInBsYXRmb3JtIiwiZnJlZXplIiwiX19wcm90b19fIiwiZm9ybURhdGFUb0pTT04iLCJidWlsZFBhdGgiLCJpc051bWVyaWNLZXkiLCJpc0xhc3QiLCJhcnJheVRvT2JqZWN0IiwicGFyc2VQcm9wUGF0aCIsImRlZmF1bHRzIiwidHJhbnNpdGlvbmFsIiwiYWRhcHRlciIsInRyYW5zZm9ybVJlcXVlc3QiLCJnZXRDb250ZW50VHlwZSIsImhhc0pTT05Db250ZW50VHlwZSIsImlzT2JqZWN0UGF5bG9hZCIsInNldENvbnRlbnRUeXBlIiwiaGVscGVycyIsImlzTm9kZSIsInRvVVJMRW5jb2RlZEZvcm0iLCJmb3JtU2VyaWFsaXplciIsIl9Gb3JtRGF0YSIsImVudiIsInJhd1ZhbHVlIiwicGFyc2VyIiwiZSIsInN0cmluZ2lmeVNhZmVseSIsInRyYW5zZm9ybVJlc3BvbnNlIiwiSlNPTlJlcXVlc3RlZCIsInJlc3BvbnNlVHlwZSIsInN0cmljdEpTT05QYXJzaW5nIiwiRVJSX0JBRF9SRVNQT05TRSIsInhzcmZDb29raWVOYW1lIiwieHNyZkhlYWRlck5hbWUiLCJtYXhDb250ZW50TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJjb21tb24iLCJkZWZhdWx0cyQxIiwiaWdub3JlRHVwbGljYXRlT2YiLCIkaW50ZXJuYWxzIiwibm9ybWFsaXplSGVhZGVyIiwiaGVhZGVyIiwibm9ybWFsaXplVmFsdWUiLCJtYXRjaEhlYWRlclZhbHVlIiwiaXNIZWFkZXJOYW1lRmlsdGVyIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwic2V0SGVhZGVyIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJyYXdIZWFkZXJzIiwicGFyc2VkIiwibGluZSIsInN1YnN0cmluZyIsInBhcnNlSGVhZGVycyIsInRva2VucyIsInRva2Vuc1JFIiwicGFyc2VUb2tlbnMiLCJtYXRjaGVyIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsImZvcm1hdCIsIm5vcm1hbGl6ZWQiLCJ3IiwiY2hhciIsImZvcm1hdEhlYWRlciIsInRhcmdldHMiLCJhc1N0cmluZ3MiLCJjb21wdXRlZCIsImFjY2Vzc29yIiwiYWNjZXNzb3JzIiwiZGVmaW5lQWNjZXNzb3IiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiY29uZmlndXJhYmxlIiwiYnVpbGRBY2Nlc3NvcnMiLCJtYXBwZWQiLCJoZWFkZXJWYWx1ZSIsIkF4aW9zSGVhZGVycyQxIiwidHJhbnNmb3JtRGF0YSIsImZucyIsImlzQ2FuY2VsIiwiX19DQU5DRUxfXyIsIkNhbmNlbGVkRXJyb3IiLCJFUlJfQ0FOQ0VMRUQiLCJzZXR0bGUiLCJyZXNvbHZlIiwicmVqZWN0IiwiRVJSX0JBRF9SRVFVRVNUIiwiZmxvb3IiLCJwcm9ncmVzc0V2ZW50UmVkdWNlciIsImxpc3RlbmVyIiwiaXNEb3dubG9hZFN0cmVhbSIsImZyZXEiLCJieXRlc05vdGlmaWVkIiwiX3NwZWVkb21ldGVyIiwic2FtcGxlc0NvdW50IiwibWluIiwiYnl0ZXMiLCJ0aW1lc3RhbXBzIiwiZmlyc3RTYW1wbGVUUyIsImhlYWQiLCJ0YWlsIiwiY2h1bmtMZW5ndGgiLCJub3ciLCJzdGFydGVkQXQiLCJieXRlc0NvdW50IiwicGFzc2VkIiwicm91bmQiLCJzcGVlZG9tZXRlciIsImxhc3RBcmdzIiwidGltZXIiLCJ0aW1lc3RhbXAiLCJ0aHJlc2hvbGQiLCJpbnZva2UiLCJhcmdzIiwiY2xlYXJUaW1lb3V0IiwidGhyb3R0bGUiLCJsb2FkZWQiLCJsZW5ndGhDb21wdXRhYmxlIiwicHJvZ3Jlc3NCeXRlcyIsInJhdGUiLCJwcm9ncmVzcyIsImVzdGltYXRlZCIsImV2ZW50IiwicHJvZ3Jlc3NFdmVudERlY29yYXRvciIsInRocm90dGxlZCIsImFzeW5jRGVjb3JhdG9yIiwiaXNVUkxTYW1lT3JpZ2luIiwibXNpZSIsInVzZXJBZ2VudCIsInVybFBhcnNpbmdOb2RlIiwiY3JlYXRlRWxlbWVudCIsIm9yaWdpblVSTCIsInJlc29sdmVVUkwiLCJzZXRBdHRyaWJ1dGUiLCJwcm90b2NvbCIsImhvc3QiLCJzZWFyY2giLCJoYXNoIiwiaG9zdG5hbWUiLCJwb3J0IiwicGF0aG5hbWUiLCJyZXF1ZXN0VVJMIiwiY29va2llcyIsIndyaXRlIiwiZXhwaXJlcyIsInNlY3VyZSIsImNvb2tpZSIsInRvR01UU3RyaW5nIiwicmVhZCIsIlJlZ0V4cCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsImJ1aWxkRnVsbFBhdGgiLCJiYXNlVVJMIiwicmVxdWVzdGVkVVJMIiwicmVsYXRpdmVVUkwiLCJjb21iaW5lVVJMcyIsImhlYWRlcnNUb09iamVjdCIsIm1lcmdlQ29uZmlnIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXRNZXNzYWdlIiwid2l0aENyZWRlbnRpYWxzIiwid2l0aFhTUkZUb2tlbiIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJkZWNvbXByZXNzIiwiYmVmb3JlUmVkaXJlY3QiLCJ0cmFuc3BvcnQiLCJodHRwQWdlbnQiLCJodHRwc0FnZW50IiwiY2FuY2VsVG9rZW4iLCJzb2NrZXRQYXRoIiwicmVzcG9uc2VFbmNvZGluZyIsImNvbmZpZ1ZhbHVlIiwicmVzb2x2ZUNvbmZpZyIsIm5ld0NvbmZpZyIsImF1dGgiLCJidG9hIiwicGFzc3dvcmQiLCJ1bmVzY2FwZSIsIkJvb2xlYW4iLCJ4c3JmVmFsdWUiLCJ4aHJBZGFwdGVyIiwiWE1MSHR0cFJlcXVlc3QiLCJQcm9taXNlIiwiX2NvbmZpZyIsInJlcXVlc3REYXRhIiwib25DYW5jZWxlZCIsInVwbG9hZFRocm90dGxlZCIsImRvd25sb2FkVGhyb3R0bGVkIiwiZmx1c2hVcGxvYWQiLCJmbHVzaERvd25sb2FkIiwic2lnbmFsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9ubG9hZGVuZCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsImVyciIsInJlc3BvbnNlVGV4dCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVzcG9uc2VVUkwiLCJvbmFib3J0IiwiRUNPTk5BQk9SVEVEIiwib25lcnJvciIsIkVSUl9ORVRXT1JLIiwib250aW1lb3V0IiwidGltZW91dEVycm9yTWVzc2FnZSIsIkVUSU1FRE9VVCIsInNldFJlcXVlc3RIZWFkZXIiLCJ1cGxvYWQiLCJjYW5jZWwiLCJhYm9ydCIsInN1YnNjcmliZSIsImFib3J0ZWQiLCJwYXJzZVByb3RvY29sIiwic2VuZCIsImNvbXBvc2VTaWduYWxzJDEiLCJzaWduYWxzIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsInN0cmVhbUNodW5rIiwiY2h1bmsiLCJjaHVua1NpemUiLCJwb3MiLCJ0cmFja1N0cmVhbSIsIm9uUHJvZ3Jlc3MiLCJvbkZpbmlzaCIsImFzeW5jIiwiaXRlcmFibGUiLCJyZWFkQnl0ZXMiLCJfb25GaW5pc2giLCJwdWxsIiwiY2xvc2UiLCJsb2FkZWRCeXRlcyIsImVucXVldWUiLCJyZXR1cm4iLCJoaWdoV2F0ZXJNYXJrIiwiaXNGZXRjaFN1cHBvcnRlZCIsImZldGNoIiwiUmVzcG9uc2UiLCJpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkIiwiZW5jb2RlVGV4dCIsIlRleHRFbmNvZGVyIiwiYXJyYXlCdWZmZXIiLCJzdXBwb3J0c1JlcXVlc3RTdHJlYW0iLCJkdXBsZXhBY2Nlc3NlZCIsImhhc0NvbnRlbnRUeXBlIiwiZHVwbGV4Iiwic3VwcG9ydHNSZXNwb25zZVN0cmVhbSIsInJlc29sdmVycyIsIl8iLCJFUlJfTk9UX1NVUFBPUlQiLCJyZXNvbHZlQm9keUxlbmd0aCIsImdldENvbnRlbnRMZW5ndGgiLCJnZXRCb2R5TGVuZ3RoIiwia25vd25BZGFwdGVycyIsImh0dHAiLCJ4aHIiLCJmZXRjaE9wdGlvbnMiLCJmaW5pc2hlZCIsImNvbXBvc2VkU2lnbmFsIiwic3RvcFRpbWVvdXQiLCJyZXF1ZXN0Q29udGVudExlbmd0aCIsImNvbnRlbnRUeXBlSGVhZGVyIiwiX3JlcXVlc3QiLCJmbHVzaCIsImNyZWRlbnRpYWxzIiwiaXNTdHJlYW1SZXNwb25zZSIsInJlc3BvbnNlQ29udGVudExlbmd0aCIsInJlc3BvbnNlRGF0YSIsInJlbmRlclJlYXNvbiIsImlzUmVzb2x2ZWRIYW5kbGUiLCJhZGFwdGVycyIsIm5hbWVPckFkYXB0ZXIiLCJyZWplY3RlZFJlYXNvbnMiLCJyZWFzb25zIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRocm93SWZSZXF1ZXN0ZWQiLCJkaXNwYXRjaFJlcXVlc3QiLCJWRVJTSU9OIiwidmFsaWRhdG9ycyQxIiwiZGVwcmVjYXRlZFdhcm5pbmdzIiwidmFsaWRhdG9yIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiRVJSX0RFUFJFQ0FURUQiLCJhc3NlcnRPcHRpb25zIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsInZhbGlkYXRvcnMiLCJBeGlvcyIsImluc3RhbmNlQ29uZmlnIiwiaW50ZXJjZXB0b3JzIiwiY29uZmlnT3JVcmwiLCJkdW1teSIsImJvb2xlYW4iLCJmdW5jdGlvbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInVuc2hpZnQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJwcm9taXNlIiwiY2hhaW4iLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJBeGlvcyQxIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJzcGxpY2UiLCJDYW5jZWxUb2tlbiQxIiwiSHR0cFN0YXR1c0NvZGUiLCJDb250aW51ZSIsIlN3aXRjaGluZ1Byb3RvY29scyIsIlByb2Nlc3NpbmciLCJFYXJseUhpbnRzIiwiT2siLCJDcmVhdGVkIiwiQWNjZXB0ZWQiLCJOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24iLCJOb0NvbnRlbnQiLCJSZXNldENvbnRlbnQiLCJQYXJ0aWFsQ29udGVudCIsIk11bHRpU3RhdHVzIiwiQWxyZWFkeVJlcG9ydGVkIiwiSW1Vc2VkIiwiTXVsdGlwbGVDaG9pY2VzIiwiTW92ZWRQZXJtYW5lbnRseSIsIkZvdW5kIiwiU2VlT3RoZXIiLCJOb3RNb2RpZmllZCIsIlVzZVByb3h5IiwiVW51c2VkIiwiVGVtcG9yYXJ5UmVkaXJlY3QiLCJQZXJtYW5lbnRSZWRpcmVjdCIsIkJhZFJlcXVlc3QiLCJVbmF1dGhvcml6ZWQiLCJQYXltZW50UmVxdWlyZWQiLCJGb3JiaWRkZW4iLCJOb3RGb3VuZCIsIk1ldGhvZE5vdEFsbG93ZWQiLCJOb3RBY2NlcHRhYmxlIiwiUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiUmVxdWVzdFRpbWVvdXQiLCJDb25mbGljdCIsIkdvbmUiLCJMZW5ndGhSZXF1aXJlZCIsIlByZWNvbmRpdGlvbkZhaWxlZCIsIlBheWxvYWRUb29MYXJnZSIsIlVyaVRvb0xvbmciLCJVbnN1cHBvcnRlZE1lZGlhVHlwZSIsIlJhbmdlTm90U2F0aXNmaWFibGUiLCJFeHBlY3RhdGlvbkZhaWxlZCIsIkltQVRlYXBvdCIsIk1pc2RpcmVjdGVkUmVxdWVzdCIsIlVucHJvY2Vzc2FibGVFbnRpdHkiLCJMb2NrZWQiLCJGYWlsZWREZXBlbmRlbmN5IiwiVG9vRWFybHkiLCJVcGdyYWRlUmVxdWlyZWQiLCJQcmVjb25kaXRpb25SZXF1aXJlZCIsIlRvb01hbnlSZXF1ZXN0cyIsIlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSIsIlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zIiwiSW50ZXJuYWxTZXJ2ZXJFcnJvciIsIk5vdEltcGxlbWVudGVkIiwiQmFkR2F0ZXdheSIsIlNlcnZpY2VVbmF2YWlsYWJsZSIsIkdhdGV3YXlUaW1lb3V0IiwiSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQiLCJWYXJpYW50QWxzb05lZ290aWF0ZXMiLCJJbnN1ZmZpY2llbnRTdG9yYWdlIiwiTG9vcERldGVjdGVkIiwiTm90RXh0ZW5kZWQiLCJOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZCIsIkh0dHBTdGF0dXNDb2RlJDEiLCJheGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJjYWxsYmFjayIsImlzQXhpb3NFcnJvciIsInBheWxvYWQiLCJmb3JtVG9KU09OIiwiZ2V0QWRhcHRlciIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJGdW5jdGlvbiIsIm5tZCIsInBhdGhzIiwiY2hpbGRyZW4iXSwic291cmNlUm9vdCI6IiJ9
2
+ define((()=>(()=>{var t={8296:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t,e,r){this.name=t.name,this.require_tls=t.require_tls,this.skip_verification=t.skip_verification,this.state=t.state,this.wildcard=t.wildcard,this.spam_action=t.spam_action,this.created_at=new Date(t.created_at),this.smtp_password=t.smtp_password,this.smtp_login=t.smtp_login,this.type=t.type,this.receiving_dns_records=e||null,this.sending_dns_records=r||null,this.id=t.id,this.is_disabled=t.is_disabled,this.web_prefix=t.web_prefix,this.web_scheme=t.web_scheme,this.use_automatic_sender_security=t.use_automatic_sender_security;var n=["dkim_host","mailfrom_host"].reduce((function(e,r){return t[r]&&(e[r]=t[r]),e}),{});Object.assign(this,n)};e.default=r},5612:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var a=s(r(5469)),u=s(r(9538)),c=s(r(8296)),l=function(){function t(t,e,r,n,o){void 0===o&&(o=console),this.request=t,this.domainCredentials=e,this.domainTemplates=r,this.domainTags=n,this.logger=o}return t.prototype._handleBoolValues=function(t){var e=t,r=Object.keys(e).reduce((function(t,r){var n=r;if("boolean"==typeof e[n]){var o=e[n];t[n]="true"===o.toString()?"true":"false"}return t}),{});return n(n({},t),r)},t.prototype._parseMessage=function(t){return t.body},t.prototype.parseDomainList=function(t){return t.body&&t.body.items?t.body.items.map((function(t){return new c.default(t)})):[]},t.prototype._parseDomain=function(t){return new c.default(t.body.domain,t.body.receiving_dns_records,t.body.sending_dns_records)},t.prototype._parseTrackingSettings=function(t){return t.body.tracking},t.prototype._parseTrackingUpdate=function(t){return t.body},t.prototype._isOpenTrackingInfoWitPlace=function(t){return"object"==typeof t&&"place_at_the_top"in t},t.prototype.list=function(t){var e=this;return this.request.get("/v4/domains",t).then((function(t){return e.parseDomainList(t)}))},t.prototype.get=function(t,e){var r,n,o=this,i=e?{"h:extended":null!==(r=null==e?void 0:e.extended)&&void 0!==r&&r,"h:with_dns":null===(n=null==e?void 0:e.with_dns)||void 0===n||n}:{};return this.request.get("/v4/domains/".concat(t),i).then((function(t){return o._parseDomain(t)}))},t.prototype.create=function(t){var e=this,r=this._handleBoolValues(t);return this.request.postWithFD("/v4/domains",r).then((function(t){return e._parseDomain(t)}))},t.prototype.update=function(t,e){var r=this,n=this._handleBoolValues(e);return this.request.putWithFD("/v4/domains/".concat(t),n).then((function(t){return r._parseDomain(t)}))},t.prototype.verify=function(t){var e=this;return this.request.put("/v4/domains/".concat(t,"/verify")).then((function(t){return e._parseDomain(t)}))},t.prototype.destroy=function(t){var e=this;return this.request.delete("/v3/domains/".concat(t)).then((function(t){return e._parseMessage(t)}))},t.prototype.getConnection=function(t){return this.request.get("/v3/domains/".concat(t,"/connection")).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.updateConnection=function(t,e){return this.request.put("/v3/domains/".concat(t,"/connection"),e).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.getTracking=function(t){return this.request.get((0,a.default)("/v3/domains",t,"tracking")).then(this._parseTrackingSettings)},t.prototype.updateTracking=function(t,e,r){var o=this,i=n({},r);return"boolean"==typeof(null==r?void 0:r.active)&&(i.active=(null==r?void 0:r.active)?"yes":"no"),this._isOpenTrackingInfoWitPlace(r)&&"boolean"==typeof(null==r?void 0:r.place_at_the_top)&&(i.place_at_the_top=(null==r?void 0:r.place_at_the_top)?"yes":"no"),this.request.putWithFD((0,a.default)("/v3/domains",t,"tracking",e),i).then((function(t){return o._parseTrackingUpdate(t)}))},t.prototype.getIps=function(t){return this.logger.warn('"domains.getIps" method is deprecated and will be removed in the future releases.'),this.request.get((0,a.default)("/v3/domains",t,"ips")).then((function(t){var e;return null===(e=null==t?void 0:t.body)||void 0===e?void 0:e.items}))},t.prototype.assignIp=function(t,e){return this.logger.warn('"domains.assignIp" method is deprecated and will be removed in the future releases.'),this.request.postWithFD((0,a.default)("/v3/domains",t,"ips"),{ip:e})},t.prototype.deleteIp=function(t,e){return this.logger.warn('"domains.deleteIp" method is deprecated and will be moved into the IpsClient in the future releases.'),this.request.delete((0,a.default)("/v3/domains",t,"ips",e))},t.prototype.linkIpPool=function(t,e){return this.logger.warn('"domains.linkIpPool" method is deprecated, and will be removed in the future releases.'),this.request.postWithFD((0,a.default)("/v3/domains",t,"ips"),{pool_id:e})},t.prototype.unlinkIpPoll=function(t,e){this.logger.warn('"domains.unlinkIpPoll" method is deprecated, and will be moved into the IpsClient in the future releases.');var r="";if(e.pool_id&&e.ip)throw u.default.getUserDataError("Too much data for replacement","Please specify either pool_id or ip (not both)");return e.pool_id?r="?pool_id=".concat(e.pool_id):e.ip&&(r="?ip=".concat(e.ip)),this.request.delete((0,a.default)("/v3/domains",t,"ips","ip_pool",r))},t.prototype.updateDKIMAuthority=function(t,e){return this.request.put("/v3/domains/".concat(t,"/dkim_authority"),{},{query:"self=".concat(e.self)}).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.updateDKIMSelector=function(t,e){var r;return o(this,void 0,void 0,(function(){var n;return i(this,(function(o){switch(o.label){case 0:return[4,this.request.put("/v3/domains/".concat(t,"/dkim_selector"),{},{query:"dkim_selector=".concat(e.dkimSelector)})];case 1:return[2,{status:(n=o.sent()).status,message:null===(r=null==n?void 0:n.body)||void 0===r?void 0:r.message}]}}))}))},t.prototype.updateWebPrefix=function(t,e){return this.logger.warn('"domains.updateWebPrefix" method is deprecated, please use domains.update to set new "web_prefix". Current method will be removed in the future releases.'),this.request.put("/v3/domains/".concat(t,"/web_prefix"),{},{query:"web_prefix=".concat(e.webPrefix)}).then((function(t){return t}))},t}();e.default=l},7585:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(5469)),i=function(){function t(t){this.request=t,this.baseRoute="/v3/domains/"}return t.prototype._parseDomainCredentialsList=function(t){return{items:t.body.items,totalCount:t.body.total_count}},t.prototype._parseMessageResponse=function(t){return{status:t.status,message:t.body.message}},t.prototype._parseDeletedResponse=function(t){return{status:t.status,message:t.body.message,spec:t.body.spec}},t.prototype.list=function(t,e){var r=this;return this.request.get((0,o.default)(this.baseRoute,t,"/credentials"),e).then((function(t){return r._parseDomainCredentialsList(t)}))},t.prototype.create=function(t,e){var r=this;return this.request.postWithFD("".concat(this.baseRoute).concat(t,"/credentials"),e).then((function(t){return r._parseMessageResponse(t)}))},t.prototype.update=function(t,e,r){var n=this;return this.request.putWithFD("".concat(this.baseRoute).concat(t,"/credentials/").concat(e),r).then((function(t){return n._parseMessageResponse(t)}))},t.prototype.destroy=function(t,e){var r=this;return this.request.delete("".concat(this.baseRoute).concat(t,"/credentials/").concat(e)).then((function(t){return r._parseDeletedResponse(t)}))},t}();e.default=i},1654:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.DomainTagStatistic=e.DomainTag=void 0;var c=u(r(5469)),l=u(r(4117)),f=function(t){this.tag=t.tag,this.description=t.description,this["first-seen"]=new Date(t["first-seen"]),this["last-seen"]=new Date(t["last-seen"])};e.DomainTag=f;var p=function(t){this.tag=t.body.tag,this.description=t.body.description,this.start=new Date(t.body.start),this.end=new Date(t.body.end),this.resolution=t.body.resolution,this.stats=t.body.stats.map((function(t){return i(i({},t),{time:new Date(t.time)})}))};e.DomainTagStatistic=p;var d=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r.baseRoute="/v3/",r}return o(e,t),e.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){return new f(t)})),e.pages=this.parsePageLinks(t,"?","tag"),e.status=t.status,e},e.prototype._parseTagStatistic=function(t){return new p(t)},e.prototype.list=function(t,e){return s(this,void 0,void 0,(function(){return a(this,(function(r){return[2,this.requestListWithPages((0,c.default)(this.baseRoute,t,"/tags"),e)]}))}))},e.prototype.get=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e)).then((function(t){return new f(t.body)}))},e.prototype.update=function(t,e,r){return this.request.put((0,c.default)(this.baseRoute,t,"/tags",e),r).then((function(t){return t.body}))},e.prototype.destroy=function(t,e){return this.request.delete("".concat(this.baseRoute).concat(t,"/tags/").concat(e)).then((function(t){return{message:t.body.message,status:t.status}}))},e.prototype.statistic=function(t,e,r){var n=this;return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats"),r).then((function(t){return n._parseTagStatistic(t)}))},e.prototype.countries=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/countries")).then((function(t){return t.body}))},e.prototype.providers=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/providers")).then((function(t){return t.body}))},e.prototype.devices=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/devices")).then((function(t){return t.body}))},e}(l.default);e.default=d},536:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.DomainTemplateItem=void 0;var c=u(r(5469)),l=u(r(4117)),f=function(t){this.name=t.name,this.description=t.description,this.createdAt=t.createdAt?new Date(t.createdAt):"",this.createdBy=t.createdBy,this.id=t.id,t.version&&(this.version=t.version,t.version.createdAt&&(this.version.createdAt=new Date(t.version.createdAt))),t.versions&&t.versions.length&&(this.versions=t.versions.map((function(t){var e=i({},t);return e.createdAt=new Date(t.createdAt),e})))};e.DomainTemplateItem=f;var p=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r.baseRoute="/v3/",r}return o(e,t),e.prototype.parseCreationResponse=function(t){return new f(t.body.template)},e.prototype.parseCreationVersionResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body&&t.body.template&&(e.template=new f(t.body.template)),e},e.prototype.parseMutationResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body&&t.body.template&&(e.templateName=t.body.template.name),e},e.prototype.parseNotificationResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,e},e.prototype.parseMutateTemplateVersionResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body.template&&(e.templateName=t.body.template.name,e.templateVersion={tag:t.body.template.version.tag}),e},e.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){return new f(t)})),e.pages=this.parsePageLinks(t,"?","p"),e.status=t.status,e},e.prototype.parseListTemplateVersions=function(t){var e={};return e.template=new f(t.body.template),e.pages=this.parsePageLinks(t,"?","p"),e},e.prototype.list=function(t,e){return s(this,void 0,void 0,(function(){return a(this,(function(r){return[2,this.requestListWithPages((0,c.default)(this.baseRoute,t,"/templates"),e)]}))}))},e.prototype.get=function(t,e,r){return this.request.get((0,c.default)(this.baseRoute,t,"/templates/",e),r).then((function(t){return new f(t.body.template)}))},e.prototype.create=function(t,e){var r=this;return this.request.postWithFD((0,c.default)(this.baseRoute,t,"/templates"),e).then((function(t){return r.parseCreationResponse(t)}))},e.prototype.update=function(t,e,r){var n=this;return this.request.putWithFD((0,c.default)(this.baseRoute,t,"/templates/",e),r).then((function(t){return n.parseMutationResponse(t)}))},e.prototype.destroy=function(t,e){var r=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates/",e)).then((function(t){return r.parseMutationResponse(t)}))},e.prototype.destroyAll=function(t){var e=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates")).then((function(t){return e.parseNotificationResponse(t)}))},e.prototype.listVersions=function(t,e,r){var n=this;return this.request.get((0,c.default)(this.baseRoute,t,"/templates",e,"/versions"),r).then((function(t){return n.parseListTemplateVersions(t)}))},e.prototype.getVersion=function(t,e,r){return this.request.get((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",r)).then((function(t){return new f(t.body.template)}))},e.prototype.createVersion=function(t,e,r){var n=this;return this.request.postWithFD((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions"),r).then((function(t){return n.parseCreationVersionResponse(t)}))},e.prototype.updateVersion=function(t,e,r,n){var o=this;return this.request.putWithFD((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",r),n).then((function(t){return o.parseMutateTemplateVersionResponse(t)}))},e.prototype.destroyVersion=function(t,e,r){var n=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",r)).then((function(t){return n.parseMutateTemplateVersionResponse(t)}))},e}(l.default);e.default=p},4235:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var u=a(r(5469)),c=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r}return o(e,t),e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"/"),e.status=t.status,e},e.prototype.get=function(t,e){return i(this,void 0,void 0,(function(){return s(this,(function(r){return[2,this.requestListWithPages((0,u.default)("/v3",t,"events"),e)]}))}))},e}(a(r(4117)).default);e.default=c},9884:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t){this.request=t}return t.prototype.list=function(){var t=this;return this.request.get("/v1/ip_pools").then((function(e){return t.parseIpPoolsResponse(e)}))},t.prototype.create=function(t){return n(this,void 0,void 0,(function(){var e;return o(this,(function(n){switch(n.label){case 0:return[4,this.request.postWithFD("/v1/ip_pools",t)];case 1:return e=n.sent(),[2,r({status:e.status},e.body)]}}))}))},t.prototype.update=function(t,e){return n(this,void 0,void 0,(function(){var n;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.patchWithFD("/v1/ip_pools/".concat(t),e)];case 1:return n=o.sent(),[2,r({status:n.status},n.body)]}}))}))},t.prototype.delete=function(t,e){return n(this,void 0,void 0,(function(){var n;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.delete("/v1/ip_pools/".concat(t),e)];case 1:return n=o.sent(),[2,r({status:n.status},n.body)]}}))}))},t.prototype.parseIpPoolsResponse=function(t){return r({status:t.status},t.body)},t}();e.default=i},2542:function(t,e){"use strict";var r=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},n=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t){this.request=t}return t.prototype.list=function(t){return r(this,void 0,void 0,(function(){var e;return n(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v3/ips",t)];case 1:return e=r.sent(),[2,this.parseIpsResponse(e)]}}))}))},t.prototype.get=function(t){return r(this,void 0,void 0,(function(){var e;return n(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v3/ips/".concat(t))];case 1:return e=r.sent(),[2,this.parseIpsResponse(e)]}}))}))},t.prototype.parseIpsResponse=function(t){return t.body},t}();e.default=o},7145:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){this.path=e,this.request=t}return t.prototype.list=function(){return n(this,void 0,void 0,(function(){var t;return o(this,(function(e){switch(e.label){case 0:return[4,this.request.get(this.path)];case 1:return[2,{items:(t=e.sent()).body.items,status:t.status}]}}))}))},t.prototype.get=function(t){return n(this,void 0,void 0,(function(){var e;return o(this,(function(n){switch(n.label){case 0:return[4,this.request.get("".concat(this.path,"/").concat(t))];case 1:return e=n.sent(),[2,r(r({},e.body),{status:e.status})]}}))}))},t}();e.default=i},7439:function(t,e){"use strict";var r=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},n=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){this.request=t,this.path=e}return t.prototype.list=function(){return r(this,void 0,void 0,(function(){var t;return n(this,(function(e){switch(e.label){case 0:return[4,this.request.get(this.path)];case 1:return[2,{status:(t=e.sent()).status,supported_filters:t.body.supported_filters}]}}))}))},t}();e.default=o},7773:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e,r,n,o,i){void 0===i&&(i=console);var s=t.call(this,e)||this;return s.request=e,s.attributes=r,s.filters=n,s.sharing=o,s.logger=i,s}return o(e,t),e.prototype.convertDateToUTC=function(t,e){return this.logger.warn('Date: "'.concat(e,'" was auto-converted to UTC time zone.\nValue "').concat(e.toISOString(),'" will be used for request.\nConsider using string type for property "').concat(t,'" to avoid auto-converting')),e.toISOString()},e.prototype.prepareQueryData=function(t){var e=this,r=t,n=Object.keys(r).reduce((function(n,o){var i=o;if(r[i]&&"object"==typeof r[i]){var s=t[i];n[i]=e.convertDateToUTC(i,s)}return n}),{});return i(i({},t),n)},e.prototype.prepareInboxPlacementsResult=function(t){var e={},r={created_at:new Date(t.created_at),updated_at:new Date(t.updated_at),sharing_expires_at:new Date(t.sharing_expires_at)};t.Box&&delete(e=i(i({},t.Box),{created_at:new Date(t.Box.created_at),updated_at:new Date(t.Box.updated_at),last_result_at:new Date(t.Box.last_result_at)})).ID;var n=i(i(i(i({},t),{Box:e}),r),{id:t.Id});return delete n.ID,n},e.prototype.parseList=function(t){var e=this,r={};return r.items=t.body.items.map((function(t){return e.prepareInboxPlacementsResult(t)})),r.pages=this.parsePageLinks(t,"?","address"),r.status=t.status,r},e.prototype.list=function(t){return s(this,void 0,void 0,(function(){var e,r;return a(this,(function(n){switch(n.label){case 0:return e=this.prepareQueryData(t),[4,this.request.get("/v4/inbox/results",e)];case 1:return r=n.sent(),[2,this.parseList(r)]}}))}))},e.prototype.get=function(t){return s(this,void 0,void 0,(function(){var e,r;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v4/inbox/results/".concat(t))];case 1:return e=n.sent(),r=this.prepareInboxPlacementsResult(e.body.result),[2,{status:e.status,inboxPlacementResult:r}]}}))}))},e.prototype.destroy=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.delete("/v4/inbox/results/".concat(t))];case 1:return e=r.sent(),[2,i({status:e.status},e.body)]}}))}))},e.prototype.getResultByShareId=function(t){return s(this,void 0,void 0,(function(){var e,r;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v4/inbox/sharing/public/".concat(t))];case 1:return e=n.sent(),r=this.prepareInboxPlacementsResult(e.body.result),[2,{status:e.status,inboxPlacementResult:r}]}}))}))},e}(u(r(4117)).default);e.default=c},4615:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t){this.request=t}return t.prototype.prepareInboxPlacementsResultSharing=function(t){var e={expires_at:new Date(t.expires_at)};return r(r({},t),e)},t.prototype.get=function(t){return n(this,void 0,void 0,(function(){var e,n;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.get("/v4/inbox/sharing/".concat(t))];case 1:return e=o.sent(),n=this.prepareInboxPlacementsResultSharing(e.body.sharing),[2,r({status:e.status},n)]}}))}))},t.prototype.update=function(t,e){return n(this,void 0,void 0,(function(){var n,i;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.put("/v4/inbox/sharing/".concat(t),{},{query:"enabled=".concat(e.enabled)})];case 1:return n=o.sent(),i=this.prepareInboxPlacementsResultSharing(n.body.sharing),[2,r(r({},i),{status:n.status})]}}))}))},t}();e.default=i},9915:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e,r,n,o){void 0===o&&(o=console);var i=t.call(this,e)||this;return i.request=e,i.attributes=r,i.filters=n,i.logger=o,i}return o(e,t),e.prototype.convertDateToUTC=function(t,e){return this.logger.warn('Date: "'.concat(e,'" was auto-converted to UTC time zone.\nValue "').concat(e.toISOString(),'" will be used for request.\nConsider using string type for property "').concat(t,'" to avoid auto-converting')),e.toISOString()},e.prototype.prepareQueryData=function(t){var e=this,r=t,n=Object.keys(r).reduce((function(n,o){var i=o;if(r[i]&&"object"==typeof r[i]){var s=t[i];n[i]=e.convertDateToUTC(i,s)}return n}),{});return i(i({},t),n)},e.prototype.prepareResult=function(t){var e=this.prepareSeedList(t.body);return i(i({},e),{status:t.status})},e.prototype.prepareSeedList=function(t){var e,r={created_at:new Date(t.created_at),updated_at:new Date(t.updated_at),last_result_at:new Date(t.last_result_at)};e=t.Seeds?t.Seeds.map((function(t){var e={created_at:new Date(t.created_at),updated_at:new Date(t.updated_at),max_email_count_hit_at:new Date(t.max_email_count_hit_at),last_sent_to_at:new Date(t.last_sent_to_at),last_delivered_at:new Date(t.last_delivered_at)};return i(i({},t),e)})):null;var n=i(i(i({},t),{Seeds:e}),r);return delete n.Id,n},e.prototype.parseList=function(t){var e,r=this,n={items:[]};return n.items=null===(e=t.body.items)||void 0===e?void 0:e.map((function(t){return r.prepareSeedList(t)})),n.pages=this.parsePageLinks(t,"?","address"),n.status=t.status,n},e.prototype.list=function(t){return s(this,void 0,void 0,(function(){var e,r;return a(this,(function(n){switch(n.label){case 0:return e=this.prepareQueryData(t),[4,this.request.get("/v4/inbox/seedlists",e)];case 1:return r=n.sent(),[2,i(i({},this.parseList(r)),{status:200})]}}))}))},e.prototype.get=function(t){return s(this,void 0,void 0,(function(){var e,r;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v4/inbox/seedlists/".concat(t))];case 1:return e=n.sent(),r=this.prepareSeedList(e.body.seedlist),[2,i(i({},r),{status:e.status})]}}))}))},e.prototype.create=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.postWithFD("/v4/inbox/seedlists",t)];case 1:return e=r.sent(),[2,this.prepareResult(e)]}}))}))},e.prototype.update=function(t,e){return s(this,void 0,void 0,(function(){var r;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.put("/v4/inbox/seedlists/".concat(t),e)];case 1:return r=n.sent(),[2,this.prepareResult(r)]}}))}))},e.prototype.destroy=function(t){return s(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.request.delete("/v4/inbox/seedlists/".concat(t))]}))}))},e}(u(r(4117)).default);e.default=c},419:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e,r,n){this.request=t,this.seedsLists=e,this.seedsLists=e,this.results=r,this.providers=n}return t.prototype.runTest=function(t){return n(this,void 0,void 0,(function(){var e;return o(this,(function(n){switch(n.label){case 0:return[4,this.request.post("/v4/inbox/tests",t)];case 1:return e=n.sent(),[2,r(r({},e.body),{status:e.status})]}}))}))},t}();e.default=i},4022:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t){this.path="/v4/inbox/providers",this.request=t}return t.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){var e={created_at:new Date(t.created_at),updated_at:new Date(t.updated_at)};return r(r({},t),e)})),e.status=t.status,e},t.prototype.list=function(){return n(this,void 0,void 0,(function(){var t;return o(this,(function(e){switch(e.label){case 0:return[4,this.request.get(this.path)];case 1:return t=e.sent(),[2,this.parseList(t)]}}))}))},t}();e.default=i},5488:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(6685)),s=o(r(5612)),a=o(r(4235)),u=o(r(2344)),c=o(r(3218)),l=o(r(6368)),f=o(r(5510)),p=o(r(2052)),d=o(r(1045)),h=o(r(2542)),y=o(r(9884)),b=o(r(4285)),v=o(r(2185)),_=o(r(7585)),g=o(r(1948)),m=o(r(536)),w=o(r(1654)),O=o(r(5902)),j=o(r(9915)),P=o(r(419)),x=o(r(7773)),S=o(r(7145)),D=o(r(7439)),M=o(r(4615)),T=o(r(4022)),R=o(r(4428)),E=function(){function t(t,e){var r=n({},t);if(r.url||(r.url="https://api.mailgun.net"),!r.username)throw new Error('Parameter "username" is required');if(!r.key)throw new Error('Parameter "key" is required');this.request=new i.default(r,e);var o=new v.default(this.request),E=new _.default(this.request),k=new m.default(this.request),q=new w.default(this.request),A=new g.default(this.request),C=new M.default(this.request),B=new S.default(this.request,"/v4/inbox/seedlists/a"),F=new S.default(this.request,"/v4/inbox/results/a"),L=new D.default(this.request,"/v4/inbox/seedlists/_filters"),U=new D.default(this.request,"/v4/inbox/results/_filters"),N=new j.default(this.request,B,L),I=new x.default(this.request,F,U,C),W=new T.default(this.request);this.domains=new s.default(this.request,E,k,q),this.webhooks=new l.default(this.request),this.events=new a.default(this.request),this.stats=new u.default(this.request),this.metrics=new R.default(this.request),this.suppressions=new c.default(this.request),this.messages=new f.default(this.request),this.routes=new p.default(this.request),this.ips=new h.default(this.request),this.ip_pools=new y.default(this.request),this.lists=new b.default(this.request,o),this.validate=new d.default(this.request,A),this.subaccounts=new O.default(this.request),this.inboxPlacements=new P.default(this.request,N,I,W)}return t.prototype.setSubaccount=function(t){var e;null===(e=this.request)||void 0===e||e.setSubaccountHeader(t)},t.prototype.resetSubaccount=function(){var t;null===(t=this.request)||void 0===t||t.resetSubaccountHeader()},t}();e.default=E},2185:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r.baseRoute="/v3/lists",r}return o(e,t),e.prototype.checkAndUpdateData=function(t){var e=i({},t);return"object"==typeof t.vars&&(e.vars=JSON.stringify(e.vars)),"boolean"==typeof t.subscribed&&(e.subscribed=t.subscribed?"yes":"no"),e},e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"?","address"),e},e.prototype.listMembers=function(t,e){return s(this,void 0,void 0,(function(){return a(this,(function(r){return[2,this.requestListWithPages("".concat(this.baseRoute,"/").concat(t,"/members/pages"),e)]}))}))},e.prototype.getMember=function(t,e){return this.request.get("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e)).then((function(t){return t.body.member}))},e.prototype.createMember=function(t,e){var r=this.checkAndUpdateData(e);return this.request.postWithFD("".concat(this.baseRoute,"/").concat(t,"/members"),r).then((function(t){return t.body.member}))},e.prototype.createMembers=function(t,e){var r={members:Array.isArray(e.members)?JSON.stringify(e.members):e.members,upsert:e.upsert};return this.request.postWithFD("".concat(this.baseRoute,"/").concat(t,"/members.json"),r).then((function(t){return t.body}))},e.prototype.updateMember=function(t,e,r){var n=this.checkAndUpdateData(r);return this.request.putWithFD("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e),n).then((function(t){return t.body.member}))},e.prototype.destroyMember=function(t,e){return this.request.delete("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e)).then((function(t){return t.body}))},e}(u(r(4117)).default);e.default=c},4285:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e,r){var n=t.call(this,e)||this;return n.request=e,n.baseRoute="/v3/lists",n.members=r,n}return o(e,t),e.prototype.parseValidationResult=function(t,e){return{status:t,validationResult:i(i({},e),{created_at:new Date(1e3*e.created_at)})}},e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"?","address"),e.status=t.status,e},e.prototype.list=function(t){return s(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.requestListWithPages("".concat(this.baseRoute,"/pages"),t)]}))}))},e.prototype.get=function(t){return this.request.get("".concat(this.baseRoute,"/").concat(t)).then((function(t){return t.body.list}))},e.prototype.create=function(t){return this.request.postWithFD(this.baseRoute,t).then((function(t){return t.body.list}))},e.prototype.update=function(t,e){return this.request.putWithFD("".concat(this.baseRoute,"/").concat(t),e).then((function(t){return t.body.list}))},e.prototype.destroy=function(t){return this.request.delete("".concat(this.baseRoute,"/").concat(t)).then((function(t){return t.body}))},e.prototype.validate=function(t){return this.request.post("".concat(this.baseRoute,"/").concat(t,"/validate"),{}).then((function(t){return i({status:t.status},t.body)}))},e.prototype.validationResult=function(t){var e=this;return this.request.get("".concat(this.baseRoute,"/").concat(t,"/validate")).then((function(t){return e.parseValidationResult(t.status,t.body)}))},e.prototype.cancelValidation=function(t){return this.request.delete("".concat(this.baseRoute,"/").concat(t,"/validate")).then((function(t){return{status:t.status,message:t.body.message}}))},e}(u(r(4117)).default);e.default=c},5510:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(9538)),s=function(){function t(t){this.request=t}return t.prototype.prepareBooleanValues=function(t){var e=new Set(["o:testmode","t:text","o:dkim","o:tracking","o:tracking-clicks","o:tracking-opens","o:require-tls","o:skip-verification"]);if(!t||0===Object.keys(t).length)throw i.default.getUserDataError("Message data object can not be empty","Message data object can not be empty");return Object.keys(t).reduce((function(r,n){return e.has(n)&&"boolean"==typeof t[n]?r[n]=t[n]?"yes":"no":r[n]=t[n],r}),{})},t.prototype._parseResponse=function(t){return n({status:t.status},t.body)},t.prototype.create=function(t,e){if(e.message)return this.request.postWithFD("/v3/".concat(t,"/messages.mime"),e).then(this._parseResponse);var r=this.prepareBooleanValues(e);return this.request.postWithFD("/v3/".concat(t,"/messages"),r).then(this._parseResponse)},t}();e.default=s},4428:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){void 0===e&&(e=console),this.request=t,this.logger=e}return t.prototype.convertDateToUTC=function(t,e){return this.logger.warn('Date:"'.concat(e,'" was auto-converted to UTC time zone.\nValue "').concat(e.toUTCString(),'" will be used for request.\nConsider using string type for property "').concat(t,'" to avoid auto-converting')),e.toUTCString()},t.prototype.prepareQuery=function(t){var e,n;if(t){var o=null==t?void 0:t.start,i=null==t?void 0:t.end;e=o instanceof Date?this.convertDateToUTC("start",o):null!=o?o:"",n=i&&i instanceof Date?this.convertDateToUTC("end",i):null!=i?i:""}return r(r({},t),{start:e,end:n})},t.prototype.handleResponse=function(t){var e=t.body,n=Date.parse(e.start)?new Date(e.start):null,o=Date.parse(e.end)?new Date(e.end):null;return r(r({},e),{status:t.status,start:n,end:o})},t.prototype.getAccount=function(t){return n(this,void 0,void 0,(function(){var e,r;return o(this,(function(n){switch(n.label){case 0:return e=this.prepareQuery(t),[4,this.request.post("/v1/analytics/metrics",e)];case 1:return r=n.sent(),[2,this.handleResponse(r)]}}))}))},t.prototype.getAccountUsage=function(t){return n(this,void 0,void 0,(function(){var e,r;return o(this,(function(n){switch(n.label){case 0:return e=this.prepareQuery(t),[4,this.request.post("/v1/analytics/usage/metrics",e)];case 1:return r=n.sent(),[2,this.handleResponse(r)]}}))}))},t}();e.default=i},2052:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(t){return this.request.get("/v3/routes",t).then((function(t){return t.body.items}))},t.prototype.get=function(t){return this.request.get("/v3/routes/".concat(t)).then((function(t){return t.body.route}))},t.prototype.create=function(t){return this.request.postWithFD("/v3/routes",t).then((function(t){return t.body.route}))},t.prototype.update=function(t,e){return this.request.putWithFD("/v3/routes/".concat(t),e).then((function(t){return t.body}))},t.prototype.destroy=function(t){return this.request.delete("/v3/routes/".concat(t)).then((function(t){return t.body}))},t}();e.default=r},2344:function(t,e,r){"use strict";var n=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o<i;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return t.concat(n||Array.prototype.slice.call(e))},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(5469)),s=o(r(4552)),a=function(){function t(t,e){void 0===e&&(e=console),this.request=t,this.logger=e}return t.prototype.convertDateToUTC=function(t,e){return this.logger.warn('Date:"'.concat(e,'" was auto-converted to UTC time zone.\nValue "').concat(e.toUTCString(),'" will be used for request.\nConsider using string type for property "').concat(t,'" to avoid auto-converting')),[t,e.toUTCString()]},t.prototype.prepareSearchParams=function(t){var e=this,r=[];return"object"==typeof t&&Object.keys(t).length&&(r=Object.entries(t).reduce((function(t,r){var o=r[0],i=r[1];if(Array.isArray(i)&&i.length){var s=i.map((function(t){return[o,t]}));return n(n([],t,!0),s,!0)}return i instanceof Date?(t.push(e.convertDateToUTC(o,i)),t):("string"==typeof i&&t.push([o,i]),t)}),[])),r},t.prototype.parseStats=function(t){return new s.default(t.body)},t.prototype.getDomain=function(t,e){var r=this.prepareSearchParams(e);return this.request.get((0,i.default)("/v3",t,"stats/total"),r).then(this.parseStats)},t.prototype.getAccount=function(t){var e=this.prepareSearchParams(t);return this.request.get("/v3/stats/total",e).then(this.parseStats)},t}();e.default=a},4552:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0});var n=function(t){this.start=new Date(t.start),this.end=new Date(t.end),this.resolution=t.resolution,this.stats=t.stats.map((function(t){var e=r({},t);return e.time=new Date(t.time),e}))};e.default=n},5902:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(t){return this.request.get("/v5/accounts/subaccounts",t).then((function(t){return t.body}))},t.prototype.get=function(t){return this.request.get("/v5/accounts/subaccounts/".concat(t)).then((function(t){return t.body}))},t.prototype.create=function(t){return this.request.postWithFD("/v5/accounts/subaccounts",{name:t}).then((function(t){return t.body}))},t.prototype.enable=function(t){return this.request.post("/v5/accounts/subaccounts/".concat(t,"/enable")).then((function(t){return t.body}))},t.prototype.disable=function(t){return this.request.post("/v5/accounts/subaccounts/".concat(t,"/disable")).then((function(t){return t.body}))},t.SUBACCOUNT_HEADER="X-Mailgun-On-Behalf-Of",t}();e.default=r},7897:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(9146),a=function(t){function e(e){var r=t.call(this,s.SuppressionModels.BOUNCES)||this;return r.address=e.address,r.code=+e.code,r.error=e.error,r.created_at=new Date(e.created_at),r}return o(e,t),e}(i(r(2398)).default);e.default=a},952:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(9146),a=function(t){function e(e){var r=t.call(this,s.SuppressionModels.COMPLAINTS)||this;return r.address=e.address,r.created_at=new Date(e.created_at),r}return o(e,t),e}(i(r(2398)).default);e.default=a},2398:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t){this.type=t};e.default=r},3218:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o<i;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return t.concat(n||Array.prototype.slice.call(e))},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=u(r(5469)),l=u(r(9538)),f=u(r(4117)),p=u(r(7897)),d=u(r(952)),h=u(r(740)),y=u(r(9520)),b={headers:{"Content-Type":"application/json"}},v=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r.models={bounces:p.default,complaints:d.default,unsubscribes:h.default,whitelists:y.default},r}return o(e,t),e.prototype.parseList=function(t,e){var r,n={};return n.items=(null===(r=t.body.items)||void 0===r?void 0:r.map((function(t){return new e(t)})))||[],n.pages=this.parsePageLinks(t,"?","address"),n.status=t.status,n},e.prototype._parseItem=function(t,e){return new e(t)},e.prototype.createWhiteList=function(t,e,r){if(r)throw l.default.getUserDataError("Data property should be an object","Whitelist's creation process does not support multiple creations. Data property should be an object");return this.request.postWithFD((0,c.default)("v3",t,"whitelists"),e).then(this.prepareResponse)},e.prototype.createUnsubscribe=function(t,e){if(Array.isArray(e)){if(e.some((function(t){return t.tag})))throw l.default.getUserDataError("Tag property should not be used for creating multiple unsubscribes.","Tag property can be used only if one unsubscribe provided as second argument of create method. Please use tags instead.");return this.request.post((0,c.default)("v3",t,"unsubscribes"),JSON.stringify(e),b).then(this.prepareResponse)}if(null==e?void 0:e.tags)throw l.default.getUserDataError("Tags property should not be used for creating one unsubscribe.","Tags property can be used if you provides an array of unsubscribes as second argument of create method. Please use tag instead");if(Array.isArray(e.tag))throw l.default.getUserDataError("Tag property can not be an array","Please use array of unsubscribes as second argument of create method to be able to provide few tags");return this.request.postWithFD((0,c.default)("v3",t,"unsubscribes"),e).then(this.prepareResponse)},e.prototype.getModel=function(t){if(t in this.models)return this.models[t];throw l.default.getUserDataError("Unknown type value","Type may be only one of [bounces, complaints, unsubscribes, whitelists]")},e.prototype.prepareResponse=function(t){return{message:t.body.message,type:t.body.type||"",value:t.body.value||"",status:t.status}},e.prototype.list=function(t,e,r){return i(this,void 0,void 0,(function(){var n;return s(this,(function(o){return n=this.getModel(e),[2,this.requestListWithPages((0,c.default)("v3",t,e),r,n)]}))}))},e.prototype.get=function(t,e,r){var n=this,o=this.getModel(e);return this.request.get((0,c.default)("v3",t,e,encodeURIComponent(r))).then((function(t){return n._parseItem(t.body,o)}))},e.prototype.create=function(t,e,r){var n;this.getModel(e);var o=Array.isArray(r);return"whitelists"===e?this.createWhiteList(t,r,o):"unsubscribes"===e?this.createUnsubscribe(t,r):(n=o?a([],r,!0):[r],this.request.post((0,c.default)("v3",t,e),JSON.stringify(n),b).then(this.prepareResponse))},e.prototype.destroy=function(t,e,r){return this.getModel(e),this.request.delete((0,c.default)("v3",t,e,encodeURIComponent(r))).then((function(t){return{message:t.body.message,value:t.body.value||"",address:t.body.address||"",status:t.status}}))},e}(f.default);e.default=v,t.exports=v},740:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(9146),a=function(t){function e(e){var r=t.call(this,s.SuppressionModels.UNSUBSCRIBES)||this;return r.address=e.address,r.tags=e.tags,r.created_at=new Date(e.created_at),r}return o(e,t),e}(i(r(2398)).default);e.default=a},9520:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(9146),a=function(t){function e(e){var r=t.call(this,s.SuppressionModels.WHITELISTS)||this;return r.value=e.value,r.reason=e.reason,r.createdAt=new Date(e.createdAt),r}return o(e,t),e}(i(r(2398)).default);e.default=a},1948:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.MultipleValidationJob=void 0;var c=u(r(4117)),l=u(r(8968)),f=u(r(9538)),p=function(t,e){var r,n;this.createdAt=new Date(t.created_at),this.id=t.id,this.quantity=t.quantity,this.recordsProcessed=t.records_processed,this.status=t.status,this.responseStatusCode=e,t.download_url&&(this.downloadUrl={csv:null===(r=t.download_url)||void 0===r?void 0:r.csv,json:null===(n=t.download_url)||void 0===n?void 0:n.json}),t.summary&&(this.summary={result:{catchAll:t.summary.result.catch_all,deliverable:t.summary.result.deliverable,doNotSend:t.summary.result.do_not_send,undeliverable:t.summary.result.undeliverable,unknown:t.summary.result.unknown},risk:{high:t.summary.risk.high,low:t.summary.risk.low,medium:t.summary.risk.medium,unknown:t.summary.risk.unknown}})};e.MultipleValidationJob=p;var d=function(t){function e(e){var r=t.call(this)||this;return r.request=e,r.attachmentsHandler=new l.default,r}return o(e,t),e.prototype.handleResponse=function(t){return i({status:t.status},null==t?void 0:t.body)},e.prototype.parseList=function(t){var e={};return e.jobs=t.body.jobs.map((function(e){return new p(e,t.status)})),e.pages=this.parsePageLinks(t,"?","pivot"),e.total=t.body.total,e.status=t.status,e},e.prototype.list=function(t){return s(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.requestListWithPages("/v4/address/validate/bulk",t)]}))}))},e.prototype.get=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v4/address/validate/bulk/".concat(t))];case 1:return e=r.sent(),[2,new p(e.body,e.status)]}}))}))},e.prototype.convertToExpectedShape=function(t){return this.attachmentsHandler.isBuffer(t.file)?{multipleValidationFile:t.file}:"string"==typeof t.file?{multipleValidationFile:{data:t.file}}:(this.attachmentsHandler.isStream(t.file),{multipleValidationFile:t.file})},e.prototype.create=function(t,e){return s(this,void 0,void 0,(function(){var r,n;return a(this,(function(o){switch(o.label){case 0:if(!e||!e.file)throw f.default.getUserDataError('"file" property expected.','Make sure second argument has "file" property.');return r=this.convertToExpectedShape(e),[4,this.request.postWithFD("/v4/address/validate/bulk/".concat(t),r)];case 1:return n=o.sent(),[2,this.handleResponse(n)]}}))}))},e.prototype.destroy=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.delete("/v4/address/validate/bulk/".concat(t))];case 1:return e=r.sent(),[2,this.handleResponse(e)]}}))}))},e}(c.default);e.default=d},1045:function(t,e){"use strict";var r=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},n=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){this.request=t,this.multipleValidation=e}return t.prototype.get=function(t){return r(this,void 0,void 0,(function(){var e;return n(this,(function(r){switch(r.label){case 0:return e={address:t},[4,this.request.get("/v4/address/validate",e)];case 1:return[2,r.sent().body]}}))}))},t}();e.default=o},6368:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.Webhook=void 0;var o=n(r(5469)),i=function(t,e,r){this.id=t,this.url=e,this.urls=r};e.Webhook=i;var s=function(){function t(t){this.request=t}return t.prototype._parseWebhookList=function(t){return t.body.webhooks},t.prototype._parseWebhookWithID=function(t){return function(e){var r,n=null===(r=null==e?void 0:e.body)||void 0===r?void 0:r.webhook,o=null==n?void 0:n.url,s=null==n?void 0:n.urls;return o||(o=s&&s.length?s[0]:void 0),s&&0!==s.length||!o||(s=[o]),new i(t,o,s)}},t.prototype._parseWebhookTest=function(t){return{code:t.body.code,message:t.body.message}},t.prototype.list=function(t,e){return this.request.get((0,o.default)("/v3/domains",t,"webhooks"),e).then(this._parseWebhookList)},t.prototype.get=function(t,e){return this.request.get((0,o.default)("/v3/domains",t,"webhooks",e)).then(this._parseWebhookWithID(e))},t.prototype.create=function(t,e,r,n){return void 0===n&&(n=!1),n?this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e,"test"),{url:r}).then(this._parseWebhookTest):this.request.postWithFD((0,o.default)("/v3/domains",t,"webhooks"),{id:e,url:r}).then(this._parseWebhookWithID(e))},t.prototype.update=function(t,e,r){return this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e),{url:r}).then(this._parseWebhookWithID(e))},t.prototype.destroy=function(t,e){return this.request.delete((0,o.default)("/v3/domains",t,"webhooks",e)).then(this._parseWebhookWithID(e))},t}();e.default=s},8968:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(9538)),s=function(){function t(t,e){this._stream=t,this.size=e}return t.prototype.stream=function(){return this._stream},Object.defineProperty(t.prototype,Symbol.toStringTag,{get:function(){return"Blob"},enumerable:!1,configurable:!0}),t}(),a=function(){function t(){}return t.prototype.getAttachmentOptions=function(t){var e=t.filename,r=t.contentType,o=t.knownLength;return n(n(n({},e?{filename:e}:{filename:"file"}),r&&{contentType:r}),o&&{knownLength:o})},t.prototype.getFileInfo=function(t){var e=t.name,r=t.type,n=t.size;return this.getAttachmentOptions({filename:e,contentType:r,knownLength:n})},t.prototype.getCustomFileInfo=function(t){var e=t.filename,r=t.contentType,n=t.knownLength;return this.getAttachmentOptions({filename:e,contentType:r,knownLength:n})},t.prototype.getBufferInfo=function(t){var e=t.byteLength;return this.getAttachmentOptions({filename:"file",contentType:"",knownLength:e})},t.prototype.isStream=function(t){return"object"==typeof t&&"function"==typeof t.pipe},t.prototype.isCustomFile=function(t){return"object"==typeof t&&!!t.data},t.prototype.isBrowserFile=function(t){return"object"==typeof t&&(!!t.name||"undefined"!=typeof Blob&&t instanceof Blob)},t.prototype.isBuffer=function(t){return"undefined"!=typeof Buffer&&Buffer.isBuffer(t)},t.prototype.getAttachmentInfo=function(t){var e=this.isBrowserFile(t),r=this.isCustomFile(t);if(!("string"==typeof t)){if(e)return this.getFileInfo(t);if("undefined"!=typeof Buffer&&Buffer.isBuffer(t))return this.getBufferInfo(t);if(r)return this.getCustomFileInfo(t)}return{filename:"file",contentType:void 0,knownLength:void 0}},t.prototype.convertToFDexpectedShape=function(t){var e,r=this.isStream(t),n=this.isBrowserFile(t),o=this.isCustomFile(t);if(r||"string"==typeof t||n||this.isBuffer(t))e=t;else{if(!o)throw i.default.getUserDataError("Unknown attachment type ".concat(typeof t),'The "attachment" property expects either Buffer, Blob, or String.\n Also, It is possible to provide an object that has the property "data" with a value that is equal to one of the types counted before.\n Additionally, you may use an array to send more than one attachment.');e=t.data}return e},t.prototype.getBlobFromStream=function(t,e){return new s(t,e)},t}();e.default=a},9538:function(t,e){"use strict";var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var o=function(t){function e(e){var r=e.status,n=e.statusText,o=e.message,i=e.body,s=void 0===i?{}:i,a=this,u="",c="";return"string"==typeof s?u=s:(u=(null==s?void 0:s.message)||"",c=(null==s?void 0:s.error)||""),(a=t.call(this)||this).stack="",a.status=r,a.message=o||c||n||"",a.details=u,a.type="MailgunAPIError",a}return n(e,t),e.getUserDataError=function(t,e){return new this({status:400,statusText:t,body:{message:e}})},e}(Error);e.default=o},917:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(9538)),i=n(r(8968)),s=function(){function t(t){this.FormDataConstructor=t,this.fileKeys=["attachment","inline","multipleValidationFile"],this.attachmentsHandler=new i.default}return t.prototype.createFormData=function(t){var e=this;if(!t)throw new Error("Please provide data object");return Object.keys(t).filter((function(e){return t[e]})).reduce((function(r,n){if(e.fileKeys.includes(n)){var i=t[n];if(e.isMessageAttachment(i))return e.addFilesToFD(n,i,r),r;throw o.default.getUserDataError("Unknown value ".concat(t[n]," with type ").concat(typeof t[n],' for property "').concat(n,'"'),'The key "'.concat(n,'" should have type of Buffer, Stream, File, or String '))}if("message"===n){var s=t[n];if(!s||!e.isMIME(s))throw o.default.getUserDataError('Unknown data type for "'.concat(n,'" property'),"The mime data should have type of Buffer, String or Blob");return e.addMimeDataToFD(n,s,r),r}return e.addCommonPropertyToFD(n,t[n],r),r}),new this.FormDataConstructor)},t.prototype.addMimeDataToFD=function(t,e,r){if("string"!=typeof e){if(this.isFormDataPackage(r))r.append(t,e,{filename:"MimeMessage"});else if(void 0!==typeof Blob){var n=r;if(e instanceof Blob)return void n.append(t,e,"MimeMessage");if(this.attachmentsHandler.isBuffer(e)){var o=new Blob([e]);n.append(t,o,"MimeMessage")}}}else r.append(t,e)},t.prototype.isMIME=function(t){return"string"==typeof t||"undefined"!=typeof Blob&&t instanceof Blob||this.attachmentsHandler.isBuffer(t)||"undefined"!=typeof ReadableStream&&t instanceof ReadableStream},t.prototype.isFormDataPackage=function(t){return"object"==typeof t&&null!==t&&"function"==typeof t.getHeaders},t.prototype.isMessageAttachment=function(t){var e=this;return this.attachmentsHandler.isCustomFile(t)||"string"==typeof t||"undefined"!=typeof File&&t instanceof File||"undefined"!=typeof Blob&&t instanceof Blob||this.attachmentsHandler.isBuffer(t)||this.attachmentsHandler.isStream(t)||Array.isArray(t)&&t.every((function(r){return e.attachmentsHandler.isCustomFile(r)||"undefined"!=typeof File&&r instanceof File||"undefined"!=typeof Blob&&t instanceof Blob||e.attachmentsHandler.isBuffer(r)||e.attachmentsHandler.isStream(r)}))},t.prototype.addFilesToFD=function(t,e,r){var n=this,o=function(t,e,o){var i="multipleValidationFile"===t?"file":t,s=n.attachmentsHandler.convertToFDexpectedShape(e),a=n.attachmentsHandler.getAttachmentInfo(e);if(n.isFormDataPackage(o)){var u=o,c="string"==typeof s?Buffer.from(s):s;u.append(i,c,a)}else if(void 0!==typeof Blob){var l=r;if("string"==typeof s||n.attachmentsHandler.isBuffer(s)){var f=new Blob([s]);return void l.append(i,f,a.filename)}if(s instanceof Blob)return void l.append(i,s,a.filename);if(n.attachmentsHandler.isStream(s)){var p=n.attachmentsHandler.getBlobFromStream(s,a.knownLength);l.set(i,p,a.filename)}}};Array.isArray(e)?e.forEach((function(e){o(t,e,r)})):o(t,e,r)},t.prototype.addCommonPropertyToFD=function(t,e,r){var n=this,i=function(t,e){if(n.isFormDataPackage(r))return"object"==typeof e?(console.warn('The received value is an object. \n"JSON.Stringify" will be used to avoid TypeError \nTo remove this warning: \nConsider switching to built-in FormData or converting the value on your own.\n'),r.append(t,JSON.stringify(e))):r.append(t,e);if("string"==typeof e)return r.append(t,e);if(void 0!==typeof Blob&&e instanceof Blob)return r.append(t,e);throw o.default.getUserDataError("Unknown value type for Form Data. String or Blob expected","Browser compliant FormData allows only string or Blob values for properties that are not attachments.")};Array.isArray(e)?e.forEach((function(e){i(t,e)})):null!=e&&i(t,e)},t}();e.default=s},4117:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var a=s(r(5469)),u=s(r(9538)),c=function(){function t(t){t&&(this.request=t)}return t.prototype.parsePage=function(t,e,r,n){var o=new URL(e).searchParams,i=e&&"string"==typeof e&&e.split(r).pop()||"",s=null;return n&&(s=o.has(n)?o.get(n):void 0),{id:t,page:"?"===r?"?".concat(i):i,iteratorPosition:s,url:e}},t.prototype.parsePageLinks=function(t,e,r){var n=this;return Object.entries(t.body.paging).reduce((function(t,o){var i=o[0],s=o[1];return t[i]=n.parsePage(i,s,e,r),t}),{})},t.prototype.updateUrlAndQuery=function(t,e){var r=t,o=n({},e);return o.page&&(r=(0,a.default)(t,o.page),delete o.page),{url:r,updatedQuery:o}},t.prototype.requestListWithPages=function(t,e,r){return o(this,void 0,void 0,(function(){var n,o,s,a;return i(this,(function(i){switch(i.label){case 0:return n=this.updateUrlAndQuery(t,e),o=n.url,s=n.updatedQuery,this.request?[4,this.request.get(o,s)]:[3,2];case 1:return a=i.sent(),[2,this.parseList(a,r)];case 2:throw new u.default({status:500,statusText:"Request property is empty",body:{message:""}})}}))}))},t}();e.default=c},6685:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),i=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&o(e,t,r);return i(e,t),e},a=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},u=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},c=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var l=s(r(5914)),f=c(r(5469)),p=s(r(6425)),d=c(r(9538)),h=c(r(917)),y=c(r(5902)),b=function(){function t(t,e){this.username=t.username,this.key=t.key,this.url=t.url,this.timeout=t.timeout,this.headers=this.makeHeadersFromObject(t.headers),this.formDataBuilder=new h.default(e),this.maxBodyLength=52428800,this.proxy=null==t?void 0:t.proxy}return t.prototype.request=function(t,e,r){var o,i,s;return a(this,void 0,void 0,(function(){var a,c,l,h,y,b,v,_;return u(this,(function(u){switch(u.label){case 0:null==(a=n({},r))||delete a.headers,c=this.joinAndTransformHeaders(r),l=n({},a),(null==a?void 0:a.query)&&Object.getOwnPropertyNames(null==a?void 0:a.query).length>0&&(l.params=new URLSearchParams(a.query),delete l.query),(null==a?void 0:a.body)&&(h=null==a?void 0:a.body,l.data=h,delete l.body),b=(0,f.default)(this.url,e),u.label=1;case 1:return u.trys.push([1,3,,4]),[4,p.default.request(n(n({method:t.toLocaleUpperCase(),timeout:this.timeout,url:b,headers:c},l),{maxBodyLength:this.maxBodyLength,proxy:this.proxy}))];case 2:return y=u.sent(),[3,4];case 3:throw v=u.sent(),_=v,new d.default({status:(null===(o=null==_?void 0:_.response)||void 0===o?void 0:o.status)||400,statusText:(null===(i=null==_?void 0:_.response)||void 0===i?void 0:i.statusText)||_.code,body:(null===(s=null==_?void 0:_.response)||void 0===s?void 0:s.data)||_.message});case 4:return[4,this.getResponseBody(y)];case 5:return[2,u.sent()]}}))}))},t.prototype.getResponseBody=function(t){return a(this,void 0,void 0,(function(){var e;return u(this,(function(r){if(e={body:{},status:null==t?void 0:t.status},"string"==typeof t.data){if("Mailgun Magnificent API"===t.data)throw new d.default({status:400,statusText:"Incorrect url",body:t.data});e.body={message:t.data}}else e.body=t.data;return[2,e]}))}))},t.prototype.joinAndTransformHeaders=function(t){var e=new p.AxiosHeaders,r=l.encode("".concat(this.username,":").concat(this.key));e.setAuthorization("Basic ".concat(r)),e.set(this.headers);var n=t&&t.headers,o=this.makeHeadersFromObject(n);return e.set(o),e},t.prototype.makeHeadersFromObject=function(t){void 0===t&&(t={});var e=new p.AxiosHeaders;return e=Object.entries(t).reduce((function(t,e){var r=e[0],n=e[1];return t.set(r,n),t}),e)},t.prototype.setSubaccountHeader=function(t){var e,r=this.makeHeadersFromObject(n(n({},this.headers),((e={})[y.default.SUBACCOUNT_HEADER]=t,e)));this.headers.set(r)},t.prototype.resetSubaccountHeader=function(){this.headers.delete(y.default.SUBACCOUNT_HEADER)},t.prototype.query=function(t,e,r,o){return this.request(t,e,n({query:r},o))},t.prototype.command=function(t,e,r,o,i){void 0===i&&(i=!0);var s={};i&&(s={"Content-Type":"application/x-www-form-urlencoded"});var a=n(n(n({},s),{body:r}),o);return this.request(t,e,a)},t.prototype.get=function(t,e,r){return this.query("get",t,e,r)},t.prototype.post=function(t,e,r){return this.command("post",t,e,r)},t.prototype.postWithFD=function(t,e){var r=this.formDataBuilder.createFormData(e);return this.command("post",t,r,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.putWithFD=function(t,e){var r=this.formDataBuilder.createFormData(e);return this.command("put",t,r,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.patchWithFD=function(t,e){var r=this.formDataBuilder.createFormData(e);return this.command("patch",t,r,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.put=function(t,e,r){return this.command("put",t,e,r)},t.prototype.delete=function(t,e){return this.command("delete",t,e)},t}();e.default=b},9146:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.YesNo=e.WebhooksIds=e.SuppressionModels=e.Resolution=void 0,function(t){t.HOUR="hour",t.DAY="day",t.MONTH="month"}(e.Resolution||(e.Resolution={})),function(t){t.BOUNCES="bounces",t.COMPLAINTS="complaints",t.UNSUBSCRIBES="unsubscribes",t.WHITELISTS="whitelists"}(e.SuppressionModels||(e.SuppressionModels={})),function(t){t.CLICKED="clicked",t.COMPLAINED="complained",t.DELIVERED="delivered",t.OPENED="opened",t.PERMANENT_FAIL="permanent_fail",t.TEMPORARY_FAIL="temporary_fail",t.UNSUBSCRIBED="unsubscribe"}(e.WebhooksIds||(e.WebhooksIds={})),function(t){t.YES="yes",t.NO="no"}(e.YesNo||(e.YesNo={}))},9278:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7684:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(9278),e)},7992:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5969:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4425:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},424:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3078:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7992),e),o(r(5969),e),o(r(4425),e),o(r(424),e)},4404:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1628:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(4404),e)},1593:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9783:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1593),e)},4737:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},473:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(4737),e)},8373:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},6907:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8236:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},142:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1824:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4223:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7475:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(8236),e),o(r(8373),e),o(r(6907),e),o(r(4223),e),o(r(142),e),o(r(1824),e)},4130:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5883:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(4130),e)},4903:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2078:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1147:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(4903),e),o(r(2078),e)},777:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7497:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(777),e)},1557:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7951:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1557),e)},148:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4804:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8864:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(148),e),o(r(4804),e)},4233:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4913:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(4233),e)},1381:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5428:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7257:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8920:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2556:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8297:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1381),e),o(r(5428),e),o(r(8920),e),o(r(2556),e),o(r(7257),e)},1728:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},6708:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1163:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1728),e),o(r(6708),e)},5681:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8987:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(5681),e)},8608:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7684),e),o(r(3078),e),o(r(5883),e),o(r(1147),e),o(r(8864),e),o(r(8297),e),o(r(1163),e),o(r(1628),e),o(r(8987),e),o(r(7497),e),o(r(7951),e),o(r(473),e),o(r(9783),e),o(r(4913),e),o(r(7475),e)},5364:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3545:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9825:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},6858:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1230:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4267:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3545),e),o(r(5364),e),o(r(9825),e),o(r(6858),e),o(r(1230),e)},8625:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3286:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1240:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},6930:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7110:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3919:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(8625),e),o(r(7110),e),o(r(3286),e),o(r(1240),e),o(r(6930),e)},7850:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2691:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7850),e)},8610:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9402:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(8610),e)},2014:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7364:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(2014),e)},4470:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8066:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(4470),e)},1766:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2284:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7296:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1766),e),o(r(2284),e)},8980:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7290:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(8980),e)},2992:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},6608:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(2992),e)},906:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5085:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(906),e)},1930:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8832:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1930),e)},7676:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8715:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4704:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8855:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1635:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8458:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7676),e),o(r(8715),e),o(r(4704),e),o(r(8855),e),o(r(1635),e)},4115:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4887:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9974:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(4115),e),o(r(4887),e)},584:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8444:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(584),e)},9025:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(4267),e),o(r(3919),e),o(r(2691),e),o(r(9402),e),o(r(7364),e),o(r(8066),e),o(r(7296),e),o(r(7290),e),o(r(6608),e),o(r(5085),e),o(r(8832),e),o(r(8458),e),o(r(9974),e),o(r(8444),e)},9711:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return o(e,t),e},s=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.Interfaces=e.Enums=void 0;var u=a(r(5488));e.Enums=i(r(9146)),s(r(9025),e),e.Interfaces=i(r(8608));var c=function(){function t(t){this.formData=t}return Object.defineProperty(t,"default",{get:function(){return this},enumerable:!1,configurable:!0}),t.prototype.client=function(t){return new u.default(t,this.formData)},t}();e.default=c},5914:function(t,e,r){var n;t=r.nmd(t),function(){var o=e,i=(t&&t.exports,"object"==typeof r.g&&r.g);i.global!==i&&i.window;var s=function(t){this.message=t};(s.prototype=new Error).name="InvalidCharacterError";var a=function(t){throw new s(t)},u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c=/[\t\n\f\r ]/g,l={encode:function(t){t=String(t),/[^\0-\xFF]/.test(t)&&a("The string to be encoded contains characters outside of the Latin1 range.");for(var e,r,n,o,i=t.length%3,s="",c=-1,l=t.length-i;++c<l;)e=t.charCodeAt(c)<<16,r=t.charCodeAt(++c)<<8,n=t.charCodeAt(++c),s+=u.charAt((o=e+r+n)>>18&63)+u.charAt(o>>12&63)+u.charAt(o>>6&63)+u.charAt(63&o);return 2==i?(e=t.charCodeAt(c)<<8,r=t.charCodeAt(++c),s+=u.charAt((o=e+r)>>10)+u.charAt(o>>4&63)+u.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(c),s+=u.charAt(o>>2)+u.charAt(o<<4&63)+"=="),s},decode:function(t){var e=(t=String(t).replace(c,"")).length;e%4==0&&(e=(t=t.replace(/==?$/,"")).length),(e%4==1||/[^+a-zA-Z0-9/]/.test(t))&&a("Invalid character: the string to be decoded is not correctly encoded.");for(var r,n,o=0,i="",s=-1;++s<e;)n=u.indexOf(t.charAt(s)),r=o%4?64*r+n:n,o++%4&&(i+=String.fromCharCode(255&r>>(-2*o&6)));return i},version:"1.0.0"};void 0===(n=function(){return l}.call(e,r,e,t))||(t.exports=n)}()},5469:function(t,e,r){var n,o,i;i=function(){return function(){return function(t){var e=[];if(0===t.length)return"";if("string"!=typeof t[0])throw new TypeError("Url must be a string. Received "+t[0]);if(t[0].match(/^[^/:]+:\/*$/)&&t.length>1){var r=t.shift();t[0]=r+t[0]}t[0].match(/^file:\/\/\//)?t[0]=t[0].replace(/^([^/:]+):\/*/,"$1:///"):t[0]=t[0].replace(/^([^/:]+):\/*/,"$1://");for(var n=0;n<t.length;n++){var o=t[n];if("string"!=typeof o)throw new TypeError("Url must be a string. Received "+o);""!==o&&(n>0&&(o=o.replace(/^[\/]+/,"")),o=n<t.length-1?o.replace(/[\/]+$/,""):o.replace(/[\/]+$/,"/"),e.push(o))}var i=e.join("/"),s=(i=i.replace(/\/(\?|&|#[^!])/g,"$1")).split("?");return s.shift()+(s.length>0?"?":"")+s.join("&")}("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},t.exports?t.exports=i():void 0===(o="function"==typeof(n=i)?n.call(e,r,e,t):n)||(t.exports=o)},6425:(t,e,r)=>{"use strict";function n(t,e){return function(){return t.apply(e,arguments)}}const{toString:o}=Object.prototype,{getPrototypeOf:i}=Object,s=(a=Object.create(null),t=>{const e=o.call(t);return a[e]||(a[e]=e.slice(8,-1).toLowerCase())});var a;const u=t=>(t=t.toLowerCase(),e=>s(e)===t),c=t=>e=>typeof e===t,{isArray:l}=Array,f=c("undefined");const p=u("ArrayBuffer");const d=c("string"),h=c("function"),y=c("number"),b=t=>null!==t&&"object"==typeof t,v=t=>{if("object"!==s(t))return!1;const e=i(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e)||Symbol.toStringTag in t||Symbol.iterator in t)},_=u("Date"),g=u("File"),m=u("Blob"),w=u("FileList"),O=u("URLSearchParams"),[j,P,x,S]=["ReadableStream","Request","Response","Headers"].map(u);function D(t,e,{allOwnKeys:r=!1}={}){if(null==t)return;let n,o;if("object"!=typeof t&&(t=[t]),l(t))for(n=0,o=t.length;n<o;n++)e.call(null,t[n],n,t);else{const o=r?Object.getOwnPropertyNames(t):Object.keys(t),i=o.length;let s;for(n=0;n<i;n++)s=o[n],e.call(null,t[s],s,t)}}function M(t,e){e=e.toLowerCase();const r=Object.keys(t);let n,o=r.length;for(;o-- >0;)if(n=r[o],e===n.toLowerCase())return n;return null}const T="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:r.g,R=t=>!f(t)&&t!==T;const E=(k="undefined"!=typeof Uint8Array&&i(Uint8Array),t=>k&&t instanceof k);var k;const q=u("HTMLFormElement"),A=(({hasOwnProperty:t})=>(e,r)=>t.call(e,r))(Object.prototype),C=u("RegExp"),B=(t,e)=>{const r=Object.getOwnPropertyDescriptors(t),n={};D(r,((r,o)=>{let i;!1!==(i=e(r,o,t))&&(n[o]=i||r)})),Object.defineProperties(t,n)},F="abcdefghijklmnopqrstuvwxyz",L="0123456789",U={DIGIT:L,ALPHA:F,ALPHA_DIGIT:F+F.toUpperCase()+L};const N=u("AsyncFunction"),I=(W="function"==typeof setImmediate,H=h(T.postMessage),W?setImmediate:H?(V=`axios@${Math.random()}`,z=[],T.addEventListener("message",(({source:t,data:e})=>{t===T&&e===V&&z.length&&z.shift()()}),!1),t=>{z.push(t),T.postMessage(V,"*")}):t=>setTimeout(t));var W,H,V,z;const G="undefined"!=typeof queueMicrotask?queueMicrotask.bind(T):"undefined"!=typeof process&&process.nextTick||I;var J={isArray:l,isArrayBuffer:p,isBuffer:function(t){return null!==t&&!f(t)&&null!==t.constructor&&!f(t.constructor)&&h(t.constructor.isBuffer)&&t.constructor.isBuffer(t)},isFormData:t=>{let e;return t&&("function"==typeof FormData&&t instanceof FormData||h(t.append)&&("formdata"===(e=s(t))||"object"===e&&h(t.toString)&&"[object FormData]"===t.toString()))},isArrayBufferView:function(t){let e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&p(t.buffer),e},isString:d,isNumber:y,isBoolean:t=>!0===t||!1===t,isObject:b,isPlainObject:v,isReadableStream:j,isRequest:P,isResponse:x,isHeaders:S,isUndefined:f,isDate:_,isFile:g,isBlob:m,isRegExp:C,isFunction:h,isStream:t=>b(t)&&h(t.pipe),isURLSearchParams:O,isTypedArray:E,isFileList:w,forEach:D,merge:function t(){const{caseless:e}=R(this)&&this||{},r={},n=(n,o)=>{const i=e&&M(r,o)||o;v(r[i])&&v(n)?r[i]=t(r[i],n):v(n)?r[i]=t({},n):l(n)?r[i]=n.slice():r[i]=n};for(let t=0,e=arguments.length;t<e;t++)arguments[t]&&D(arguments[t],n);return r},extend:(t,e,r,{allOwnKeys:o}={})=>(D(e,((e,o)=>{r&&h(e)?t[o]=n(e,r):t[o]=e}),{allOwnKeys:o}),t),trim:t=>t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:t=>(65279===t.charCodeAt(0)&&(t=t.slice(1)),t),inherits:(t,e,r,n)=>{t.prototype=Object.create(e.prototype,n),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),r&&Object.assign(t.prototype,r)},toFlatObject:(t,e,r,n)=>{let o,s,a;const u={};if(e=e||{},null==t)return e;do{for(o=Object.getOwnPropertyNames(t),s=o.length;s-- >0;)a=o[s],n&&!n(a,t,e)||u[a]||(e[a]=t[a],u[a]=!0);t=!1!==r&&i(t)}while(t&&(!r||r(t,e))&&t!==Object.prototype);return e},kindOf:s,kindOfTest:u,endsWith:(t,e,r)=>{t=String(t),(void 0===r||r>t.length)&&(r=t.length),r-=e.length;const n=t.indexOf(e,r);return-1!==n&&n===r},toArray:t=>{if(!t)return null;if(l(t))return t;let e=t.length;if(!y(e))return null;const r=new Array(e);for(;e-- >0;)r[e]=t[e];return r},forEachEntry:(t,e)=>{const r=(t&&t[Symbol.iterator]).call(t);let n;for(;(n=r.next())&&!n.done;){const r=n.value;e.call(t,r[0],r[1])}},matchAll:(t,e)=>{let r;const n=[];for(;null!==(r=t.exec(e));)n.push(r);return n},isHTMLForm:q,hasOwnProperty:A,hasOwnProp:A,reduceDescriptors:B,freezeMethods:t=>{B(t,((e,r)=>{if(h(t)&&-1!==["arguments","caller","callee"].indexOf(r))return!1;const n=t[r];h(n)&&(e.enumerable=!1,"writable"in e?e.writable=!1:e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")}))}))},toObjectSet:(t,e)=>{const r={},n=t=>{t.forEach((t=>{r[t]=!0}))};return l(t)?n(t):n(String(t).split(e)),r},toCamelCase:t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(t,e,r){return e.toUpperCase()+r})),noop:()=>{},toFiniteNumber:(t,e)=>null!=t&&Number.isFinite(t=+t)?t:e,findKey:M,global:T,isContextDefined:R,ALPHABET:U,generateString:(t=16,e=U.ALPHA_DIGIT)=>{let r="";const{length:n}=e;for(;t--;)r+=e[Math.random()*n|0];return r},isSpecCompliantForm:function(t){return!!(t&&h(t.append)&&"FormData"===t[Symbol.toStringTag]&&t[Symbol.iterator])},toJSONObject:t=>{const e=new Array(10),r=(t,n)=>{if(b(t)){if(e.indexOf(t)>=0)return;if(!("toJSON"in t)){e[n]=t;const o=l(t)?[]:{};return D(t,((t,e)=>{const i=r(t,n+1);!f(i)&&(o[e]=i)})),e[n]=void 0,o}}return t};return r(t,0)},isAsyncFn:N,isThenable:t=>t&&(b(t)||h(t))&&h(t.then)&&h(t.catch),setImmediate:I,asap:G};function K(t,e,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=t,this.name="AxiosError",e&&(this.code=e),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o)}J.inherits(K,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:J.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const $=K.prototype,Q={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((t=>{Q[t]={value:t}})),Object.defineProperties(K,Q),Object.defineProperty($,"isAxiosError",{value:!0}),K.from=(t,e,r,n,o,i)=>{const s=Object.create($);return J.toFlatObject(t,s,(function(t){return t!==Error.prototype}),(t=>"isAxiosError"!==t)),K.call(s,t.message,e,r,n,o),s.cause=t,s.name=t.name,i&&Object.assign(s,i),s};function X(t){return J.isPlainObject(t)||J.isArray(t)}function Y(t){return J.endsWith(t,"[]")?t.slice(0,-2):t}function Z(t,e,r){return t?t.concat(e).map((function(t,e){return t=Y(t),!r&&e?"["+t+"]":t})).join(r?".":""):e}const tt=J.toFlatObject(J,{},null,(function(t){return/^is[A-Z]/.test(t)}));function et(t,e,r){if(!J.isObject(t))throw new TypeError("target must be an object");e=e||new FormData;const n=(r=J.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(t,e){return!J.isUndefined(e[t])}))).metaTokens,o=r.visitor||c,i=r.dots,s=r.indexes,a=(r.Blob||"undefined"!=typeof Blob&&Blob)&&J.isSpecCompliantForm(e);if(!J.isFunction(o))throw new TypeError("visitor must be a function");function u(t){if(null===t)return"";if(J.isDate(t))return t.toISOString();if(!a&&J.isBlob(t))throw new K("Blob is not supported. Use a Buffer instead.");return J.isArrayBuffer(t)||J.isTypedArray(t)?a&&"function"==typeof Blob?new Blob([t]):Buffer.from(t):t}function c(t,r,o){let a=t;if(t&&!o&&"object"==typeof t)if(J.endsWith(r,"{}"))r=n?r:r.slice(0,-2),t=JSON.stringify(t);else if(J.isArray(t)&&function(t){return J.isArray(t)&&!t.some(X)}(t)||(J.isFileList(t)||J.endsWith(r,"[]"))&&(a=J.toArray(t)))return r=Y(r),a.forEach((function(t,n){!J.isUndefined(t)&&null!==t&&e.append(!0===s?Z([r],n,i):null===s?r:r+"[]",u(t))})),!1;return!!X(t)||(e.append(Z(o,r,i),u(t)),!1)}const l=[],f=Object.assign(tt,{defaultVisitor:c,convertValue:u,isVisitable:X});if(!J.isObject(t))throw new TypeError("data must be an object");return function t(r,n){if(!J.isUndefined(r)){if(-1!==l.indexOf(r))throw Error("Circular reference detected in "+n.join("."));l.push(r),J.forEach(r,(function(r,i){!0===(!(J.isUndefined(r)||null===r)&&o.call(e,r,J.isString(i)?i.trim():i,n,f))&&t(r,n?n.concat(i):[i])})),l.pop()}}(t),e}function rt(t){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,(function(t){return e[t]}))}function nt(t,e){this._pairs=[],t&&et(t,this,e)}const ot=nt.prototype;function it(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function st(t,e,r){if(!e)return t;const n=r&&r.encode||it,o=r&&r.serialize;let i;if(i=o?o(e,r):J.isURLSearchParams(e)?e.toString():new nt(e,r).toString(n),i){const e=t.indexOf("#");-1!==e&&(t=t.slice(0,e)),t+=(-1===t.indexOf("?")?"?":"&")+i}return t}ot.append=function(t,e){this._pairs.push([t,e])},ot.toString=function(t){const e=t?function(e){return t.call(this,e,rt)}:rt;return this._pairs.map((function(t){return e(t[0])+"="+e(t[1])}),"").join("&")};var at=class InterceptorManager{constructor(){this.handlers=[]}use(t,e,r){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){J.forEach(this.handlers,(function(e){null!==e&&t(e)}))}},ut={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},ct={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:nt,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const lt="undefined"!=typeof window&&"undefined"!=typeof document,ft=(pt="undefined"!=typeof navigator&&navigator.product,lt&&["ReactNative","NativeScript","NS"].indexOf(pt)<0);var pt;const dt="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,ht=lt&&window.location.href||"http://localhost";var yt={...Object.freeze({__proto__:null,hasBrowserEnv:lt,hasStandardBrowserWebWorkerEnv:dt,hasStandardBrowserEnv:ft,origin:ht}),...ct};function bt(t){function e(t,r,n,o){let i=t[o++];if("__proto__"===i)return!0;const s=Number.isFinite(+i),a=o>=t.length;if(i=!i&&J.isArray(n)?n.length:i,a)return J.hasOwnProp(n,i)?n[i]=[n[i],r]:n[i]=r,!s;n[i]&&J.isObject(n[i])||(n[i]=[]);return e(t,r,n[i],o)&&J.isArray(n[i])&&(n[i]=function(t){const e={},r=Object.keys(t);let n;const o=r.length;let i;for(n=0;n<o;n++)i=r[n],e[i]=t[i];return e}(n[i])),!s}if(J.isFormData(t)&&J.isFunction(t.entries)){const r={};return J.forEachEntry(t,((t,n)=>{e(function(t){return J.matchAll(/\w+|\[(\w*)]/g,t).map((t=>"[]"===t[0]?"":t[1]||t[0]))}(t),n,r,0)})),r}return null}const vt={transitional:ut,adapter:["xhr","http","fetch"],transformRequest:[function(t,e){const r=e.getContentType()||"",n=r.indexOf("application/json")>-1,o=J.isObject(t);o&&J.isHTMLForm(t)&&(t=new FormData(t));if(J.isFormData(t))return n?JSON.stringify(bt(t)):t;if(J.isArrayBuffer(t)||J.isBuffer(t)||J.isStream(t)||J.isFile(t)||J.isBlob(t)||J.isReadableStream(t))return t;if(J.isArrayBufferView(t))return t.buffer;if(J.isURLSearchParams(t))return e.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let i;if(o){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(t,e){return et(t,new yt.classes.URLSearchParams,Object.assign({visitor:function(t,e,r,n){return yt.isNode&&J.isBuffer(t)?(this.append(e,t.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)}},e))}(t,this.formSerializer).toString();if((i=J.isFileList(t))||r.indexOf("multipart/form-data")>-1){const e=this.env&&this.env.FormData;return et(i?{"files[]":t}:t,e&&new e,this.formSerializer)}}return o||n?(e.setContentType("application/json",!1),function(t,e,r){if(J.isString(t))try{return(e||JSON.parse)(t),J.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(r||JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){const e=this.transitional||vt.transitional,r=e&&e.forcedJSONParsing,n="json"===this.responseType;if(J.isResponse(t)||J.isReadableStream(t))return t;if(t&&J.isString(t)&&(r&&!this.responseType||n)){const r=!(e&&e.silentJSONParsing)&&n;try{return JSON.parse(t)}catch(t){if(r){if("SyntaxError"===t.name)throw K.from(t,K.ERR_BAD_RESPONSE,this,null,this.response);throw t}}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:yt.classes.FormData,Blob:yt.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};J.forEach(["delete","get","head","post","put","patch"],(t=>{vt.headers[t]={}}));var _t=vt;const gt=J.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const mt=Symbol("internals");function wt(t){return t&&String(t).trim().toLowerCase()}function Ot(t){return!1===t||null==t?t:J.isArray(t)?t.map(Ot):String(t)}function jt(t,e,r,n,o){return J.isFunction(n)?n.call(this,e,r):(o&&(e=r),J.isString(e)?J.isString(n)?-1!==e.indexOf(n):J.isRegExp(n)?n.test(e):void 0:void 0)}class AxiosHeaders{constructor(t){t&&this.set(t)}set(t,e,r){const n=this;function o(t,e,r){const o=wt(e);if(!o)throw new Error("header name must be a non-empty string");const i=J.findKey(n,o);(!i||void 0===n[i]||!0===r||void 0===r&&!1!==n[i])&&(n[i||e]=Ot(t))}const i=(t,e)=>J.forEach(t,((t,r)=>o(t,r,e)));if(J.isPlainObject(t)||t instanceof this.constructor)i(t,e);else if(J.isString(t)&&(t=t.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim()))i((t=>{const e={};let r,n,o;return t&&t.split("\n").forEach((function(t){o=t.indexOf(":"),r=t.substring(0,o).trim().toLowerCase(),n=t.substring(o+1).trim(),!r||e[r]&&gt[r]||("set-cookie"===r?e[r]?e[r].push(n):e[r]=[n]:e[r]=e[r]?e[r]+", "+n:n)})),e})(t),e);else if(J.isHeaders(t))for(const[e,n]of t.entries())o(n,e,r);else null!=t&&o(e,t,r);return this}get(t,e){if(t=wt(t)){const r=J.findKey(this,t);if(r){const t=this[r];if(!e)return t;if(!0===e)return function(t){const e=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(t);)e[n[1]]=n[2];return e}(t);if(J.isFunction(e))return e.call(this,t,r);if(J.isRegExp(e))return e.exec(t);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,e){if(t=wt(t)){const r=J.findKey(this,t);return!(!r||void 0===this[r]||e&&!jt(0,this[r],r,e))}return!1}delete(t,e){const r=this;let n=!1;function o(t){if(t=wt(t)){const o=J.findKey(r,t);!o||e&&!jt(0,r[o],o,e)||(delete r[o],n=!0)}}return J.isArray(t)?t.forEach(o):o(t),n}clear(t){const e=Object.keys(this);let r=e.length,n=!1;for(;r--;){const o=e[r];t&&!jt(0,this[o],o,t,!0)||(delete this[o],n=!0)}return n}normalize(t){const e=this,r={};return J.forEach(this,((n,o)=>{const i=J.findKey(r,o);if(i)return e[i]=Ot(n),void delete e[o];const s=t?function(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((t,e,r)=>e.toUpperCase()+r))}(o):String(o).trim();s!==o&&delete e[o],e[s]=Ot(n),r[s]=!0})),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const e=Object.create(null);return J.forEach(this,((r,n)=>{null!=r&&!1!==r&&(e[n]=t&&J.isArray(r)?r.join(", "):r)})),e}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([t,e])=>t+": "+e)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...e){const r=new this(t);return e.forEach((t=>r.set(t))),r}static accessor(t){const e=(this[mt]=this[mt]={accessors:{}}).accessors,r=this.prototype;function n(t){const n=wt(t);e[n]||(!function(t,e){const r=J.toCamelCase(" "+e);["get","set","has"].forEach((n=>{Object.defineProperty(t,n+r,{value:function(t,r,o){return this[n].call(this,e,t,r,o)},configurable:!0})}))}(r,t),e[n]=!0)}return J.isArray(t)?t.forEach(n):n(t),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),J.reduceDescriptors(AxiosHeaders.prototype,(({value:t},e)=>{let r=e[0].toUpperCase()+e.slice(1);return{get:()=>t,set(t){this[r]=t}}})),J.freezeMethods(AxiosHeaders);var Pt=AxiosHeaders;function xt(t,e){const r=this||_t,n=e||r,o=Pt.from(n.headers);let i=n.data;return J.forEach(t,(function(t){i=t.call(r,i,o.normalize(),e?e.status:void 0)})),o.normalize(),i}function St(t){return!(!t||!t.__CANCEL__)}function Dt(t,e,r){K.call(this,null==t?"canceled":t,K.ERR_CANCELED,e,r),this.name="CanceledError"}function Mt(t,e,r){const n=r.config.validateStatus;r.status&&n&&!n(r.status)?e(new K("Request failed with status code "+r.status,[K.ERR_BAD_REQUEST,K.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):t(r)}J.inherits(Dt,K,{__CANCEL__:!0});const Tt=(t,e,r=3)=>{let n=0;const o=function(t,e){t=t||10;const r=new Array(t),n=new Array(t);let o,i=0,s=0;return e=void 0!==e?e:1e3,function(a){const u=Date.now(),c=n[s];o||(o=u),r[i]=a,n[i]=u;let l=s,f=0;for(;l!==i;)f+=r[l++],l%=t;if(i=(i+1)%t,i===s&&(s=(s+1)%t),u-o<e)return;const p=c&&u-c;return p?Math.round(1e3*f/p):void 0}}(50,250);return function(t,e){let r,n,o=0,i=1e3/e;const s=(e,i=Date.now())=>{o=i,r=null,n&&(clearTimeout(n),n=null),t.apply(null,e)};return[(...t)=>{const e=Date.now(),a=e-o;a>=i?s(t,e):(r=t,n||(n=setTimeout((()=>{n=null,s(r)}),i-a)))},()=>r&&s(r)]}((r=>{const i=r.loaded,s=r.lengthComputable?r.total:void 0,a=i-n,u=o(a);n=i;t({loaded:i,total:s,progress:s?i/s:void 0,bytes:a,rate:u||void 0,estimated:u&&s&&i<=s?(s-i)/u:void 0,event:r,lengthComputable:null!=s,[e?"download":"upload"]:!0})}),r)},Rt=(t,e)=>{const r=null!=t;return[n=>e[0]({lengthComputable:r,total:t,loaded:n}),e[1]]},Et=t=>(...e)=>J.asap((()=>t(...e)));var kt=yt.hasStandardBrowserEnv?function(){const t=/(msie|trident)/i.test(navigator.userAgent),e=document.createElement("a");let r;function n(r){let n=r;return t&&(e.setAttribute("href",n),n=e.href),e.setAttribute("href",n),{href:e.href,protocol:e.protocol?e.protocol.replace(/:$/,""):"",host:e.host,search:e.search?e.search.replace(/^\?/,""):"",hash:e.hash?e.hash.replace(/^#/,""):"",hostname:e.hostname,port:e.port,pathname:"/"===e.pathname.charAt(0)?e.pathname:"/"+e.pathname}}return r=n(window.location.href),function(t){const e=J.isString(t)?n(t):t;return e.protocol===r.protocol&&e.host===r.host}}():function(){return!0},qt=yt.hasStandardBrowserEnv?{write(t,e,r,n,o,i){const s=[t+"="+encodeURIComponent(e)];J.isNumber(r)&&s.push("expires="+new Date(r).toGMTString()),J.isString(n)&&s.push("path="+n),J.isString(o)&&s.push("domain="+o),!0===i&&s.push("secure"),document.cookie=s.join("; ")},read(t){const e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(t){this.write(t,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function At(t,e){return t&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)?function(t,e){return e?t.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):t}(t,e):e}const Ct=t=>t instanceof Pt?{...t}:t;function Bt(t,e){e=e||{};const r={};function n(t,e,r){return J.isPlainObject(t)&&J.isPlainObject(e)?J.merge.call({caseless:r},t,e):J.isPlainObject(e)?J.merge({},e):J.isArray(e)?e.slice():e}function o(t,e,r){return J.isUndefined(e)?J.isUndefined(t)?void 0:n(void 0,t,r):n(t,e,r)}function i(t,e){if(!J.isUndefined(e))return n(void 0,e)}function s(t,e){return J.isUndefined(e)?J.isUndefined(t)?void 0:n(void 0,t):n(void 0,e)}function a(r,o,i){return i in e?n(r,o):i in t?n(void 0,r):void 0}const u={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:a,headers:(t,e)=>o(Ct(t),Ct(e),!0)};return J.forEach(Object.keys(Object.assign({},t,e)),(function(n){const i=u[n]||o,s=i(t[n],e[n],n);J.isUndefined(s)&&i!==a||(r[n]=s)})),r}var Ft=t=>{const e=Bt({},t);let r,{data:n,withXSRFToken:o,xsrfHeaderName:i,xsrfCookieName:s,headers:a,auth:u}=e;if(e.headers=a=Pt.from(a),e.url=st(At(e.baseURL,e.url),t.params,t.paramsSerializer),u&&a.set("Authorization","Basic "+btoa((u.username||"")+":"+(u.password?unescape(encodeURIComponent(u.password)):""))),J.isFormData(n))if(yt.hasStandardBrowserEnv||yt.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if(!1!==(r=a.getContentType())){const[t,...e]=r?r.split(";").map((t=>t.trim())).filter(Boolean):[];a.setContentType([t||"multipart/form-data",...e].join("; "))}if(yt.hasStandardBrowserEnv&&(o&&J.isFunction(o)&&(o=o(e)),o||!1!==o&&kt(e.url))){const t=i&&s&&qt.read(s);t&&a.set(i,t)}return e};var Lt="undefined"!=typeof XMLHttpRequest&&function(t){return new Promise((function(e,r){const n=Ft(t);let o=n.data;const i=Pt.from(n.headers).normalize();let s,a,u,c,l,{responseType:f,onUploadProgress:p,onDownloadProgress:d}=n;function h(){c&&c(),l&&l(),n.cancelToken&&n.cancelToken.unsubscribe(s),n.signal&&n.signal.removeEventListener("abort",s)}let y=new XMLHttpRequest;function b(){if(!y)return;const n=Pt.from("getAllResponseHeaders"in y&&y.getAllResponseHeaders());Mt((function(t){e(t),h()}),(function(t){r(t),h()}),{data:f&&"text"!==f&&"json"!==f?y.response:y.responseText,status:y.status,statusText:y.statusText,headers:n,config:t,request:y}),y=null}y.open(n.method.toUpperCase(),n.url,!0),y.timeout=n.timeout,"onloadend"in y?y.onloadend=b:y.onreadystatechange=function(){y&&4===y.readyState&&(0!==y.status||y.responseURL&&0===y.responseURL.indexOf("file:"))&&setTimeout(b)},y.onabort=function(){y&&(r(new K("Request aborted",K.ECONNABORTED,t,y)),y=null)},y.onerror=function(){r(new K("Network Error",K.ERR_NETWORK,t,y)),y=null},y.ontimeout=function(){let e=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded";const o=n.transitional||ut;n.timeoutErrorMessage&&(e=n.timeoutErrorMessage),r(new K(e,o.clarifyTimeoutError?K.ETIMEDOUT:K.ECONNABORTED,t,y)),y=null},void 0===o&&i.setContentType(null),"setRequestHeader"in y&&J.forEach(i.toJSON(),(function(t,e){y.setRequestHeader(e,t)})),J.isUndefined(n.withCredentials)||(y.withCredentials=!!n.withCredentials),f&&"json"!==f&&(y.responseType=n.responseType),d&&([u,l]=Tt(d,!0),y.addEventListener("progress",u)),p&&y.upload&&([a,c]=Tt(p),y.upload.addEventListener("progress",a),y.upload.addEventListener("loadend",c)),(n.cancelToken||n.signal)&&(s=e=>{y&&(r(!e||e.type?new Dt(null,t,y):e),y.abort(),y=null)},n.cancelToken&&n.cancelToken.subscribe(s),n.signal&&(n.signal.aborted?s():n.signal.addEventListener("abort",s)));const v=function(t){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}(n.url);v&&-1===yt.protocols.indexOf(v)?r(new K("Unsupported protocol "+v+":",K.ERR_BAD_REQUEST,t)):y.send(o||null)}))};var Ut=(t,e)=>{let r,n=new AbortController;const o=function(t){if(!r){r=!0,s();const e=t instanceof Error?t:this.reason;n.abort(e instanceof K?e:new Dt(e instanceof Error?e.message:e))}};let i=e&&setTimeout((()=>{o(new K(`timeout ${e} of ms exceeded`,K.ETIMEDOUT))}),e);const s=()=>{t&&(i&&clearTimeout(i),i=null,t.forEach((t=>{t&&(t.removeEventListener?t.removeEventListener("abort",o):t.unsubscribe(o))})),t=null)};t.forEach((t=>t&&t.addEventListener&&t.addEventListener("abort",o)));const{signal:a}=n;return a.unsubscribe=s,[a,()=>{i&&clearTimeout(i),i=null}]};const Nt=function*(t,e){let r=t.byteLength;if(!e||r<e)return void(yield t);let n,o=0;for(;o<r;)n=o+e,yield t.slice(o,n),o=n},It=(t,e,r,n,o)=>{const i=async function*(t,e,r){for await(const n of t)yield*Nt(ArrayBuffer.isView(n)?n:await r(String(n)),e)}(t,e,o);let s,a=0,u=t=>{s||(s=!0,n&&n(t))};return new ReadableStream({async pull(t){try{const{done:e,value:n}=await i.next();if(e)return u(),void t.close();let o=n.byteLength;if(r){let t=a+=o;r(t)}t.enqueue(new Uint8Array(n))}catch(t){throw u(t),t}},cancel:t=>(u(t),i.return())},{highWaterMark:2})},Wt="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,Ht=Wt&&"function"==typeof ReadableStream,Vt=Wt&&("function"==typeof TextEncoder?(zt=new TextEncoder,t=>zt.encode(t)):async t=>new Uint8Array(await new Response(t).arrayBuffer()));var zt;const Gt=(t,...e)=>{try{return!!t(...e)}catch(t){return!1}},Jt=Ht&&Gt((()=>{let t=!1;const e=new Request(yt.origin,{body:new ReadableStream,method:"POST",get duplex(){return t=!0,"half"}}).headers.has("Content-Type");return t&&!e})),Kt=Ht&&Gt((()=>J.isReadableStream(new Response("").body))),$t={stream:Kt&&(t=>t.body)};var Qt;Wt&&(Qt=new Response,["text","arrayBuffer","blob","formData","stream"].forEach((t=>{!$t[t]&&($t[t]=J.isFunction(Qt[t])?e=>e[t]():(e,r)=>{throw new K(`Response type '${t}' is not supported`,K.ERR_NOT_SUPPORT,r)})})));const Xt=async(t,e)=>{const r=J.toFiniteNumber(t.getContentLength());return null==r?(async t=>null==t?0:J.isBlob(t)?t.size:J.isSpecCompliantForm(t)?(await new Request(t).arrayBuffer()).byteLength:J.isArrayBufferView(t)||J.isArrayBuffer(t)?t.byteLength:(J.isURLSearchParams(t)&&(t+=""),J.isString(t)?(await Vt(t)).byteLength:void 0))(e):r};const Yt={http:null,xhr:Lt,fetch:Wt&&(async t=>{let{url:e,method:r,data:n,signal:o,cancelToken:i,timeout:s,onDownloadProgress:a,onUploadProgress:u,responseType:c,headers:l,withCredentials:f="same-origin",fetchOptions:p}=Ft(t);c=c?(c+"").toLowerCase():"text";let d,h,[y,b]=o||i||s?Ut([o,i],s):[];const v=()=>{!d&&setTimeout((()=>{y&&y.unsubscribe()})),d=!0};let _;try{if(u&&Jt&&"get"!==r&&"head"!==r&&0!==(_=await Xt(l,n))){let t,r=new Request(e,{method:"POST",body:n,duplex:"half"});if(J.isFormData(n)&&(t=r.headers.get("content-type"))&&l.setContentType(t),r.body){const[t,e]=Rt(_,Tt(Et(u)));n=It(r.body,65536,t,e,Vt)}}J.isString(f)||(f=f?"include":"omit"),h=new Request(e,{...p,signal:y,method:r.toUpperCase(),headers:l.normalize().toJSON(),body:n,duplex:"half",credentials:f});let o=await fetch(h);const i=Kt&&("stream"===c||"response"===c);if(Kt&&(a||i)){const t={};["status","statusText","headers"].forEach((e=>{t[e]=o[e]}));const e=J.toFiniteNumber(o.headers.get("content-length")),[r,n]=a&&Rt(e,Tt(Et(a),!0))||[];o=new Response(It(o.body,65536,r,(()=>{n&&n(),i&&v()}),Vt),t)}c=c||"text";let s=await $t[J.findKey($t,c)||"text"](o,t);return!i&&v(),b&&b(),await new Promise(((e,r)=>{Mt(e,r,{data:s,headers:Pt.from(o.headers),status:o.status,statusText:o.statusText,config:t,request:h})}))}catch(e){if(v(),e&&"TypeError"===e.name&&/fetch/i.test(e.message))throw Object.assign(new K("Network Error",K.ERR_NETWORK,t,h),{cause:e.cause||e});throw K.from(e,e&&e.code,t,h)}})};J.forEach(Yt,((t,e)=>{if(t){try{Object.defineProperty(t,"name",{value:e})}catch(t){}Object.defineProperty(t,"adapterName",{value:e})}}));const Zt=t=>`- ${t}`,te=t=>J.isFunction(t)||null===t||!1===t;var ee=t=>{t=J.isArray(t)?t:[t];const{length:e}=t;let r,n;const o={};for(let i=0;i<e;i++){let e;if(r=t[i],n=r,!te(r)&&(n=Yt[(e=String(r)).toLowerCase()],void 0===n))throw new K(`Unknown adapter '${e}'`);if(n)break;o[e||"#"+i]=n}if(!n){const t=Object.entries(o).map((([t,e])=>`adapter ${t} `+(!1===e?"is not supported by the environment":"is not available in the build")));throw new K("There is no suitable adapter to dispatch the request "+(e?t.length>1?"since :\n"+t.map(Zt).join("\n"):" "+Zt(t[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return n};function re(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new Dt(null,t)}function ne(t){re(t),t.headers=Pt.from(t.headers),t.data=xt.call(t,t.transformRequest),-1!==["post","put","patch"].indexOf(t.method)&&t.headers.setContentType("application/x-www-form-urlencoded",!1);return ee(t.adapter||_t.adapter)(t).then((function(e){return re(t),e.data=xt.call(t,t.transformResponse,e),e.headers=Pt.from(e.headers),e}),(function(e){return St(e)||(re(t),e&&e.response&&(e.response.data=xt.call(t,t.transformResponse,e.response),e.response.headers=Pt.from(e.response.headers))),Promise.reject(e)}))}const oe="1.7.4",ie={};["object","boolean","number","function","string","symbol"].forEach(((t,e)=>{ie[t]=function(r){return typeof r===t||"a"+(e<1?"n ":" ")+t}}));const se={};ie.transitional=function(t,e,r){function n(t,e){return"[Axios v1.7.4] Transitional option '"+t+"'"+e+(r?". "+r:"")}return(r,o,i)=>{if(!1===t)throw new K(n(o," has been removed"+(e?" in "+e:"")),K.ERR_DEPRECATED);return e&&!se[o]&&(se[o]=!0,console.warn(n(o," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(r,o,i)}};var ae={assertOptions:function(t,e,r){if("object"!=typeof t)throw new K("options must be an object",K.ERR_BAD_OPTION_VALUE);const n=Object.keys(t);let o=n.length;for(;o-- >0;){const i=n[o],s=e[i];if(s){const e=t[i],r=void 0===e||s(e,i,t);if(!0!==r)throw new K("option "+i+" must be "+r,K.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new K("Unknown option "+i,K.ERR_BAD_OPTION)}},validators:ie};const ue=ae.validators;class Axios{constructor(t){this.defaults=t,this.interceptors={request:new at,response:new at}}async request(t,e){try{return await this._request(t,e)}catch(t){if(t instanceof Error){let e;Error.captureStackTrace?Error.captureStackTrace(e={}):e=new Error;const r=e.stack?e.stack.replace(/^.+\n/,""):"";try{t.stack?r&&!String(t.stack).endsWith(r.replace(/^.+\n.+\n/,""))&&(t.stack+="\n"+r):t.stack=r}catch(t){}}throw t}}_request(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},e=Bt(this.defaults,e);const{transitional:r,paramsSerializer:n,headers:o}=e;void 0!==r&&ae.assertOptions(r,{silentJSONParsing:ue.transitional(ue.boolean),forcedJSONParsing:ue.transitional(ue.boolean),clarifyTimeoutError:ue.transitional(ue.boolean)},!1),null!=n&&(J.isFunction(n)?e.paramsSerializer={serialize:n}:ae.assertOptions(n,{encode:ue.function,serialize:ue.function},!0)),e.method=(e.method||this.defaults.method||"get").toLowerCase();let i=o&&J.merge(o.common,o[e.method]);o&&J.forEach(["delete","get","head","post","put","patch","common"],(t=>{delete o[t]})),e.headers=Pt.concat(i,o);const s=[];let a=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(a=a&&t.synchronous,s.unshift(t.fulfilled,t.rejected))}));const u=[];let c;this.interceptors.response.forEach((function(t){u.push(t.fulfilled,t.rejected)}));let l,f=0;if(!a){const t=[ne.bind(this),void 0];for(t.unshift.apply(t,s),t.push.apply(t,u),l=t.length,c=Promise.resolve(e);f<l;)c=c.then(t[f++],t[f++]);return c}l=s.length;let p=e;for(f=0;f<l;){const t=s[f++],e=s[f++];try{p=t(p)}catch(t){e.call(this,t);break}}try{c=ne.call(this,p)}catch(t){return Promise.reject(t)}for(f=0,l=u.length;f<l;)c=c.then(u[f++],u[f++]);return c}getUri(t){return st(At((t=Bt(this.defaults,t)).baseURL,t.url),t.params,t.paramsSerializer)}}J.forEach(["delete","get","head","options"],(function(t){Axios.prototype[t]=function(e,r){return this.request(Bt(r||{},{method:t,url:e,data:(r||{}).data}))}})),J.forEach(["post","put","patch"],(function(t){function e(e){return function(r,n,o){return this.request(Bt(o||{},{method:t,headers:e?{"Content-Type":"multipart/form-data"}:{},url:r,data:n}))}}Axios.prototype[t]=e(),Axios.prototype[t+"Form"]=e(!0)}));var ce=Axios;class CancelToken{constructor(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");let e;this.promise=new Promise((function(t){e=t}));const r=this;this.promise.then((t=>{if(!r._listeners)return;let e=r._listeners.length;for(;e-- >0;)r._listeners[e](t);r._listeners=null})),this.promise.then=t=>{let e;const n=new Promise((t=>{r.subscribe(t),e=t})).then(t);return n.cancel=function(){r.unsubscribe(e)},n},t((function(t,n,o){r.reason||(r.reason=new Dt(t,n,o),e(r.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}static source(){let t;return{token:new CancelToken((function(e){t=e})),cancel:t}}}var le=CancelToken;const fe={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(fe).forEach((([t,e])=>{fe[e]=t}));var pe=fe;const de=function t(e){const r=new ce(e),o=n(ce.prototype.request,r);return J.extend(o,ce.prototype,r,{allOwnKeys:!0}),J.extend(o,r,null,{allOwnKeys:!0}),o.create=function(r){return t(Bt(e,r))},o}(_t);de.Axios=ce,de.CanceledError=Dt,de.CancelToken=le,de.isCancel=St,de.VERSION=oe,de.toFormData=et,de.AxiosError=K,de.Cancel=de.CanceledError,de.all=function(t){return Promise.all(t)},de.spread=function(t){return function(e){return t.apply(null,e)}},de.isAxiosError=function(t){return J.isObject(t)&&!0===t.isAxiosError},de.mergeConfig=Bt,de.AxiosHeaders=Pt,de.formToJSON=t=>bt(J.isHTMLForm(t)?new FormData(t):t),de.getAdapter=ee,de.HttpStatusCode=pe,de.default=de,t.exports=de}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var i=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}return r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),r(9711)})()));
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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REFtYixFQUFBemhCLEVBQUEsS0FBQXNHLHVsQkNBQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csa3FCQ0FBbWIsRUFBQXpoQixFQUFBLEtBQUFzRyxHQUNBbWIsRUFBQXpoQixFQUFBLE1BQUFzRyx1bEJDREFtYixFQUFBemhCLEVBQUEsTUFBQXNHLHU0QkNBQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csbXFCQ0pBbWIsRUFBQXpoQixFQUFBLE1BQUFzRyxHQUNBbWIsRUFBQXpoQixFQUFBLE1BQUFzRyx1bEJDREFtYixFQUFBemhCLEVBQUEsTUFBQXNHLDJnQkNBQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxLQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csdTRCQ2RBbWIsRUFBQXpoQixFQUFBLE1BQUFzRyxHQUNBbWIsRUFBQXpoQixFQUFBLE1BQUFzRyxHQUNBbWIsRUFBQXpoQixFQUFBLE1BQUFzRyxHQUNBbWIsRUFBQXpoQixFQUFBLE1BQUFzRyxHQUNBbWIsRUFBQXpoQixFQUFBLE1BQUFzRyx1NEJDSkFtYixFQUFBemhCLEVBQUEsTUFBQXNHLEdBQ0FtYixFQUFBemhCLEVBQUEsTUFBQXNHLEdBQ0FtYixFQUFBemhCLEVBQUEsTUFBQXNHLEdBQ0FtYixFQUFBemhCLEVBQUEsTUFBQXNHLEdBQ0FtYixFQUFBemhCLEVBQUEsTUFBQXNHLHVsQkNKQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csdWxCQ0FBbWIsRUFBQXpoQixFQUFBLE1BQUFzRyx1bEJDQUFtYixFQUFBemhCLEVBQUEsTUFBQXNHLHVsQkNBQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csbXFCQ0FBbWIsRUFBQXpoQixFQUFBLE1BQUFzRyxHQUNBbWIsRUFBQXpoQixFQUFBLE1BQUFzRyx1bEJDREFtYixFQUFBemhCLEVBQUEsTUFBQXNHLHVsQkNBQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csc2xCQ0FBbWIsRUFBQXpoQixFQUFBLEtBQUFzRyx1bEJDQUFtYixFQUFBemhCLEVBQUEsTUFBQXNHLHU0QkNBQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csbXFCQ0pBbWIsRUFBQXpoQixFQUFBLE1BQUFzRyxHQUNBbWIsRUFBQXpoQixFQUFBLE1BQUFzRyxzbEJDREFtYixFQUFBemhCLEVBQUEsS0FBQXNHLDJnQkNBQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FDQW1iLEVBQUF6aEIsRUFBQSxNQUFBc0csR0FD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QkEsRUFBT2sxQixNQUFRLEdBQ1ZsMUIsRUFBT20xQixXQUFVbjFCLEVBQU9tMUIsU0FBVyxJQUNqQ24xQixHQ0FrQjQwQixFQUFvQiIsInNvdXJjZXMiOlsid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9Eb21haW5zL2RvbWFpbi50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvRG9tYWlucy9kb21haW5zQ2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9Eb21haW5zL2RvbWFpbnNDcmVkZW50aWFscy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvRG9tYWlucy9kb21haW5zVGFncy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvRG9tYWlucy9kb21haW5zVGVtcGxhdGVzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9FdmVudHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0lQUG9vbHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0lQcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvSW5ib3hQbGFjZW1lbnRzL0F0dHJpYnV0ZXNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0luYm94UGxhY2VtZW50cy9GaWx0ZXJzQ2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvUmVzdWx0cy9JbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvUmVzdWx0cy9JbmJveFBsYWNlbWVudHNSZXN1bHRzU2hhcmluZ0NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvSW5ib3hQbGFjZW1lbnRzL1NlZWRzTGlzdHMvU2VlZHNMaXN0c0NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvSW5ib3hQbGFjZW1lbnRzL2luYm94UGxhY2VtZW50cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvSW5ib3hQbGFjZW1lbnRzL3Byb3ZpZGVycy9JbmJveFBsYWNlbWVudHNQcm92aWRlcnMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL01haWxndW5DbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL01haWxpbmdMaXN0cy9tYWlsTGlzdE1lbWJlcnMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL01haWxpbmdMaXN0cy9tYWlsaW5nTGlzdHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL01lc3NhZ2VzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9NZXRyaWNzL01ldHJpY3NDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1JvdXRlcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvU3RhdHMvU3RhdHNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1N0YXRzL1N0YXRzQ29udGFpbmVyLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdWJhY2NvdW50cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvU3VwcHJlc3Npb25zL0JvdW5jZS50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvU3VwcHJlc3Npb25zL0NvbXBsYWludC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvU3VwcHJlc3Npb25zL1N1cHByZXNzaW9uLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdXBwcmVzc2lvbnMvU3VwcHJlc3Npb25zQ2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdXBwcmVzc2lvbnMvVW5zdWJzY3JpYmUudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1N1cHByZXNzaW9ucy9XaGl0ZUxpc3QudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1ZhbGlkYXRpb25zL211bHRpcGxlVmFsaWRhdGlvbi50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvVmFsaWRhdGlvbnMvdmFsaWRhdGUudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1dlYmhvb2tzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9jb21tb24vQXR0YWNobWVudHNIYW5kbGVyLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9jb21tb24vRXJyb3IudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL2NvbW1vbi9Gb3JtRGF0YUJ1aWxkZXIudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9jb21tb24vUmVxdWVzdC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0VudW1zL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9Db21tb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL0RvbWFpbnMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL0V2ZW50Q2xpZW50L2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9JUFBvb2xzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9JUHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL0luYm94UGxhY2VtZW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvTWFpbGd1bkNsaWVudC9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvTWFpbGluZ0xpc3RzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9NZXNzYWdlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvUm91dGVzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9TdGF0cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvU3ViYWNjb3VudHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvVmFsaWRhdGlvbnMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL1dlYmhvb2tzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL0NvbW1vbi9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL0RvbWFpbnMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9FdmVudHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9JUFBvb2xzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvSVBzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvTWFpbGd1bkNsaWVudC9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL01haWxpbmdMaXN0cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL01lc3NhZ2VzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvUm91dGVzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvU3RhdHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9TdWJhY2NvdW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL1N1cHByZXNzaW9ucy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL1ZhbGlkYXRpb25zL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvV2ViaG9va3MvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvYmFzZS02NC9iYXNlNjQuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9heGlvcy9kaXN0L2Jyb3dzZXIvYXhpb3MuY2pzIiwid2VicGFjazovL21haWxndW4uanMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL21haWxndW4uanMvd2VicGFjay9ydW50aW1lL25vZGUgbW9kdWxlIGRlY29yYXRvciIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBETlNSZWNvcmQsXG4gIERvbWFpbkRhdGEsXG4gIERvbWFpbkR5bmFtaWNQcm9wc1R5cGUsXG4gIFREb21haW5cbn0gZnJvbSAnLi4vLi4vVHlwZXMvRG9tYWlucyc7XG5cbi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluIGltcGxlbWVudHMgVERvbWFpbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgcmVxdWlyZV90bHM6IGJvb2xlYW47XG4gIHNraXBfdmVyaWZpY2F0aW9uOiBib29sZWFuO1xuICBzdGF0ZTogc3RyaW5nO1xuICB3aWxkY2FyZDogYm9vbGVhbjtcbiAgc3BhbV9hY3Rpb246IHN0cmluZztcbiAgY3JlYXRlZF9hdDogRGF0ZTtcbiAgc210cF9wYXNzd29yZDogc3RyaW5nO1xuICBzbXRwX2xvZ2luOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgcmVjZWl2aW5nX2Ruc19yZWNvcmRzOiBETlNSZWNvcmRbXSB8IG51bGw7XG4gIHNlbmRpbmdfZG5zX3JlY29yZHM6IEROU1JlY29yZFtdIHwgbnVsbDtcbiAgaWQ6IHN0cmluZztcbiAgaXNfZGlzYWJsZWQ6IGJvb2xlYW47XG4gIHdlYl9wcmVmaXg6IHN0cmluZztcbiAgd2ViX3NjaGVtZTogc3RyaW5nO1xuICB1c2VfYXV0b21hdGljX3NlbmRlcl9zZWN1cml0eTogYm9vbGVhbjtcbiAgZGtpbV9ob3N0Pzogc3RyaW5nO1xuICBtYWlsZnJvbV9ob3N0Pzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGRhdGE6IERvbWFpbkRhdGEsXG4gICAgcmVjZWl2aW5nPzogRE5TUmVjb3JkW10gfCBudWxsLFxuICAgIHNlbmRpbmc/OiBETlNSZWNvcmRbXSB8IG51bGxcbiAgKSB7XG4gICAgdGhpcy5uYW1lID0gZGF0YS5uYW1lO1xuICAgIHRoaXMucmVxdWlyZV90bHMgPSBkYXRhLnJlcXVpcmVfdGxzO1xuICAgIHRoaXMuc2tpcF92ZXJpZmljYXRpb24gPSBkYXRhLnNraXBfdmVyaWZpY2F0aW9uO1xuICAgIHRoaXMuc3RhdGUgPSBkYXRhLnN0YXRlO1xuICAgIHRoaXMud2lsZGNhcmQgPSBkYXRhLndpbGRjYXJkO1xuICAgIHRoaXMuc3BhbV9hY3Rpb24gPSBkYXRhLnNwYW1fYWN0aW9uO1xuICAgIHRoaXMuY3JlYXRlZF9hdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCk7XG4gICAgdGhpcy5zbXRwX3Bhc3N3b3JkID0gZGF0YS5zbXRwX3Bhc3N3b3JkO1xuICAgIHRoaXMuc210cF9sb2dpbiA9IGRhdGEuc210cF9sb2dpbjtcbiAgICB0aGlzLnR5cGUgPSBkYXRhLnR5cGU7XG4gICAgdGhpcy5yZWNlaXZpbmdfZG5zX3JlY29yZHMgPSByZWNlaXZpbmcgfHwgbnVsbDtcbiAgICB0aGlzLnNlbmRpbmdfZG5zX3JlY29yZHMgPSBzZW5kaW5nIHx8IG51bGw7XG4gICAgdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgdGhpcy5pc19kaXNhYmxlZCA9IGRhdGEuaXNfZGlzYWJsZWQ7XG4gICAgdGhpcy53ZWJfcHJlZml4ID0gZGF0YS53ZWJfcHJlZml4O1xuICAgIHRoaXMud2ViX3NjaGVtZSA9IGRhdGEud2ViX3NjaGVtZTtcbiAgICB0aGlzLnVzZV9hdXRvbWF0aWNfc2VuZGVyX3NlY3VyaXR5ID0gZGF0YS51c2VfYXV0b21hdGljX3NlbmRlcl9zZWN1cml0eTtcblxuICAgIC8qXG4gICAgICBkb21haW4gZ2V0IGFuZCB1cGRhdGUgbWV0aG9kcyBtYXkgaGF2ZSByaWNoZXIgcmVzcG9uc2UgdGhhbiBjcmVhdGUgbWV0aG9kLlxuICAgICovXG4gICAgY29uc3QgZHluYW1pY0tleXM6IChrZXlvZiBEb21haW5EeW5hbWljUHJvcHNUeXBlKVtdID0gWydka2ltX2hvc3QnLCAnbWFpbGZyb21faG9zdCddO1xuXG4gICAgY29uc3QgZHluYW1pY1Byb3BlcnRpZXMgPSBkeW5hbWljS2V5cy5yZWR1Y2UoKGFjYywgcHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICBpZiAoZGF0YVtwcm9wZXJ0eU5hbWVdKSB7XG4gICAgICAgIGNvbnN0IHByb3AgPSBwcm9wZXJ0eU5hbWUgYXMga2V5b2YgRG9tYWluRHluYW1pY1Byb3BzVHlwZTtcbiAgICAgICAgYWNjW3Byb3BdID0gZGF0YVtwcm9wZXJ0eU5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBEb21haW5EeW5hbWljUHJvcHNUeXBlKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGR5bmFtaWNQcm9wZXJ0aWVzKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IHtcbiAgSURvbWFpblRlbXBsYXRlc0NsaWVudCxcbiAgSURvbWFpblRhZ3NDbGllbnQsXG4gIElEb21haW5DcmVkZW50aWFscyxcbiAgSURvbWFpbnNDbGllbnRcbn0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9Eb21haW5zJztcblxuaW1wb3J0IHsgQVBJUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24vQXBpUmVzcG9uc2UnO1xuaW1wb3J0IEFQSUVycm9yIGZyb20gJy4uL2NvbW1vbi9FcnJvcic7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5cbmltcG9ydCBEb21haW5DcmVkZW50aWFsc0NsaWVudCBmcm9tICcuL2RvbWFpbnNDcmVkZW50aWFscyc7XG5pbXBvcnQgRG9tYWluVGVtcGxhdGVzQ2xpZW50IGZyb20gJy4vZG9tYWluc1RlbXBsYXRlcyc7XG5pbXBvcnQgRG9tYWluVGFnc0NsaWVudCBmcm9tICcuL2RvbWFpbnNUYWdzJztcbmltcG9ydCB7XG4gIERlc3Ryb3llZERvbWFpblJlc3BvbnNlLFxuICBNZXNzYWdlUmVzcG9uc2UsXG4gIERvbWFpbkxpc3RSZXNwb25zZURhdGEsXG4gIERvbWFpblJlc3BvbnNlRGF0YSxcbiAgRG9tYWluVHJhY2tpbmdSZXNwb25zZSxcbiAgRG9tYWluVHJhY2tpbmdEYXRhLFxuICBVcGRhdGVEb21haW5UcmFja2luZ1Jlc3BvbnNlLFxuICBVcGRhdGVkT3BlblRyYWNraW5nLFxuICBEb21haW5zUXVlcnksXG4gIERvbWFpbkluZm8sXG4gIENvbm5lY3Rpb25TZXR0aW5ncyxcbiAgQ29ubmVjdGlvblNldHRpbmdzUmVzcG9uc2UsXG4gIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3MsXG4gIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3NSZXMsXG4gIE9wZW5UcmFja2luZ0luZm8sXG4gIENsaWNrVHJhY2tpbmdJbmZvLFxuICBVbnN1YnNjcmliZVRyYWNraW5nSW5mbyxcbiAgUmVwbGFjZW1lbnRGb3JQb29sLFxuICBES0lNQXV0aG9yaXR5SW5mbyxcbiAgVXBkYXRlZERLSU1BdXRob3JpdHksXG4gIFVwZGF0ZWRES0lNQXV0aG9yaXR5UmVzcG9uc2UsXG4gIERLSU1TZWxlY3RvckluZm8sXG4gIFVwZGF0ZWRES0lNU2VsZWN0b3JSZXNwb25zZSxcbiAgV2ViUHJlZml4SW5mbyxcbiAgVXBkYXRlZFdlYlByZWZpeFJlc3BvbnNlLFxuICBURG9tYWluLFxuICBEb21haW5VcGRhdGVJbmZvLFxuICBEb21haW5VcGRhdGVJbmZvUmVxLFxuICBEb21haW5JbmZvUmVxLFxuICBCb29sVG9TdHJpbmcsXG4gIERvbWFpbkdldFF1ZXJ5LFxuICBVcGRhdGVkREtJTVNlbGVjdG9yUmVzdWx0LFxufSBmcm9tICcuLi8uLi9UeXBlcy9Eb21haW5zJztcbmltcG9ydCBEb21haW4gZnJvbSAnLi9kb21haW4nO1xuaW1wb3J0IHsgSUxvZ2dlciB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5zQ2xpZW50IGltcGxlbWVudHMgSURvbWFpbnNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwdWJsaWMgZG9tYWluQ3JlZGVudGlhbHM6IElEb21haW5DcmVkZW50aWFscztcbiAgcHVibGljIGRvbWFpblRlbXBsYXRlczogSURvbWFpblRlbXBsYXRlc0NsaWVudDtcbiAgcHVibGljIGRvbWFpblRhZ3M6IElEb21haW5UYWdzQ2xpZW50O1xuICBwcml2YXRlIGxvZ2dlcjogSUxvZ2dlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXF1ZXN0OiBSZXF1ZXN0LFxuICAgIGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50OiBEb21haW5DcmVkZW50aWFsc0NsaWVudCxcbiAgICBkb21haW5UZW1wbGF0ZXNDbGllbnQ6IERvbWFpblRlbXBsYXRlc0NsaWVudCxcbiAgICBkb21haW5UYWdzQ2xpZW50OiBEb21haW5UYWdzQ2xpZW50LFxuICAgIGxvZ2dlcjogSUxvZ2dlciA9IGNvbnNvbGVcbiAgKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmRvbWFpbkNyZWRlbnRpYWxzID0gZG9tYWluQ3JlZGVudGlhbHNDbGllbnQ7XG4gICAgdGhpcy5kb21haW5UZW1wbGF0ZXMgPSBkb21haW5UZW1wbGF0ZXNDbGllbnQ7XG4gICAgdGhpcy5kb21haW5UYWdzID0gZG9tYWluVGFnc0NsaWVudDtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUJvb2xWYWx1ZXMoXG4gICAgZGF0YTogRG9tYWluSW5mbyB8IERvbWFpblVwZGF0ZUluZm9cbiAgKTogRG9tYWluSW5mb1JlcSB8IERvbWFpblVwZGF0ZUluZm9SZXEge1xuICAgIGNvbnN0IHByb3BzRm9yUmVwbGFjZW1lbnQgPSBkYXRhIGFzIEJvb2xUb1N0cmluZztcbiAgICBjb25zdCByZXBsYWNlZFByb3BzID0gT2JqZWN0LmtleXMocHJvcHNGb3JSZXBsYWNlbWVudCkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgY29uc3QgcHJvcCA9IGtleSBhcyBrZXlvZiBCb29sVG9TdHJpbmc7XG4gICAgICBpZiAodHlwZW9mIHByb3BzRm9yUmVwbGFjZW1lbnRbcHJvcF0gPT09ICdib29sZWFuJykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHByb3BzRm9yUmVwbGFjZW1lbnRbcHJvcF0gYXMgYm9vbGVhbjtcbiAgICAgICAgYWNjW3Byb3BdID0gKHZhbHVlLnRvU3RyaW5nKCkgPT09ICd0cnVlJykgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8a2V5b2YgQm9vbFRvU3RyaW5nLCAndHJ1ZSd8ICdmYWxzZSc+KTtcbiAgICByZXR1cm4geyAuLi5kYXRhLCAuLi5yZXBsYWNlZFByb3BzIH0gYXMgRG9tYWluVXBkYXRlSW5mb1JlcSB8IERvbWFpbkluZm9SZXE7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZU1lc3NhZ2UocmVzcG9uc2U6IERlc3Ryb3llZERvbWFpblJlc3BvbnNlKSA6IE1lc3NhZ2VSZXNwb25zZSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRG9tYWluTGlzdChyZXNwb25zZTogRG9tYWluTGlzdFJlc3BvbnNlRGF0YSk6IFREb21haW5bXSB7XG4gICAgaWYgKHJlc3BvbnNlLmJvZHkgJiYgcmVzcG9uc2UuYm9keS5pdGVtcykge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkuaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBuZXcgRG9tYWluKGl0ZW0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlRG9tYWluKHJlc3BvbnNlOiBEb21haW5SZXNwb25zZURhdGEpOiBURG9tYWluIHtcbiAgICByZXR1cm4gbmV3IERvbWFpbihcbiAgICAgIHJlc3BvbnNlLmJvZHkuZG9tYWluLFxuICAgICAgcmVzcG9uc2UuYm9keS5yZWNlaXZpbmdfZG5zX3JlY29yZHMsXG4gICAgICByZXNwb25zZS5ib2R5LnNlbmRpbmdfZG5zX3JlY29yZHNcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VUcmFja2luZ1NldHRpbmdzKHJlc3BvbnNlOiBEb21haW5UcmFja2luZ1Jlc3BvbnNlKSA6IERvbWFpblRyYWNraW5nRGF0YSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkudHJhY2tpbmc7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVRyYWNraW5nVXBkYXRlKHJlc3BvbnNlOiBVcGRhdGVEb21haW5UcmFja2luZ1Jlc3BvbnNlKSA6VXBkYXRlZE9wZW5UcmFja2luZyB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gIH1cblxuICBwcml2YXRlIF9pc09wZW5UcmFja2luZ0luZm9XaXRQbGFjZShvYmo6IHVua25vd24pOiBvYmogaXMgT3BlblRyYWNraW5nSW5mbyB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICdwbGFjZV9hdF90aGVfdG9wJyBpbiAob2JqIGFzIE9wZW5UcmFja2luZ0luZm8pO1xuICB9XG5cbiAgbGlzdChxdWVyeT86IERvbWFpbnNRdWVyeSk6IFByb21pc2U8VERvbWFpbltdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92NC9kb21haW5zJywgcXVlcnkpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VEb21haW5MaXN0KHJlcyBhcyBEb21haW5MaXN0UmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogRG9tYWluR2V0UXVlcnkpIDogUHJvbWlzZTxURG9tYWluPiB7XG4gICAgY29uc3QgcHJlcGFyZWRRdWVyeSA9IHF1ZXJ5ID8ge1xuICAgICAgJ2g6ZXh0ZW5kZWQnOiBxdWVyeT8uZXh0ZW5kZWQgPz8gZmFsc2UsXG4gICAgICAnaDp3aXRoX2Rucyc6IHF1ZXJ5Py53aXRoX2RucyA/PyB0cnVlLFxuICAgIH0gOiB7fTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3Y0L2RvbWFpbnMvJHtkb21haW59YCwgcHJlcGFyZWRRdWVyeSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW4ocmVzIGFzIERvbWFpblJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IERvbWFpbkluZm8pIDogUHJvbWlzZTxURG9tYWluPiB7XG4gICAgY29uc3QgcG9zdE9iaiA9IHRoaXMuX2hhbmRsZUJvb2xWYWx1ZXMoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKCcvdjQvZG9tYWlucycsIHBvc3RPYmopXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIHVwZGF0ZShkb21haW46IHN0cmluZywgZGF0YTogRG9tYWluVXBkYXRlSW5mbykgOiBQcm9taXNlPFREb21haW4+IHtcbiAgICBjb25zdCBwdXREYXRhID0gdGhpcy5faGFuZGxlQm9vbFZhbHVlcyhkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRChgL3Y0L2RvbWFpbnMvJHtkb21haW59YCwgcHV0RGF0YSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW4ocmVzIGFzIERvbWFpblJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgdmVyaWZ5KGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxURG9tYWluPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92NC9kb21haW5zLyR7ZG9tYWlufS92ZXJpZnlgKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbihyZXMgYXMgRG9tYWluUmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICBkZXN0cm95KGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3YzL2RvbWFpbnMvJHtkb21haW59YClcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VNZXNzYWdlKHJlcyBhcyBEZXN0cm95ZWREb21haW5SZXNwb25zZSkpO1xuICB9XG5cbiAgZ2V0Q29ubmVjdGlvbihkb21haW46IHN0cmluZyk6IFByb21pc2U8Q29ubmVjdGlvblNldHRpbmdzPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92My9kb21haW5zLyR7ZG9tYWlufS9jb25uZWN0aW9uYClcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIENvbm5lY3Rpb25TZXR0aW5nc1Jlc3BvbnNlKVxuICAgICAgLnRoZW4oKHJlczpDb25uZWN0aW9uU2V0dGluZ3NSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgQ29ubmVjdGlvblNldHRpbmdzKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbm5lY3Rpb24oZG9tYWluOiBzdHJpbmcsIGRhdGE6IENvbm5lY3Rpb25TZXR0aW5ncyk6IFByb21pc2U8VXBkYXRlZENvbm5lY3Rpb25TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vY29ubmVjdGlvbmAsIGRhdGEpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzUmVzKVxuICAgICAgLnRoZW4oKHJlczpVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzUmVzKSA9PiByZXMuYm9keSBhcyBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzKTtcbiAgfVxuXG4gIC8vIFRyYWNraW5nXG5cbiAgZ2V0VHJhY2tpbmcoZG9tYWluOiBzdHJpbmcpIDogUHJvbWlzZTxEb21haW5UcmFja2luZ0RhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3RyYWNraW5nJykpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVRyYWNraW5nU2V0dGluZ3MpO1xuICB9XG5cbiAgdXBkYXRlVHJhY2tpbmcoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGRhdGE6IE9wZW5UcmFja2luZ0luZm8gfCBDbGlja1RyYWNraW5nSW5mbyB8IFVuc3Vic2NyaWJlVHJhY2tpbmdJbmZvXG4gICk6IFByb21pc2U8VXBkYXRlZE9wZW5UcmFja2luZz4ge1xuICAgIGNvbnN0IHByZXBhcmVkRGF0YTogT3BlblRyYWNraW5nSW5mbyB8IENsaWNrVHJhY2tpbmdJbmZvIHwgVW5zdWJzY3JpYmVUcmFja2luZ0luZm8gPSB7XG4gICAgICAuLi5kYXRhXG4gICAgfTtcbiAgICBpZiAodHlwZW9mIGRhdGE/LmFjdGl2ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwcmVwYXJlZERhdGEuYWN0aXZlID0gKGRhdGE/LmFjdGl2ZSkgPyAneWVzJyA6ICdubyc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzT3BlblRyYWNraW5nSW5mb1dpdFBsYWNlKGRhdGEpKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGE/LnBsYWNlX2F0X3RoZV90b3AgPT09ICdib29sZWFuJykge1xuICAgICAgICAocHJlcGFyZWREYXRhIGFzIE9wZW5UcmFja2luZ0luZm8pLnBsYWNlX2F0X3RoZV90b3AgPSAoZGF0YT8ucGxhY2VfYXRfdGhlX3RvcCkgPyAneWVzJyA6ICdubyc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAndHJhY2tpbmcnLCB0eXBlKSwgcHJlcGFyZWREYXRhKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZVRyYWNraW5nVXBkYXRlKHJlcyBhcyBVcGRhdGVEb21haW5UcmFja2luZ1Jlc3BvbnNlKSk7XG4gIH1cblxuICAvLyBJUHNcbiAgLyoqXG4gICogQGRlcHJlY2F0ZWQgXCJkb21haW5zLmdldElwc1wiIG1ldGhvZCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgcmVsZWFzZXMuXG4gICovXG4gIGdldElwcyhkb21haW46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0aGlzLmxvZ2dlci53YXJuKCdcImRvbWFpbnMuZ2V0SXBzXCIgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHJlbGVhc2VzLicpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJykpXG4gICAgICAudGhlbigocmVzcG9uc2U6IEFQSVJlc3BvbnNlKSA9PiByZXNwb25zZT8uYm9keT8uaXRlbXMpO1xuICB9XG5cbiAgLyoqXG4gICogQGRlcHJlY2F0ZWQgXCJkb21haW5zLmFzc2lnbklwXCIgbWV0aG9kIGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSByZWxlYXNlcy5cbiAgKi9cbiAgYXNzaWduSXAoZG9tYWluOiBzdHJpbmcsIGlwOiBzdHJpbmcpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgdGhpcy5sb2dnZXIud2FybignXCJkb21haW5zLmFzc2lnbklwXCIgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHJlbGVhc2VzLicpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpLCB7IGlwIH0pO1xuICB9XG5cbiAgLyoqXG4gICogQGRlcHJlY2F0ZWQgXCJkb21haW5zLmRlbGV0ZUlwXCIgbWV0aG9kIGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIG1vdmVkIHRvIHRoZSBJcHNDbGllbnQuXG4gICovXG4gIGRlbGV0ZUlwKGRvbWFpbjogc3RyaW5nLCBpcDogc3RyaW5nKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHRoaXMubG9nZ2VyLndhcm4oJ1wiZG9tYWlucy5kZWxldGVJcFwiIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIG1vdmVkIGludG8gdGhlIElwc0NsaWVudCBpbiB0aGUgZnV0dXJlIHJlbGVhc2VzLicpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJywgaXApKTtcbiAgfVxuXG4gIC8qKlxuICAqIEBkZXByZWNhdGVkIFwiZG9tYWlucy5saW5rSXBQb29sXCIgbWV0aG9kIGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWRcbiAgKiBpbiB0aGUgZnV0dXJlIHJlbGVhc2VzLlxuICAqL1xuICBsaW5rSXBQb29sKGRvbWFpbjogc3RyaW5nLCBwb29sSWQ6IHN0cmluZyk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICB0aGlzLmxvZ2dlci53YXJuKCdcImRvbWFpbnMubGlua0lwUG9vbFwiIG1ldGhvZCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgcmVsZWFzZXMuJyk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJyksIHsgcG9vbF9pZDogcG9vbElkIH0pO1xuICB9XG5cbiAgLyoqXG4gICogQGRlcHJlY2F0ZWQgXCJkb21haW5zLnVubGlua0lwUG9sbFwiIG1ldGhvZCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSBtb3ZlZCBpbnRvIHRoZSBJcHNDbGllbnRcbiAgKiBpbiB0aGUgZnV0dXJlIHJlbGVhc2VzLlxuICAqL1xuICB1bmxpbmtJcFBvbGwoZG9tYWluOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBSZXBsYWNlbWVudEZvclBvb2wpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgdGhpcy5sb2dnZXIud2FybignXCJkb21haW5zLnVubGlua0lwUG9sbFwiIG1ldGhvZCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSBtb3ZlZCBpbnRvIHRoZSBJcHNDbGllbnQgaW4gdGhlIGZ1dHVyZSByZWxlYXNlcy4nKTtcbiAgICBsZXQgc2VhcmNoUGFyYW1zID0gJyc7XG4gICAgaWYgKHJlcGxhY2VtZW50LnBvb2xfaWQgJiYgcmVwbGFjZW1lbnQuaXApIHtcbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoJ1RvbyBtdWNoIGRhdGEgZm9yIHJlcGxhY2VtZW50JywgJ1BsZWFzZSBzcGVjaWZ5IGVpdGhlciBwb29sX2lkIG9yIGlwIChub3QgYm90aCknKTtcbiAgICB9IGVsc2UgaWYgKHJlcGxhY2VtZW50LnBvb2xfaWQpIHtcbiAgICAgIHNlYXJjaFBhcmFtcyA9IGA/cG9vbF9pZD0ke3JlcGxhY2VtZW50LnBvb2xfaWR9YDtcbiAgICB9IGVsc2UgaWYgKHJlcGxhY2VtZW50LmlwKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBgP2lwPSR7cmVwbGFjZW1lbnQuaXB9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnLCAnaXBfcG9vbCcsIHNlYXJjaFBhcmFtcykpO1xuICB9XG5cbiAgdXBkYXRlREtJTUF1dGhvcml0eShkb21haW46IHN0cmluZywgZGF0YTogREtJTUF1dGhvcml0eUluZm8pOiBQcm9taXNlPFVwZGF0ZWRES0lNQXV0aG9yaXR5PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS9ka2ltX2F1dGhvcml0eWAsIHt9LCB7IHF1ZXJ5OiBgc2VsZj0ke2RhdGEuc2VsZn1gIH0pXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBVcGRhdGVkREtJTUF1dGhvcml0eVJlc3BvbnNlKVxuICAgICAgLnRoZW4oKHJlcyA6IFVwZGF0ZWRES0lNQXV0aG9yaXR5UmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIFVwZGF0ZWRES0lNQXV0aG9yaXR5KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURLSU1TZWxlY3RvcihcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBkYXRhOiBES0lNU2VsZWN0b3JJbmZvXG4gICk6IFByb21pc2U8VXBkYXRlZERLSU1TZWxlY3RvclJlc3VsdD4ge1xuICAgIGNvbnN0IHJlczogVXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnB1dChgL3YzL2RvbWFpbnMvJHtkb21haW59L2RraW1fc2VsZWN0b3JgLCB7fSwgeyBxdWVyeTogYGRraW1fc2VsZWN0b3I9JHtkYXRhLmRraW1TZWxlY3Rvcn1gIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzLnN0YXR1cyxcbiAgICAgIG1lc3NhZ2U6IHJlcz8uYm9keT8ubWVzc2FnZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgKiBAZGVwcmVjYXRlZCBcImRvbWFpbnMudXBkYXRlV2ViUHJlZml4XCIgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuXG4gICogUGxlYXNlIHVzZSBkb21haW5zLnVwZGF0ZSB0byBzZXQgbmV3IFwid2ViX3ByZWZpeFwiLlxuICAqIEN1cnJlbnQgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHJlbGVhc2VzLlxuICAqL1xuICB1cGRhdGVXZWJQcmVmaXgoZG9tYWluOiBzdHJpbmcsIGRhdGE6IFdlYlByZWZpeEluZm8pOiBQcm9taXNlPFVwZGF0ZWRXZWJQcmVmaXhSZXNwb25zZT4ge1xuICAgIHRoaXMubG9nZ2VyLndhcm4oJ1wiZG9tYWlucy51cGRhdGVXZWJQcmVmaXhcIiBtZXRob2QgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBkb21haW5zLnVwZGF0ZSB0byBzZXQgbmV3IFwid2ViX3ByZWZpeFwiLiBDdXJyZW50IG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSByZWxlYXNlcy4nKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dChgL3YzL2RvbWFpbnMvJHtkb21haW59L3dlYl9wcmVmaXhgLCB7fSwgeyBxdWVyeTogYHdlYl9wcmVmaXg9JHtkYXRhLndlYlByZWZpeH1gIH0pXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBVcGRhdGVkV2ViUHJlZml4UmVzcG9uc2UpO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgeyBBUElSZXNwb25zZSB9IGZyb20gJy4uLy4uL1R5cGVzL0NvbW1vbi9BcGlSZXNwb25zZSc7XG5pbXBvcnQgeyBJRG9tYWluQ3JlZGVudGlhbHMgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL0RvbWFpbnMnO1xuaW1wb3J0IHtcbiAgRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZURhdGEsXG4gIERvbWFpbkNyZWRlbnRpYWxzTGlzdCxcbiAgQ3JlYXRlZFVwZGF0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlLFxuICBEb21haW5DcmVkZW50aWFsc1Jlc3VsdCxcbiAgRGVsZXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2UsXG4gIERvbWFpbkNyZWRlbnRpYWxzUXVlcnksXG4gIERvbWFpbkNyZWRlbnRpYWxzLFxuICBVcGRhdGVEb21haW5DcmVkZW50aWFsc0RhdGFcbn0gZnJvbSAnLi4vLi4vVHlwZXMvRG9tYWlucyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGltcGxlbWVudHMgSURvbWFpbkNyZWRlbnRpYWxzIHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5iYXNlUm91dGUgPSAnL3YzL2RvbWFpbnMvJztcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlRG9tYWluQ3JlZGVudGlhbHNMaXN0KFxuICAgIHJlc3BvbnNlOiBEb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlRGF0YVxuICApOiBEb21haW5DcmVkZW50aWFsc0xpc3Qge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogcmVzcG9uc2UuYm9keS5pdGVtcyxcbiAgICAgIHRvdGFsQ291bnQ6IHJlc3BvbnNlLmJvZHkudG90YWxfY291bnRcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VNZXNzYWdlUmVzcG9uc2UoXG4gICAgcmVzcG9uc2U6IENyZWF0ZWRVcGRhdGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZVxuICApOiBEb21haW5DcmVkZW50aWFsc1Jlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2VcbiAgICB9IGFzIERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURlbGV0ZWRSZXNwb25zZShcbiAgICByZXNwb25zZTpEZWxldGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZVxuICApOiBEb21haW5DcmVkZW50aWFsc1Jlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UsXG4gICAgICBzcGVjOiByZXNwb25zZS5ib2R5LnNwZWNcbiAgICB9IGFzIERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGxpc3QoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogRG9tYWluQ3JlZGVudGlhbHNRdWVyeSk6IFByb21pc2U8RG9tYWluQ3JlZGVudGlhbHNMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL2NyZWRlbnRpYWxzJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbkNyZWRlbnRpYWxzTGlzdChyZXMgYXMgRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZURhdGEpXG4gICAgICApO1xuICB9XG5cbiAgY3JlYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IERvbWFpbkNyZWRlbnRpYWxzXG4gICk6IFByb21pc2U8RG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L2NyZWRlbnRpYWxzYCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZU1lc3NhZ2VSZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIHVwZGF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBjcmVkZW50aWFsc0xvZ2luOiBzdHJpbmcsXG4gICAgZGF0YTogVXBkYXRlRG9tYWluQ3JlZGVudGlhbHNEYXRhXG4gICk6IFByb21pc2U8RG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0ke2RvbWFpbn0vY3JlZGVudGlhbHMvJHtjcmVkZW50aWFsc0xvZ2lufWAsIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VNZXNzYWdlUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBkZXN0cm95KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzTG9naW46IHN0cmluZ1xuICApOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L2NyZWRlbnRpYWxzLyR7Y3JlZGVudGlhbHNMb2dpbn1gKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRGVsZXRlZFJlc3BvbnNlKHJlcykpO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgeyBBUElSZXNwb25zZSB9IGZyb20gJy4uLy4uL1R5cGVzL0NvbW1vbi9BcGlSZXNwb25zZSc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5cbmltcG9ydCB7XG4gIElEb21haW5UYWdTdGF0aXN0aWNSZXN1bHQsXG4gIElEb21haW5UYWdzQ2xpZW50XG59IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvRG9tYWlucyc7XG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuLi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5pbXBvcnQgeyBSZXNvbHV0aW9uIH0gZnJvbSAnLi4vLi4vRW51bXMnO1xuaW1wb3J0IHtcbiAgRG9tYWluVGFnc0l0ZW0sXG4gIERvbWFpblRhZ3NJdGVtSW5mbyxcbiAgRG9tYWluVGFnU3RhdGlzdGljSXRlbSxcbiAgRG9tYWluVGFnU3RhdEFQSVJlc3BvbnNlLFxuICBEb21haW5UYWdBUElSZXNwb25zZVN0YXRzSXRlbSxcbiAgRG9tYWluVGFnc0xpc3QsXG4gIERvbWFpblRhZ3NSZXNwb25zZURhdGEsXG4gIERvbWFpblRhZ3NRdWVyeSxcbiAgRG9tYWluVGFnc01lc3NhZ2VSZXMsXG4gIERvbWFpblRhZ3NTdGF0aXN0aWNRdWVyeSxcbiAgRG9tYWluVGFnQ291bnRyaWVzQWdncmVnYXRpb24sXG4gIERvbWFpblRhZ0NvdW50cmllc0FQSVJlc3BvbnNlLFxuICBEb21haW5UYWdQcm92aWRlcnNBZ2dyZWdhdGlvbixcbiAgRG9tYWluVGFnUHJvdmlkZXJzQVBJUmVzcG9uc2UsXG4gIERvbWFpblRhZ0RldmljZXNBZ2dyZWdhdGlvbixcbiAgRG9tYWluVGFnRGV2aWNlc0FQSVJlc3BvbnNlXG59IGZyb20gJy4uLy4uL1R5cGVzL0RvbWFpbnMnO1xuXG5leHBvcnQgY2xhc3MgRG9tYWluVGFnIGltcGxlbWVudHMgRG9tYWluVGFnc0l0ZW0ge1xuICB0YWc6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgJ2ZpcnN0LXNlZW4nOiBEYXRlO1xuICAnbGFzdC1zZWVuJzogRGF0ZTtcblxuICBjb25zdHJ1Y3Rvcih0YWdJbmZvOiBEb21haW5UYWdzSXRlbUluZm8pIHtcbiAgICB0aGlzLnRhZyA9IHRhZ0luZm8udGFnO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0YWdJbmZvLmRlc2NyaXB0aW9uO1xuICAgIHRoaXNbJ2ZpcnN0LXNlZW4nXSA9IG5ldyBEYXRlKHRhZ0luZm9bJ2ZpcnN0LXNlZW4nXSk7XG4gICAgdGhpc1snbGFzdC1zZWVuJ10gPSBuZXcgRGF0ZSh0YWdJbmZvWydsYXN0LXNlZW4nXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERvbWFpblRhZ1N0YXRpc3RpYyBpbXBsZW1lbnRzIElEb21haW5UYWdTdGF0aXN0aWNSZXN1bHQge1xuICB0YWc6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhcnQ6IERhdGU7XG4gIGVuZDogRGF0ZTtcbiAgcmVzb2x1dGlvbjogUmVzb2x1dGlvbjtcbiAgc3RhdHM6IERvbWFpblRhZ1N0YXRpc3RpY0l0ZW1bXTtcblxuICBjb25zdHJ1Y3Rvcih0YWdTdGF0aXN0aWNJbmZvOiBEb21haW5UYWdTdGF0QVBJUmVzcG9uc2UpIHtcbiAgICB0aGlzLnRhZyA9IHRhZ1N0YXRpc3RpY0luZm8uYm9keS50YWc7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHRhZ1N0YXRpc3RpY0luZm8uYm9keS5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLnN0YXJ0ID0gbmV3IERhdGUodGFnU3RhdGlzdGljSW5mby5ib2R5LnN0YXJ0KTtcbiAgICB0aGlzLmVuZCA9IG5ldyBEYXRlKHRhZ1N0YXRpc3RpY0luZm8uYm9keS5lbmQpO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IHRhZ1N0YXRpc3RpY0luZm8uYm9keS5yZXNvbHV0aW9uO1xuICAgIHRoaXMuc3RhdHMgPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkuc3RhdHMubWFwKGZ1bmN0aW9uIChzdGF0OiBEb21haW5UYWdBUElSZXNwb25zZVN0YXRzSXRlbSkge1xuICAgICAgY29uc3QgcmVzID0geyAuLi5zdGF0LCB0aW1lOiBuZXcgRGF0ZShzdGF0LnRpbWUpIH07XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpblRhZ3NDbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPERvbWFpblRhZ3NMaXN0PlxuICBpbXBsZW1lbnRzIElEb21haW5UYWdzQ2xpZW50IHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHN1cGVyKHJlcXVlc3QpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5iYXNlUm91dGUgPSAnL3YzLyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KFxuICAgIHJlc3BvbnNlOiBEb21haW5UYWdzUmVzcG9uc2VEYXRhLFxuICApOiBEb21haW5UYWdzTGlzdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIERvbWFpblRhZ3NMaXN0O1xuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcCgodGFnSW5mbzogRG9tYWluVGFnc0l0ZW1JbmZvKSA9PiBuZXcgRG9tYWluVGFnKHRhZ0luZm8pKTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICd0YWcnKTtcbiAgICBkYXRhLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlVGFnU3RhdGlzdGljKFxuICAgIHJlc3BvbnNlOiBEb21haW5UYWdTdGF0QVBJUmVzcG9uc2VcbiAgKTogSURvbWFpblRhZ1N0YXRpc3RpY1Jlc3VsdCB7XG4gICAgcmV0dXJuIG5ldyBEb21haW5UYWdTdGF0aXN0aWMocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgbGlzdChkb21haW46IHN0cmluZywgcXVlcnk/OiBEb21haW5UYWdzUXVlcnkpOiBQcm9taXNlPERvbWFpblRhZ3NMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXModXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnKSwgcXVlcnkpO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnc0l0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IG5ldyBEb21haW5UYWcocmVzLmJvZHkpXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnc01lc3NhZ2VSZXM+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZyksIGRlc2NyaXB0aW9uKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBEb21haW5UYWdzTWVzc2FnZVJlc1xuICAgICAgKTtcbiAgfVxuXG4gIGRlc3Ryb3koXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGFnOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxEb21haW5UYWdzTWVzc2FnZVJlcz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS90YWdzLyR7dGFnfWApXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gKFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogcmVzLmJvZHkubWVzc2FnZSxcbiAgICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXNcbiAgICAgICAgfSBhcyBEb21haW5UYWdzTWVzc2FnZVJlcykpO1xuICB9XG5cbiAgc3RhdGlzdGljKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZywgcXVlcnk6IERvbWFpblRhZ3NTdGF0aXN0aWNRdWVyeSlcbiAgICA6IFByb21pc2U8RG9tYWluVGFnU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcsICdzdGF0cycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VUYWdTdGF0aXN0aWMocmVzKVxuICAgICAgKTtcbiAgfVxuXG4gIGNvdW50cmllcyhkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ0NvdW50cmllc0FnZ3JlZ2F0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcsICdzdGF0cy9hZ2dyZWdhdGVzL2NvdW50cmllcycpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IERvbWFpblRhZ0NvdW50cmllc0FQSVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBEb21haW5UYWdDb3VudHJpZXNBZ2dyZWdhdGlvblxuICAgICAgKTtcbiAgfVxuXG4gIHByb3ZpZGVycyhkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ1Byb3ZpZGVyc0FnZ3JlZ2F0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcsICdzdGF0cy9hZ2dyZWdhdGVzL3Byb3ZpZGVycycpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IERvbWFpblRhZ1Byb3ZpZGVyc0FQSVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBEb21haW5UYWdQcm92aWRlcnNBZ2dyZWdhdGlvblxuICAgICAgKTtcbiAgfVxuXG4gIGRldmljZXMoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdEZXZpY2VzQWdncmVnYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZywgJ3N0YXRzL2FnZ3JlZ2F0ZXMvZGV2aWNlcycpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IERvbWFpblRhZ0RldmljZXNBUElSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgRG9tYWluVGFnRGV2aWNlc0FnZ3JlZ2F0aW9uXG4gICAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5cbmltcG9ydCB7XG4gIENyZWF0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UsXG4gIENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlLFxuICBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQsXG4gIERvbWFpblRlbXBsYXRlRGF0YSxcbiAgRG9tYWluVGVtcGxhdGVzUXVlcnksXG4gIERvbWFpblRlbXBsYXRlVXBkYXRlRGF0YSxcbiAgRG9tYWluVGVtcGxhdGVVcGRhdGVWZXJzaW9uRGF0YSxcbiAgRG9tYWluVGVtcGxhdGVWZXJzaW9uRGF0YSxcbiAgR2V0RG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSxcbiAgTGlzdERvbWFpblRlbXBsYXRlc0FQSVJlc3BvbnNlLFxuICBMaXN0RG9tYWluVGVtcGxhdGVzUmVzdWx0LFxuICBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc0FQSVJlc3BvbnNlLFxuICBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc1Jlc3VsdCxcbiAgTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UsXG4gIE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCxcbiAgTm90aWZpY2F0aW9uQVBJUmVzcG9uc2UsXG4gIE5vdGlmaWNhdGlvblJlc3VsdCxcbiAgU2hvcnRUZW1wbGF0ZVZlcnNpb24sXG4gIFRlbXBsYXRlUXVlcnksXG4gIFRlbXBsYXRlVmVyc2lvbixcbiAgVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlLFxuICBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0XG59IGZyb20gJy4uLy4uL1R5cGVzL0RvbWFpbnMnO1xuaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IHsgSURvbWFpblRlbXBsYXRlLCBJRG9tYWluVGVtcGxhdGVzQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9Eb21haW5zJztcblxuZXhwb3J0IGNsYXNzIERvbWFpblRlbXBsYXRlSXRlbSBpbXBsZW1lbnRzIElEb21haW5UZW1wbGF0ZSB7XG4gIG5hbWUgOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uIDogc3RyaW5nO1xuICBjcmVhdGVkQXQgOiBEYXRlIHwgJyc7XG4gIGNyZWF0ZWRCeSA6IHN0cmluZztcbiAgaWQgOiBzdHJpbmc7XG4gIHZlcnNpb24/OiBUZW1wbGF0ZVZlcnNpb247XG4gIHZlcnNpb25zPzogU2hvcnRUZW1wbGF0ZVZlcnNpb25bXTtcblxuICBjb25zdHJ1Y3Rvcihkb21haW5UZW1wbGF0ZUZyb21BUEk6IElEb21haW5UZW1wbGF0ZSkge1xuICAgIHRoaXMubmFtZSA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS5uYW1lO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuZGVzY3JpcHRpb247XG4gICAgdGhpcy5jcmVhdGVkQXQgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuY3JlYXRlZEF0ID8gbmV3IERhdGUoZG9tYWluVGVtcGxhdGVGcm9tQVBJLmNyZWF0ZWRBdCkgOiAnJztcbiAgICB0aGlzLmNyZWF0ZWRCeSA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS5jcmVhdGVkQnk7XG4gICAgdGhpcy5pZCA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS5pZDtcblxuICAgIGlmIChkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbikge1xuICAgICAgdGhpcy52ZXJzaW9uID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb247XG4gICAgICBpZiAoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb24uY3JlYXRlZEF0KSB7XG4gICAgICAgIHRoaXMudmVyc2lvbi5jcmVhdGVkQXQgPSBuZXcgRGF0ZShkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbi5jcmVhdGVkQXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbnMgJiYgZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb25zLmxlbmd0aCkge1xuICAgICAgdGhpcy52ZXJzaW9ucyA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9ucy5tYXAoKHZlcnNpb24pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0geyAuLi52ZXJzaW9uIH07XG4gICAgICAgIHJlc3VsdC5jcmVhdGVkQXQgPSBuZXcgRGF0ZSh2ZXJzaW9uLmNyZWF0ZWRBdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluVGVtcGxhdGVzQ2xpZW50XG4gIGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxMaXN0RG9tYWluVGVtcGxhdGVzUmVzdWx0PlxuICBpbXBsZW1lbnRzIElEb21haW5UZW1wbGF0ZXNDbGllbnQge1xuICBiYXNlUm91dGU6IHN0cmluZztcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvJztcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VDcmVhdGlvblJlc3BvbnNlKGRhdGE6IENyZWF0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpOiBJRG9tYWluVGVtcGxhdGUge1xuICAgIHJldHVybiBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKGRhdGEuYm9keS50ZW1wbGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQ3JlYXRpb25WZXJzaW9uUmVzcG9uc2UoXG4gICAgZGF0YTogQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2VcbiAgKTogQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCA9IHt9IGFzIENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdDtcbiAgICByZXN1bHQuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBkYXRhLmJvZHkubWVzc2FnZTtcbiAgICBpZiAoZGF0YS5ib2R5ICYmIGRhdGEuYm9keS50ZW1wbGF0ZSkge1xuICAgICAgcmVzdWx0LnRlbXBsYXRlID0gbmV3IERvbWFpblRlbXBsYXRlSXRlbShkYXRhLmJvZHkudGVtcGxhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU11dGF0aW9uUmVzcG9uc2UoXG4gICAgZGF0YTogVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlXG4gICk6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdDogVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdCA9IHt9IGFzIFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQ7XG4gICAgcmVzdWx0LnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHJlc3VsdC5tZXNzYWdlID0gZGF0YS5ib2R5Lm1lc3NhZ2U7XG4gICAgaWYgKGRhdGEuYm9keSAmJiBkYXRhLmJvZHkudGVtcGxhdGUpIHtcbiAgICAgIHJlc3VsdC50ZW1wbGF0ZU5hbWUgPSBkYXRhLmJvZHkudGVtcGxhdGUubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VOb3RpZmljYXRpb25SZXNwb25zZShkYXRhOiBOb3RpZmljYXRpb25BUElSZXNwb25zZSk6IE5vdGlmaWNhdGlvblJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0OiBOb3RpZmljYXRpb25SZXN1bHQgPSB7fSBhcyBOb3RpZmljYXRpb25SZXN1bHQ7XG4gICAgcmVzdWx0LnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHJlc3VsdC5tZXNzYWdlID0gZGF0YS5ib2R5Lm1lc3NhZ2U7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZShcbiAgICBkYXRhOiBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZVxuICApOiBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdDogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0ID0ge30gYXMgTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIGlmIChkYXRhLmJvZHkudGVtcGxhdGUpIHtcbiAgICAgIHJlc3VsdC50ZW1wbGF0ZU5hbWUgPSBkYXRhLmJvZHkudGVtcGxhdGUubmFtZTtcbiAgICAgIHJlc3VsdC50ZW1wbGF0ZVZlcnNpb24gPSB7IHRhZzogZGF0YS5ib2R5LnRlbXBsYXRlLnZlcnNpb24udGFnIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KHJlc3BvbnNlOiBMaXN0RG9tYWluVGVtcGxhdGVzQVBJUmVzcG9uc2UpOiBMaXN0RG9tYWluVGVtcGxhdGVzUmVzdWx0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgTGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdDtcblxuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcCgoZDogSURvbWFpblRlbXBsYXRlKSA9PiBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKGQpKTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdwJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VMaXN0VGVtcGxhdGVWZXJzaW9ucyhcbiAgICByZXNwb25zZTogTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNBUElSZXNwb25zZVxuICApOiBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc1Jlc3VsdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0O1xuXG4gICAgZGF0YS50ZW1wbGF0ZSA9IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0ocmVzcG9uc2UuYm9keS50ZW1wbGF0ZSk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAncCcpO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IERvbWFpblRlbXBsYXRlc1F1ZXJ5KTogUHJvbWlzZTxMaXN0RG9tYWluVGVtcGxhdGVzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXModXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycpLCBxdWVyeSk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIHRlbXBsYXRlTmFtZTogc3RyaW5nLCBxdWVyeT86IFRlbXBsYXRlUXVlcnkpOiBQcm9taXNlPElEb21haW5UZW1wbGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lKSwgcXVlcnkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogR2V0RG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gbmV3IERvbWFpblRlbXBsYXRlSXRlbShyZXMuYm9keS50ZW1wbGF0ZSlcbiAgICAgICk7XG4gIH1cblxuICBjcmVhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVEYXRhXG4gICk6IFByb21pc2U8SURvbWFpblRlbXBsYXRlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMnKSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXM6IENyZWF0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VDcmVhdGlvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgdXBkYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nLFxuICAgIGRhdGE6IERvbWFpblRlbXBsYXRlVXBkYXRlRGF0YVxuICApOiBQcm9taXNlPFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSksIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGlvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgZGVzdHJveShkb21haW46IHN0cmluZywgdGVtcGxhdGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSkpXG4gICAgICAudGhlbigocmVzOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGlvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgZGVzdHJveUFsbChkb21haW46IHN0cmluZyk6IFByb21pc2U8Tm90aWZpY2F0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycpKVxuICAgICAgLnRoZW4oKHJlczogTm90aWZpY2F0aW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VOb3RpZmljYXRpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGxpc3RWZXJzaW9ucyhcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICBxdWVyeT86IERvbWFpblRlbXBsYXRlc1F1ZXJ5XG4gICk6IFByb21pc2U8TGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VMaXN0VGVtcGxhdGVWZXJzaW9ucyhyZXMpXG4gICAgICApO1xuICB9XG5cbiAgZ2V0VmVyc2lvbihkb21haW46IHN0cmluZywgdGVtcGxhdGVOYW1lOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxJRG9tYWluVGVtcGxhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucy8nLCB0YWcpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEdldERvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0ocmVzLmJvZHkudGVtcGxhdGUpXG4gICAgICApO1xuICB9XG5cbiAgY3JlYXRlVmVyc2lvbihcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZVZlcnNpb25EYXRhXG4gICk6IFByb21pc2U8Q3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zJyksIGRhdGEpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VDcmVhdGlvblZlcnNpb25SZXNwb25zZShyZXMpXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlVmVyc2lvbihcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICB0YWc6IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZVVwZGF0ZVZlcnNpb25EYXRhXG4gICk6IFByb21pc2U8TXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUsICcvdmVyc2lvbnMvJywgdGFnKSwgZGF0YSlcbiAgICAgIC50aGVuKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAocmVzOiBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU11dGF0ZVRlbXBsYXRlVmVyc2lvblJlc3BvbnNlKHJlcylcbiAgICAgICk7XG4gIH1cblxuICBkZXN0cm95VmVyc2lvbihcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICB0YWc6IHN0cmluZ1xuICApOiBQcm9taXNlPE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zLycsIHRhZykpXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgLnRoZW4oKHJlczogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZShyZXMpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5pbXBvcnQge1xuICBFdmVudHNMaXN0LFxuICBFdmVudHNRdWVyeSxcbiAgRXZlbnRzUmVzcG9uc2UsXG59IGZyb20gJy4uL1R5cGVzL0V2ZW50cyc7XG5cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHsgSUV2ZW50Q2xpZW50IH0gZnJvbSAnLi4vSW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50Q2xpZW50XG4gIGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxFdmVudHNMaXN0PlxuICBpbXBsZW1lbnRzIElFdmVudENsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHN1cGVyKHJlcXVlc3QpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KFxuICAgIHJlc3BvbnNlOiBFdmVudHNSZXNwb25zZSxcbiAgKTogRXZlbnRzTGlzdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIEV2ZW50c0xpc3Q7XG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXM7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJy8nKTtcbiAgICBkYXRhLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGdldChkb21haW46IHN0cmluZywgcXVlcnk/OiBFdmVudHNRdWVyeSkgOiBQcm9taXNlPEV2ZW50c0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TGlzdFdpdGhQYWdlcyh1cmxqb2luKCcvdjMnLCBkb21haW4sICdldmVudHMnKSwgcXVlcnkpO1xuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vY29tbW9uL1JlcXVlc3QnO1xuXG5pbXBvcnQge1xuICBJcFBvb2xDcmVhdGVEYXRhLFxuICBJcFBvb2xDcmVhdGVSZXNwb25zZSxcbiAgSXBQb29sQ3JlYXRlUmVzdWx0LFxuICBJcFBvb2xEZWxldGVEYXRhLFxuICBJcFBvb2xMaXN0UmVzcG9uc2UsXG4gIElwUG9vbExpc3RSZXN1bHQsXG4gIElwUG9vbE1lc3NhZ2VSZXNwb25zZSxcbiAgSXBQb29sTWVzc2FnZVJlc3VsdCxcbiAgSXBQb29sVXBkYXRlRGF0YSxcbn0gZnJvbSAnLi4vVHlwZXMvSVBQb29scyc7XG5pbXBvcnQgeyBJSVBQb29sc0NsaWVudCB9IGZyb20gJy4uL0ludGVyZmFjZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcFBvb2xzQ2xpZW50IGltcGxlbWVudHMgSUlQUG9vbHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgbGlzdCgpOiBQcm9taXNlPElwUG9vbExpc3RSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YxL2lwX3Bvb2xzJylcbiAgICAgIC50aGVuKChyZXNwb25zZTogSXBQb29sTGlzdFJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlSXBQb29sc1Jlc3BvbnNlKHJlc3BvbnNlKSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUoZGF0YTogSXBQb29sQ3JlYXRlRGF0YSk6IFByb21pc2U8SXBQb29sQ3JlYXRlUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IElwUG9vbENyZWF0ZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92MS9pcF9wb29scycsIGRhdGEpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKHBvb2xJZDogc3RyaW5nLCBkYXRhOiBJcFBvb2xVcGRhdGVEYXRhKTogUHJvbWlzZTxJcFBvb2xNZXNzYWdlUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IElwUG9vbE1lc3NhZ2VSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wYXRjaFdpdGhGRChgL3YxL2lwX3Bvb2xzLyR7cG9vbElkfWAsIGRhdGEpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKHBvb2xJZDogc3RyaW5nLCBkYXRhOiBJcFBvb2xEZWxldGVEYXRhKTogUHJvbWlzZTxJcFBvb2xNZXNzYWdlUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6SXBQb29sTWVzc2FnZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3YxL2lwX3Bvb2xzLyR7cG9vbElkfWAsIGRhdGEpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlwUG9vbHNSZXNwb25zZShyZXNwb25zZTogSXBQb29sTGlzdFJlc3BvbnNlKTogSXBQb29sTGlzdFJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cbn1cbiIsImltcG9ydCBNZ1JlcXVlc3QgZnJvbSAnLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQgeyBJcERhdGEsIElQc0xpc3RRdWVyeSwgSXBzTGlzdFJlc3BvbnNlQm9keSB9IGZyb20gJy4uL1R5cGVzL0lQcyc7XG5pbXBvcnQgeyBJSVBzQ2xpZW50IH0gZnJvbSAnLi4vSW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwc0NsaWVudCBpbXBsZW1lbnRzIElJUHNDbGllbnQge1xuICByZXF1ZXN0OiBNZ1JlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogTWdSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGFzeW5jIGxpc3QocXVlcnk/OiBJUHNMaXN0UXVlcnkpOiBQcm9taXNlPElwc0xpc3RSZXNwb25zZUJvZHk+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy92My9pcHMnLCBxdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VJcHNSZXNwb25zZTxJcHNMaXN0UmVzcG9uc2VCb2R5PihyZXNwb25zZSk7XG4gIH1cblxuICBhc3luYyBnZXQoaXA6IHN0cmluZyk6IFByb21pc2U8SXBEYXRhPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KGAvdjMvaXBzLyR7aXB9YCk7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VJcHNSZXNwb25zZTxJcERhdGE+KHJlc3BvbnNlKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VJcHNSZXNwb25zZTxUPihyZXNwb25zZTogeyBib2R5OiBUIH0pOiBUIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSUluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gIEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNBcGlSZXNwb25zZSxcbiAgSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc1Jlc3VsdCxcbiAgSW5ib3hQbGFjZW1lbnRzVmFsdWVzQXBpUmVzcG9uc2UsXG4gIEluYm94UGxhY2VtZW50c1ZhbHVlc1Jlc3VsdFxufSBmcm9tICcuLi8uLi9UeXBlcy9JbmJveFBsYWNlbWVudHMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50IGltcGxlbWVudHMgSUluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwYXRoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVxdWVzdDogUmVxdWVzdCxcbiAgICBwYXRoOiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgYXN5bmMgbGlzdCgpOiBQcm9taXNlPEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQodGhpcy5wYXRoKSBhcyBJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQXBpUmVzcG9uc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiByZXNwb25zZS5ib2R5Lml0ZW1zLFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgfSBhcyBJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzUmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgZ2V0KGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IFByb21pc2U8SW5ib3hQbGFjZW1lbnRzVmFsdWVzUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMucGF0aH0vJHthdHRyaWJ1dGVOYW1lfWApIGFzIEluYm94UGxhY2VtZW50c1ZhbHVlc0FwaVJlc3BvbnNlO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNwb25zZS5ib2R5LFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICB9O1xuICB9XG59XG4iLCJpbXBvcnQgeyBJbmJveFBsYWNlbWVudHNGaWx0ZXJzQXBpUmVzcG9uc2UsIEluYm94UGxhY2VtZW50c0ZpbHRlcnNSZXN1bHQgfSBmcm9tICcuLi8uLi9UeXBlcy9JbmJveFBsYWNlbWVudHMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHsgSUluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCBpbXBsZW1lbnRzIElJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcGF0aDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgcGF0aDogc3RyaW5nXG4gICkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgfVxuXG4gIGFzeW5jIGxpc3QoKTogUHJvbWlzZTxJbmJveFBsYWNlbWVudHNGaWx0ZXJzUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCh0aGlzLnBhdGgpIGFzIEluYm94UGxhY2VtZW50c0ZpbHRlcnNBcGlSZXNwb25zZTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgc3VwcG9ydGVkX2ZpbHRlcnM6IHJlc3VsdC5ib2R5LnN1cHBvcnRlZF9maWx0ZXJzXG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgSUlQUlNoYXJpbmdDbGllbnQsXG4gIElJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50LFxuICBJSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCxcbiAgSUluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQsXG4gIElMb2dnZXJcbn0gZnJvbSAnLi4vLi4vLi4vSW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7XG4gIEluYm94UGxhY2VtZW50c0JveCxcbiAgSW5ib3hQbGFjZW1lbnRzRGVzdHJveUFQSVJlc3BvbnNlLFxuICBJbmJveFBsYWNlbWVudHNEZXN0cm95UmVzdWx0LFxuICBJbmJveFBsYWNlbWVudHNSZXN1bHQsXG4gIEluYm94UGxhY2VtZW50c1Jlc3VsdEFQSVJlc3BvbnNlLFxuICBJbmJveFBsYWNlbWVudHNSZXN1bHRBUElTaGFwZSxcbiAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0V2l0aFN0YXR1cyxcbiAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0FwaVF1ZXJ5LFxuICBJbmJveFBsYWNlbWVudHNSZXN1bHRzRGF0ZXMsXG4gIEluYm94UGxhY2VtZW50c1Jlc3VsdHNMaXN0LFxuICBJbmJveFBsYWNlbWVudHNSZXN1bHRzTGlzdEFQSVJlc3BvbnNlLFxuICBJbmJveFBsYWNlbWVudHNSZXN1bHRzUXVlcnlcbn0gZnJvbSAnLi4vLi4vLi4vVHlwZXMvSW5ib3hQbGFjZW1lbnRzJztcblxuaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi4vLi4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50XG4gIGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxJbmJveFBsYWNlbWVudHNSZXN1bHRzTGlzdD5cbiAgaW1wbGVtZW50cyBJSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHB1YmxpYyBhdHRyaWJ1dGVzOiBJSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudDtcbiAgcHVibGljIGZpbHRlcnM6IElJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50O1xuICBwdWJsaWMgc2hhcmluZzogSUlQUlNoYXJpbmdDbGllbnQ7XG4gIHByaXZhdGUgbG9nZ2VyOiBJTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgYXR0cmlidXRlczogSUluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQsXG4gICAgZmlsdGVyczogSUluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQsXG4gICAgc2hhcmluZzogSUlQUlNoYXJpbmdDbGllbnQsXG4gICAgbG9nZ2VyOiBJTG9nZ2VyID0gY29uc29sZVxuICApIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XG4gICAgdGhpcy5maWx0ZXJzID0gZmlsdGVycztcbiAgICB0aGlzLnNoYXJpbmcgPSBzaGFyaW5nO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0RGF0ZVRvVVRDKGtleTpzdHJpbmcsIGlucHV0RGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgLypcbiAgICAgIEJlY2F1c2UgXCJuZXcgRGF0ZSgnMjAyMi0xMi0yNVQwMDowMDowMC4wMDBaJylcIiBiZWNvbWVzIFwiU3VuIERlYyAyNSAyMDIyIDAyOjAwOjAwIEdNVCswMjAwXCJcbiAgICAgIChwbHVzIDIgaG91cnMgZnJvbSB0aGUgdGltZXpvbmUpXG4gICAgICBhbmQgYmVjYXVzZSBmb3IgQVBJLCB3ZSBuZWVkIHRvIHByb3ZpZGUgdGhlIGRhdGUgaW4gdGhlIGV4cGVjdGVkIGZvcm1hdFxuICAgICAgZXg6ICdUaHUsIDEzIE9jdCAyMDExIDE4OjAyOjAwICswMDAwJy5cbiAgICAgIEhlcmUgd2UgdHJ5IGF1dG8tY29udmVydCB0aGVtIHRvIFVUQ1xuICAgICovXG4gICAgdGhpcy5sb2dnZXIud2FybihgRGF0ZTogXCIke2lucHV0RGF0ZX1cIiB3YXMgYXV0by1jb252ZXJ0ZWQgdG8gVVRDIHRpbWUgem9uZS5cblZhbHVlIFwiJHtpbnB1dERhdGUudG9JU09TdHJpbmcoKX1cIiB3aWxsIGJlIHVzZWQgZm9yIHJlcXVlc3QuXG5Db25zaWRlciB1c2luZyBzdHJpbmcgdHlwZSBmb3IgcHJvcGVydHkgXCIke2tleX1cIiB0byBhdm9pZCBhdXRvLWNvbnZlcnRpbmdgKTtcbiAgICByZXR1cm4gaW5wdXREYXRlLnRvSVNPU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVRdWVyeURhdGEoXG4gICAgcXVlcnlEYXRhOiBJbmJveFBsYWNlbWVudHNSZXN1bHRzUXVlcnlcbiAgKTogSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0FwaVF1ZXJ5IHtcbiAgICBjb25zdCBwcm9wc0ZvclJlcGxhY2VtZW50ID0gcXVlcnlEYXRhIGFzIEluYm94UGxhY2VtZW50c1Jlc3VsdHNEYXRlcztcbiAgICBjb25zdCByZXBsYWNlZFByb3BzID0gT2JqZWN0LmtleXMocHJvcHNGb3JSZXBsYWNlbWVudCkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgY29uc3QgcHJvcCA9IGtleSBhcyBrZXlvZiBJbmJveFBsYWNlbWVudHNSZXN1bHRzRGF0ZXM7XG4gICAgICBpZiAoISFwcm9wc0ZvclJlcGxhY2VtZW50W3Byb3BdICYmIHR5cGVvZiBwcm9wc0ZvclJlcGxhY2VtZW50W3Byb3BdID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5RGF0YVtwcm9wXSBhcyBEYXRlO1xuICAgICAgICBhY2NbcHJvcF0gPSB0aGlzLmNvbnZlcnREYXRlVG9VVEMocHJvcCwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8a2V5b2YgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0RhdGVzLCBzdHJpbmc+KTtcblxuICAgIGNvbnN0IHJlc3VsdDogSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0FwaVF1ZXJ5ID0ge1xuICAgICAgLi4ucXVlcnlEYXRhLFxuICAgICAgLi4ucmVwbGFjZWRQcm9wc1xuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZUluYm94UGxhY2VtZW50c1Jlc3VsdChkYXRhOiBJbmJveFBsYWNlbWVudHNSZXN1bHRBUElTaGFwZSk6IEluYm94UGxhY2VtZW50c1Jlc3VsdCB7XG4gICAgbGV0IGJveCA9IHt9IGFzIEluYm94UGxhY2VtZW50c0JveDtcblxuICAgIGNvbnN0IGhhbmRsZWRTZWVkTGlzdERhdGVzID0ge1xuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KSxcbiAgICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKGRhdGEudXBkYXRlZF9hdCksXG4gICAgICBzaGFyaW5nX2V4cGlyZXNfYXQ6IG5ldyBEYXRlKGRhdGEuc2hhcmluZ19leHBpcmVzX2F0KSxcbiAgICB9O1xuXG4gICAgaWYgKGRhdGEuQm94KSB7XG4gICAgICBib3ggPSB7XG4gICAgICAgIC4uLmRhdGEuQm94LFxuICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShkYXRhLkJveC5jcmVhdGVkX2F0KSxcbiAgICAgICAgdXBkYXRlZF9hdDogbmV3IERhdGUoZGF0YS5Cb3gudXBkYXRlZF9hdCksXG4gICAgICAgIGxhc3RfcmVzdWx0X2F0OiBuZXcgRGF0ZShkYXRhLkJveC5sYXN0X3Jlc3VsdF9hdCksXG4gICAgICB9O1xuICAgICAgZGVsZXRlIChib3ggYXMge0lEPzogc3RyaW5nfSkuSUQ7XG4gICAgfVxuXG4gICAgY29uc3QgaW5ib3hQbGFjZW1lbnRzUmVzdWx0OiBJbmJveFBsYWNlbWVudHNSZXN1bHQgPSB7XG4gICAgICAuLi5kYXRhLFxuICAgICAgQm94OiBib3gsXG4gICAgICAuLi5oYW5kbGVkU2VlZExpc3REYXRlcyxcbiAgICAgIGlkOiBkYXRhLklkLFxuICAgIH07XG5cbiAgICBkZWxldGUgKGluYm94UGxhY2VtZW50c1Jlc3VsdCBhcyB7SUQ/OiBzdHJpbmd9KS5JRDtcblxuICAgIHJldHVybiBpbmJveFBsYWNlbWVudHNSZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KHJlc3BvbnNlOiBJbmJveFBsYWNlbWVudHNSZXN1bHRzTGlzdEFQSVJlc3BvbnNlKTogSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0xpc3Qge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBJbmJveFBsYWNlbWVudHNSZXN1bHRzTGlzdDtcblxuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcChcbiAgICAgIChpdGVtOiBJbmJveFBsYWNlbWVudHNSZXN1bHRBUElTaGFwZSlcbiAgICAgICAgOiBJbmJveFBsYWNlbWVudHNSZXN1bHQgPT4gdGhpcy5wcmVwYXJlSW5ib3hQbGFjZW1lbnRzUmVzdWx0KGl0ZW0pXG4gICAgKTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdhZGRyZXNzJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxpc3QocXVlcnk6IEluYm94UGxhY2VtZW50c1Jlc3VsdHNRdWVyeSk6IFByb21pc2U8SW5ib3hQbGFjZW1lbnRzUmVzdWx0c0xpc3Q+IHtcbiAgICBjb25zdCBxdWVyeURhdGEgPSB0aGlzLnByZXBhcmVRdWVyeURhdGEocXVlcnkpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCgnL3Y0L2luYm94L3Jlc3VsdHMnLCBxdWVyeURhdGEpIGFzIEluYm94UGxhY2VtZW50c1Jlc3VsdHNMaXN0QVBJUmVzcG9uc2U7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VMaXN0KHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGdldChpZDogc3RyaW5nKTogUHJvbWlzZTxJbmJveFBsYWNlbWVudHNSZXN1bHRXaXRoU3RhdHVzPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IEluYm94UGxhY2VtZW50c1Jlc3VsdEFQSVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldChgL3Y0L2luYm94L3Jlc3VsdHMvJHtpZH1gKSBhcyBJbmJveFBsYWNlbWVudHNSZXN1bHRBUElSZXNwb25zZTtcbiAgICBjb25zdCBpbmJveFBsYWNlbWVudFJlc3VsdDogSW5ib3hQbGFjZW1lbnRzUmVzdWx0ID0gdGhpcy5wcmVwYXJlSW5ib3hQbGFjZW1lbnRzUmVzdWx0KFxuICAgICAgcmVzcG9uc2UuYm9keS5yZXN1bHRcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIGluYm94UGxhY2VtZW50UmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3koaWQ6IHN0cmluZykgOiBQcm9taXNlPEluYm94UGxhY2VtZW50c0Rlc3Ryb3lSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5kZWxldGUoYC92NC9pbmJveC9yZXN1bHRzLyR7aWR9YCkgYXMgSW5ib3hQbGFjZW1lbnRzRGVzdHJveUFQSVJlc3BvbnNlO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0UmVzdWx0QnlTaGFyZUlkKHNoYXJlSWQ6IHN0cmluZyk6IFByb21pc2U8SW5ib3hQbGFjZW1lbnRzUmVzdWx0V2l0aFN0YXR1cz4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldChgL3Y0L2luYm94L3NoYXJpbmcvcHVibGljLyR7c2hhcmVJZH1gKSBhcyBJbmJveFBsYWNlbWVudHNSZXN1bHRBUElSZXNwb25zZTtcbiAgICBjb25zdCBpbmJveFBsYWNlbWVudFJlc3VsdDogSW5ib3hQbGFjZW1lbnRzUmVzdWx0ID0gdGhpcy5wcmVwYXJlSW5ib3hQbGFjZW1lbnRzUmVzdWx0KFxuICAgICAgcmVzcG9uc2UuYm9keS5yZXN1bHRcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIGluYm94UGxhY2VtZW50UmVzdWx0XG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSUlQUlNoYXJpbmdDbGllbnQgfSBmcm9tICcuLi8uLi8uLi9JbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gIElQUlNoYXJpbmdBUElSZXNwb25zZSxcbiAgSVBSU2hhcmluZ0FwaVNoYXBlLFxuICBJUFJTaGFyaW5nUmVzdWx0LFxuICBJUFJTaGFyaW5nVXBkYXRlQVBJUmVzcG9uc2UsXG4gIElQUlNoYXJpbmdVcGRhdGVEYXRhLFxuICBJUFJTaGFyaW5nVXBkYXRlUmVzdWx0XG59IGZyb20gJy4uLy4uLy4uL1R5cGVzL0luYm94UGxhY2VtZW50cyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi8uLi9jb21tb24vUmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElQUlNoYXJpbmdDbGllbnQgaW1wbGVtZW50cyBJSVBSU2hhcmluZ0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVxdWVzdDogUmVxdWVzdCxcbiAgKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZUluYm94UGxhY2VtZW50c1Jlc3VsdFNoYXJpbmcoZGF0YTogSVBSU2hhcmluZ0FwaVNoYXBlKTogSVBSU2hhcmluZ1Jlc3VsdCB7XG4gICAgY29uc3QgaGFuZGxlZFNlZWRMaXN0RGF0ZXMgPSB7XG4gICAgICBleHBpcmVzX2F0OiBuZXcgRGF0ZShkYXRhLmV4cGlyZXNfYXQpLFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQ6IElQUlNoYXJpbmdSZXN1bHQgPSB7XG4gICAgICAuLi5kYXRhLFxuICAgICAgLi4uaGFuZGxlZFNlZWRMaXN0RGF0ZXNcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIGdldChpZDogc3RyaW5nKTogUHJvbWlzZTxJUFJTaGFyaW5nUmVzdWx0ICYge3N0YXR1czogbnVtYmVyfT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldChgL3Y0L2luYm94L3NoYXJpbmcvJHtpZH1gKSBhcyBJUFJTaGFyaW5nQVBJUmVzcG9uc2U7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wcmVwYXJlSW5ib3hQbGFjZW1lbnRzUmVzdWx0U2hhcmluZyhyZXNwb25zZS5ib2R5LnNoYXJpbmcpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3VsdFxuICAgIH07XG4gIH1cblxuICBhc3luYyB1cGRhdGUoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBkYXRhOiBJUFJTaGFyaW5nVXBkYXRlRGF0YVxuICApOiBQcm9taXNlPElQUlNoYXJpbmdVcGRhdGVSZXN1bHQgJiB7IHN0YXR1czogbnVtYmVyIH0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wdXQoYC92NC9pbmJveC9zaGFyaW5nLyR7aWR9YCwge30sIHsgcXVlcnk6IGBlbmFibGVkPSR7ZGF0YS5lbmFibGVkfWAgfSkgYXMgSVBSU2hhcmluZ1VwZGF0ZUFQSVJlc3BvbnNlO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucHJlcGFyZUluYm94UGxhY2VtZW50c1Jlc3VsdFNoYXJpbmcocmVzcG9uc2UuYm9keS5zaGFyaW5nKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzdWx0LFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICB9O1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBJTG9nZ2VyLFxuICBJSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudCxcbiAgSVNlZWRzTGlzdHNDbGllbnQsXG4gIElJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50XG59IGZyb20gJy4uLy4uLy4uL0ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgU2VlZExpc3QsXG4gIFNlZWRMaXN0QVBJU2hhcGUsXG4gIFNlZWRzTGlzdHNBUElRdWVyeSxcbiAgU2VlZHNMaXN0c0FQSVF1ZXJ5RGF0ZXMsXG4gIFNlZWRzTGlzdHNBUElSZXNwb25zZSxcbiAgU2VlZHNMaXN0c0NyZWF0aW5nRGF0YSxcbiAgU2VlZHNMaXN0c1F1ZXJ5LFxuICBTZWVkc0xpc3RzUmVzdWx0LFxuICBTZWVkLFxuICBTZWVkQVBJU2hhcGUsXG4gIFNlZWRzTGlzdHNEZXN0cm95QXBpUmVzcG9uc2UsXG4gIFNlZWRzTGlzdHNVcGRhdGluZ0RhdGEsXG4gIFNlZWRMaXN0UmVzdWx0LFxuICBTZWVkTGlzdEdldEFQSVJlc3BvbnNlLFxuICBTZWVkTGlzdEFQSVJlc3BvbnNlXG59IGZyb20gJy4uLy4uLy4uL1R5cGVzL0luYm94UGxhY2VtZW50cyc7XG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuLi8uLi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi8uLi9jb21tb24vUmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlZWRzTGlzdHNDbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPFNlZWRzTGlzdHNSZXN1bHQ+XG4gIGltcGxlbWVudHMgSVNlZWRzTGlzdHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwdWJsaWMgYXR0cmlidXRlczogSUluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQ7XG4gIHB1YmxpYyBmaWx0ZXJzOiBJSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudDtcbiAgcHJpdmF0ZSBsb2dnZXI6IElMb2dnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVxdWVzdDogUmVxdWVzdCxcbiAgICBhdHRyaWJ1dGVzOiBJSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudCxcbiAgICBmaWx0ZXJzOiBJSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCxcbiAgICBsb2dnZXI6IElMb2dnZXIgPSBjb25zb2xlXG4gICkge1xuICAgIHN1cGVyKHJlcXVlc3QpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcztcbiAgICB0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0RGF0ZVRvVVRDKGtleTpzdHJpbmcsIGlucHV0RGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgLypcbiAgICAgIEJlY2F1c2UgXCJuZXcgRGF0ZSgnMjAyMi0xMi0yNVQwMDowMDowMC4wMDBaJylcIiBiZWNvbWVzIFwiU3VuIERlYyAyNSAyMDIyIDAyOjAwOjAwIEdNVCswMjAwXCJcbiAgICAgIChwbHVzIDIgaG91cnMgZnJvbSB0aGUgdGltZXpvbmUpXG4gICAgICBhbmQgYmVjYXVzZSBmb3IgQVBJLCB3ZSBuZWVkIHRvIHByb3ZpZGUgdGhlIGRhdGUgaW4gdGhlIGV4cGVjdGVkIGZvcm1hdFxuICAgICAgZXg6ICdUaHUsIDEzIE9jdCAyMDExIDE4OjAyOjAwICswMDAwJy5cbiAgICAgIEhlcmUgd2UgdHJ5IGF1dG8tY29udmVydCB0aGVtIHRvIFVUQ1xuICAgICovXG4gICAgdGhpcy5sb2dnZXIud2FybihgRGF0ZTogXCIke2lucHV0RGF0ZX1cIiB3YXMgYXV0by1jb252ZXJ0ZWQgdG8gVVRDIHRpbWUgem9uZS5cblZhbHVlIFwiJHtpbnB1dERhdGUudG9JU09TdHJpbmcoKX1cIiB3aWxsIGJlIHVzZWQgZm9yIHJlcXVlc3QuXG5Db25zaWRlciB1c2luZyBzdHJpbmcgdHlwZSBmb3IgcHJvcGVydHkgXCIke2tleX1cIiB0byBhdm9pZCBhdXRvLWNvbnZlcnRpbmdgKTtcbiAgICByZXR1cm4gaW5wdXREYXRlLnRvSVNPU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVRdWVyeURhdGEocXVlcnlEYXRhOiBTZWVkc0xpc3RzUXVlcnkpIDogU2VlZHNMaXN0c0FQSVF1ZXJ5IHtcbiAgICBjb25zdCBwcm9wc0ZvclJlcGxhY2VtZW50ID0gcXVlcnlEYXRhIGFzIFNlZWRzTGlzdHNBUElRdWVyeURhdGVzO1xuICAgIGNvbnN0IHJlcGxhY2VkUHJvcHMgPSBPYmplY3Qua2V5cyhwcm9wc0ZvclJlcGxhY2VtZW50KS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBjb25zdCBwcm9wID0ga2V5IGFzIGtleW9mIFNlZWRzTGlzdHNBUElRdWVyeURhdGVzO1xuICAgICAgaWYgKCEhcHJvcHNGb3JSZXBsYWNlbWVudFtwcm9wXSAmJiB0eXBlb2YgcHJvcHNGb3JSZXBsYWNlbWVudFtwcm9wXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBxdWVyeURhdGFbcHJvcF0gYXMgRGF0ZTtcbiAgICAgICAgYWNjW3Byb3BdID0gdGhpcy5jb252ZXJ0RGF0ZVRvVVRDKHByb3AsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPGtleW9mIFNlZWRzTGlzdHNBUElRdWVyeURhdGVzLCBzdHJpbmc+KTtcblxuICAgIGNvbnN0IHJlc3VsdDogU2VlZHNMaXN0c0FQSVF1ZXJ5ID0ge1xuICAgICAgLi4ucXVlcnlEYXRhLFxuICAgICAgLi4ucmVwbGFjZWRQcm9wc1xuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVJlc3VsdChkYXRhOiBTZWVkTGlzdEFQSVJlc3BvbnNlKTogU2VlZExpc3RSZXN1bHQge1xuICAgIGxldCByZXN1bHQgPSB7fSBhcyBTZWVkTGlzdFJlc3VsdDtcbiAgICBjb25zdCBzZWVkTGlzdCA9IHRoaXMucHJlcGFyZVNlZWRMaXN0KGRhdGEuYm9keSk7XG4gICAgcmVzdWx0ID0ge1xuICAgICAgLi4uc2VlZExpc3QsXG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlU2VlZExpc3QoZGF0YTogU2VlZExpc3RBUElTaGFwZSk6IFNlZWRMaXN0IHtcbiAgICBsZXQgc2VlZHM6IFNlZWRbXSB8IG51bGw7XG5cbiAgICBjb25zdCBoYW5kbGVkU2VlZExpc3REYXRlcyA9IHtcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCksXG4gICAgICB1cGRhdGVkX2F0OiBuZXcgRGF0ZShkYXRhLnVwZGF0ZWRfYXQpLFxuICAgICAgbGFzdF9yZXN1bHRfYXQ6IG5ldyBEYXRlKGRhdGEubGFzdF9yZXN1bHRfYXQpLFxuICAgIH07XG5cbiAgICBpZiAoZGF0YS5TZWVkcykge1xuICAgICAgc2VlZHMgPSBkYXRhLlNlZWRzLm1hcCgoc2VlZEl0ZW06IFNlZWRBUElTaGFwZSk6IFNlZWQgPT4ge1xuICAgICAgICBsZXQgc2VlZCA9IHt9IGFzIFNlZWQ7XG4gICAgICAgIGNvbnN0IGhhbmRsZWRTZWVkRGF0ZXMgPSB7XG4gICAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoc2VlZEl0ZW0uY3JlYXRlZF9hdCksXG4gICAgICAgICAgdXBkYXRlZF9hdDogbmV3IERhdGUoc2VlZEl0ZW0udXBkYXRlZF9hdCksXG4gICAgICAgICAgbWF4X2VtYWlsX2NvdW50X2hpdF9hdDogbmV3IERhdGUoc2VlZEl0ZW0ubWF4X2VtYWlsX2NvdW50X2hpdF9hdCksXG4gICAgICAgICAgbGFzdF9zZW50X3RvX2F0OiBuZXcgRGF0ZShzZWVkSXRlbS5sYXN0X3NlbnRfdG9fYXQpLFxuICAgICAgICAgIGxhc3RfZGVsaXZlcmVkX2F0OiBuZXcgRGF0ZShzZWVkSXRlbS5sYXN0X2RlbGl2ZXJlZF9hdCksXG4gICAgICAgIH07XG4gICAgICAgIHNlZWQgPSB7XG4gICAgICAgICAgLi4uc2VlZEl0ZW0sXG4gICAgICAgICAgLi4uaGFuZGxlZFNlZWREYXRlc1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc2VlZDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWVkcyA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VlZExpc3Q6IFNlZWRMaXN0ID0ge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIFNlZWRzOiBzZWVkcyxcbiAgICAgIC4uLmhhbmRsZWRTZWVkTGlzdERhdGVzXG4gICAgfTtcblxuICAgIGRlbGV0ZSAoc2VlZExpc3QgYXMge0lkPzogc3RyaW5nfSkuSWQ7XG5cbiAgICByZXR1cm4gc2VlZExpc3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KHJlc3BvbnNlOiBTZWVkc0xpc3RzQVBJUmVzcG9uc2UpOiBTZWVkc0xpc3RzUmVzdWx0IHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgaXRlbXM6IFtdXG4gICAgfSBhcyBTZWVkc0xpc3RzUmVzdWx0O1xuXG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXM/Lm1hcChcbiAgICAgIChpdGVtOiBTZWVkTGlzdEFQSVNoYXBlKTogU2VlZExpc3QgPT4gdGhpcy5wcmVwYXJlU2VlZExpc3QoaXRlbSlcbiAgICApO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ2FkZHJlc3MnKTtcbiAgICBkYXRhLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdChxdWVyeTogU2VlZHNMaXN0c1F1ZXJ5KTogUHJvbWlzZTxTZWVkc0xpc3RzUmVzdWx0PiB7XG4gICAgY29uc3QgcXVlcnlEYXRhID0gdGhpcy5wcmVwYXJlUXVlcnlEYXRhKHF1ZXJ5KTtcbiAgICBjb25zdCByZXNwb25zZTogU2VlZHNMaXN0c0FQSVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCgnL3Y0L2luYm94L3NlZWRsaXN0cycsIHF1ZXJ5RGF0YSkgYXMgU2VlZHNMaXN0c0FQSVJlc3BvbnNlO1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLnBhcnNlTGlzdChyZXNwb25zZSksXG4gICAgICBzdGF0dXM6IDIwMFxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXQoaWQ6IHN0cmluZyk6IFByb21pc2U8U2VlZExpc3RSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZTogU2VlZExpc3RHZXRBUElSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92NC9pbmJveC9zZWVkbGlzdHMvJHtpZH1gKSBhcyBTZWVkTGlzdEdldEFQSVJlc3BvbnNlO1xuICAgIGNvbnN0IHVwZGF0ZWRTZWVkc0xpc3QgPSB0aGlzLnByZXBhcmVTZWVkTGlzdChyZXNwb25zZS5ib2R5LnNlZWRsaXN0KTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udXBkYXRlZFNlZWRzTGlzdCxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShkYXRhOiBTZWVkc0xpc3RzQ3JlYXRpbmdEYXRhKTogUHJvbWlzZTxTZWVkTGlzdFJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92NC9pbmJveC9zZWVkbGlzdHMnLCBkYXRhKSBhcyBTZWVkTGlzdEFQSVJlc3BvbnNlO1xuICAgIHJldHVybiB0aGlzLnByZXBhcmVSZXN1bHQocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKGlkOiBzdHJpbmcsIGRhdGE6IFNlZWRzTGlzdHNVcGRhdGluZ0RhdGEpOiBQcm9taXNlPFNlZWRMaXN0UmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QucHV0KGAvdjQvaW5ib3gvc2VlZGxpc3RzLyR7aWR9YCwgZGF0YSkgYXMgU2VlZExpc3RBUElSZXNwb25zZTtcbiAgICByZXR1cm4gdGhpcy5wcmVwYXJlUmVzdWx0KHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3koaWQ6IHN0cmluZyk6IFByb21pc2U8U2VlZHNMaXN0c0Rlc3Ryb3lBcGlSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjQvaW5ib3gvc2VlZGxpc3RzLyR7aWR9YCkgYXMgdW5rbm93biBhcyBTZWVkc0xpc3RzRGVzdHJveUFwaVJlc3BvbnNlO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJSW5ib3hQbGFjZW1lbnRzQ2xpZW50LCBJSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSVNlZWRzTGlzdHNDbGllbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL0luYm94UGxhY2VtZW50cy9TZWVkc0xpc3RzL1NlZWRzTGlzdHNDbGllbnQnO1xuaW1wb3J0IHsgSUluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvSW5ib3hQbGFjZW1lbnRzL3Byb3ZpZGVycy9JbmJveFBsYWNlbWVudHNQcm92aWRlcnMnO1xuaW1wb3J0IHsgSW5ib3hQbGFjZW1lbnRzRGF0YSwgSW5ib3hQbGFjZW1lbnRzVGVzdFJlc3VsdCwgSW5ib3hQbGFjZW1lbnRzVGVzdFJlc3VsdEFQSVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vVHlwZXMvSW5ib3hQbGFjZW1lbnRzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5ib3hQbGFjZW1lbnRzQ2xpZW50IGltcGxlbWVudHMgSUluYm94UGxhY2VtZW50c0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHB1YmxpYyBzZWVkc0xpc3RzOiBJU2VlZHNMaXN0c0NsaWVudDtcbiAgcHVibGljIHJlc3VsdHM6IElJbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50O1xuICBwdWJsaWMgcHJvdmlkZXJzOiBJSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgc2VlZHNMaXN0c0NsaWVudDogSVNlZWRzTGlzdHNDbGllbnQsXG4gICAgcmVzdWx0czogSUluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQsXG4gICAgcHJvdmlkZXJzOiBJSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50XG4gICkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5zZWVkc0xpc3RzID0gc2VlZHNMaXN0c0NsaWVudDtcbiAgICB0aGlzLnNlZWRzTGlzdHMgPSBzZWVkc0xpc3RzQ2xpZW50O1xuICAgIHRoaXMucmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgdGhpcy5wcm92aWRlcnMgPSBwcm92aWRlcnM7XG4gIH1cblxuICBhc3luYyBydW5UZXN0KGRhdGE6IEluYm94UGxhY2VtZW50c0RhdGEpOiBQcm9taXNlPEluYm94UGxhY2VtZW50c1Rlc3RSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0KCcvdjQvaW5ib3gvdGVzdHMnLCBkYXRhKSBhcyBJbmJveFBsYWNlbWVudHNUZXN0UmVzdWx0QVBJUmVzcG9uc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHksXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c1xuICAgIH07XG4gIH1cbn1cbiIsImltcG9ydCB7IElJbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnQgfSBmcm9tICcuLi8uLi8uLi9JbnRlcmZhY2VzL0luYm94UGxhY2VtZW50cy9wcm92aWRlcnMvSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzJztcbmltcG9ydCB7XG4gIEluYm94UGxhY2VtZW50c1Byb3ZpZGVyLFxuICBJbmJveFBsYWNlbWVudHNQcm92aWRlckFQSVNoYXBlLFxuICBJbmJveFBsYWNlbWVudHNQcm92aWRlcnNMaXN0LFxuICBJbmJveFBsYWNlbWVudHNQcm92aWRlcnNMaXN0QVBJUmVzcG9uc2Vcbn0gZnJvbSAnLi4vLi4vLi4vVHlwZXMvSW5ib3hQbGFjZW1lbnRzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uLy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50IGltcGxlbWVudHMgSUluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHBhdGg6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXF1ZXN0OiBSZXF1ZXN0LFxuICApIHtcbiAgICB0aGlzLnBhdGggPSAnL3Y0L2luYm94L3Byb3ZpZGVycyc7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VMaXN0KFxuICAgIHJlc3BvbnNlOiBJbmJveFBsYWNlbWVudHNQcm92aWRlcnNMaXN0QVBJUmVzcG9uc2VcbiAgKTogSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzTGlzdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0xpc3Q7XG5cbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoXG4gICAgICAoaXRlbTogSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJBUElTaGFwZSk6IEluYm94UGxhY2VtZW50c1Byb3ZpZGVyID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlZFByb3ZpZGVyRGF0ZXMgPSB7XG4gICAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoaXRlbS5jcmVhdGVkX2F0KSxcbiAgICAgICAgICB1cGRhdGVkX2F0OiBuZXcgRGF0ZShpdGVtLnVwZGF0ZWRfYXQpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQ6IEluYm94UGxhY2VtZW50c1Byb3ZpZGVyID0ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgLi4uaGFuZGxlZFByb3ZpZGVyRGF0ZXNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxpc3QoKTogUHJvbWlzZTxJbmJveFBsYWNlbWVudHNQcm92aWRlcnNMaXN0PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KHRoaXMucGF0aCkgYXMgSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzTGlzdEFQSVJlc3BvbnNlO1xuICAgIHJldHVybiB0aGlzLnBhcnNlTGlzdChyZXNwb25zZSk7XG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQgeyBNYWlsZ3VuQ2xpZW50T3B0aW9ucywgSW5wdXRGb3JtRGF0YSwgUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuLi9UeXBlcyc7XG5cbmltcG9ydCBEb21haW5zQ2xpZW50IGZyb20gJy4vRG9tYWlucy9kb21haW5zQ2xpZW50JztcbmltcG9ydCBFdmVudENsaWVudCBmcm9tICcuL0V2ZW50cyc7XG5pbXBvcnQgU3RhdHNDbGllbnQgZnJvbSAnLi9TdGF0cy9TdGF0c0NsaWVudCc7XG5pbXBvcnQgU3VwcHJlc3Npb25DbGllbnQgZnJvbSAnLi9TdXBwcmVzc2lvbnMvU3VwcHJlc3Npb25zQ2xpZW50JztcbmltcG9ydCBXZWJob29rc0NsaWVudCBmcm9tICcuL1dlYmhvb2tzJztcbmltcG9ydCBNZXNzYWdlc0NsaWVudCBmcm9tICcuL01lc3NhZ2VzJztcbmltcG9ydCBSb3V0ZXNDbGllbnQgZnJvbSAnLi9Sb3V0ZXMnO1xuaW1wb3J0IFZhbGlkYXRlQ2xpZW50IGZyb20gJy4vVmFsaWRhdGlvbnMvdmFsaWRhdGUnO1xuaW1wb3J0IElwc0NsaWVudCBmcm9tICcuL0lQcyc7XG5pbXBvcnQgSXBQb29sc0NsaWVudCBmcm9tICcuL0lQUG9vbHMnO1xuaW1wb3J0IE1haWxpbmdMaXN0c0NsaWVudCBmcm9tICcuL01haWxpbmdMaXN0cy9tYWlsaW5nTGlzdHMnO1xuaW1wb3J0IE1haWxMaXN0c01lbWJlcnMgZnJvbSAnLi9NYWlsaW5nTGlzdHMvbWFpbExpc3RNZW1iZXJzJztcbmltcG9ydCBEb21haW5DcmVkZW50aWFsc0NsaWVudCBmcm9tICcuL0RvbWFpbnMvZG9tYWluc0NyZWRlbnRpYWxzJztcbmltcG9ydCBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQgZnJvbSAnLi9WYWxpZGF0aW9ucy9tdWx0aXBsZVZhbGlkYXRpb24nO1xuaW1wb3J0IERvbWFpblRlbXBsYXRlc0NsaWVudCBmcm9tICcuL0RvbWFpbnMvZG9tYWluc1RlbXBsYXRlcyc7XG5pbXBvcnQgRG9tYWluVGFnc0NsaWVudCBmcm9tICcuL0RvbWFpbnMvZG9tYWluc1RhZ3MnO1xuaW1wb3J0IFN1YmFjY291bnRzQ2xpZW50IGZyb20gJy4vU3ViYWNjb3VudHMnO1xuXG5pbXBvcnQge1xuICBJRG9tYWluc0NsaWVudCxcbiAgSVdlYkhvb2tzQ2xpZW50LFxuICBJTWFpbGd1bkNsaWVudCxcbiAgSU1haWxpbmdMaXN0c0NsaWVudCxcbiAgSUV2ZW50Q2xpZW50LFxuICBJU3RhdHNDbGllbnQsXG4gIElTdXBwcmVzc2lvbkNsaWVudCxcbiAgSU1lc3NhZ2VzQ2xpZW50LFxuICBJUm91dGVzQ2xpZW50LFxuICBJVmFsaWRhdGlvbkNsaWVudCxcbiAgSUlQc0NsaWVudCxcbiAgSUlQUG9vbHNDbGllbnQsXG4gIElTdWJhY2NvdW50c0NsaWVudCxcbiAgSUluYm94UGxhY2VtZW50c0NsaWVudCxcbn0gZnJvbSAnLi4vSW50ZXJmYWNlcyc7XG5pbXBvcnQgU2VlZHNMaXN0c0NsaWVudCBmcm9tICcuL0luYm94UGxhY2VtZW50cy9TZWVkc0xpc3RzL1NlZWRzTGlzdHNDbGllbnQnO1xuaW1wb3J0IEluYm94UGxhY2VtZW50c0NsaWVudCBmcm9tICcuL0luYm94UGxhY2VtZW50cy9pbmJveFBsYWNlbWVudHMnO1xuaW1wb3J0IEluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQgZnJvbSAnLi9JbmJveFBsYWNlbWVudHMvUmVzdWx0cy9JbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50JztcbmltcG9ydCBJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50IGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzL0F0dHJpYnV0ZXNDbGllbnQnO1xuaW1wb3J0IEluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQgZnJvbSAnLi9JbmJveFBsYWNlbWVudHMvRmlsdGVyc0NsaWVudCc7XG5pbXBvcnQgSVBSU2hhcmluZ0NsaWVudCBmcm9tICcuL0luYm94UGxhY2VtZW50cy9SZXN1bHRzL0luYm94UGxhY2VtZW50c1Jlc3VsdHNTaGFyaW5nQ2xpZW50JztcbmltcG9ydCBJbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnQgZnJvbSAnLi9JbmJveFBsYWNlbWVudHMvcHJvdmlkZXJzL0luYm94UGxhY2VtZW50c1Byb3ZpZGVycyc7XG5pbXBvcnQgTWV0cmljc0NsaWVudCBmcm9tICcuL01ldHJpY3MvTWV0cmljc0NsaWVudCc7XG5pbXBvcnQgeyBJTWV0cmljc0NsaWVudCB9IGZyb20gJy4uL0ludGVyZmFjZXMvTWV0cmljcy9NZXRyaWNzQ2xpZW50JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFpbGd1bkNsaWVudCBpbXBsZW1lbnRzIElNYWlsZ3VuQ2xpZW50IHtcbiAgcHJpdmF0ZSByZXF1ZXN0O1xuXG4gIHB1YmxpYyBkb21haW5zOiBJRG9tYWluc0NsaWVudDtcbiAgcHVibGljIHdlYmhvb2tzOiBJV2ViSG9va3NDbGllbnQ7XG4gIHB1YmxpYyBldmVudHM6IElFdmVudENsaWVudDtcbiAgcHVibGljIHN0YXRzOiBJU3RhdHNDbGllbnQ7XG4gIHB1YmxpYyBtZXRyaWNzOiBJTWV0cmljc0NsaWVudDtcbiAgcHVibGljIHN1cHByZXNzaW9uczogSVN1cHByZXNzaW9uQ2xpZW50O1xuICBwdWJsaWMgbWVzc2FnZXM6IElNZXNzYWdlc0NsaWVudDtcbiAgcHVibGljIHJvdXRlczogSVJvdXRlc0NsaWVudDtcbiAgcHVibGljIHZhbGlkYXRlOiBJVmFsaWRhdGlvbkNsaWVudDtcbiAgcHVibGljIGlwczogSUlQc0NsaWVudDtcbiAgcHVibGljIGlwX3Bvb2xzOiBJSVBQb29sc0NsaWVudDtcbiAgcHVibGljIGxpc3RzOiBJTWFpbGluZ0xpc3RzQ2xpZW50O1xuICBwdWJsaWMgc3ViYWNjb3VudHM6IElTdWJhY2NvdW50c0NsaWVudDtcbiAgcHVibGljIGluYm94UGxhY2VtZW50czogSUluYm94UGxhY2VtZW50c0NsaWVudDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNYWlsZ3VuQ2xpZW50T3B0aW9ucywgZm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICBjb25zdCBjb25maWc6IFJlcXVlc3RPcHRpb25zID0geyAuLi5vcHRpb25zIH0gYXMgUmVxdWVzdE9wdGlvbnM7XG5cbiAgICBpZiAoIWNvbmZpZy51cmwpIHtcbiAgICAgIGNvbmZpZy51cmwgPSAnaHR0cHM6Ly9hcGkubWFpbGd1bi5uZXQnO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnLnVzZXJuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBcInVzZXJuYW1lXCIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy5rZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIFwia2V5XCIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgdGhpcy5yZXF1ZXN0ID0gbmV3IFJlcXVlc3QoY29uZmlnLCBmb3JtRGF0YSk7XG4gICAgY29uc3QgbWFpbExpc3RzTWVtYmVycyA9IG5ldyBNYWlsTGlzdHNNZW1iZXJzKHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQgPSBuZXcgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICBjb25zdCBkb21haW5UZW1wbGF0ZXNDbGllbnQgPSBuZXcgRG9tYWluVGVtcGxhdGVzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgZG9tYWluVGFnc0NsaWVudCA9IG5ldyBEb21haW5UYWdzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50ID0gbmV3IE11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IEluYm94UGxhY2VtZW50c1Jlc3VsdHNTaGFyaW5nQ2xpZW50ID0gbmV3IElQUlNoYXJpbmdDbGllbnQodGhpcy5yZXF1ZXN0KTtcblxuICAgIGNvbnN0IHNlZWRzTGlzdHNBdHRyaWJ1dGVzID0gbmV3IEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQodGhpcy5yZXF1ZXN0LCAnL3Y0L2luYm94L3NlZWRsaXN0cy9hJyk7XG4gICAgY29uc3QgcmVzdWx0c0F0dHJpYnV0ZXNDbGllbnQgPSBuZXcgSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudCh0aGlzLnJlcXVlc3QsICcvdjQvaW5ib3gvcmVzdWx0cy9hJyk7XG5cbiAgICBjb25zdCBzZWVkc0xpc3RzRmlsdGVyc0NsaWVudCA9IG5ldyBJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50KHRoaXMucmVxdWVzdCwgJy92NC9pbmJveC9zZWVkbGlzdHMvX2ZpbHRlcnMnKTtcbiAgICBjb25zdCByZXN1bHRzRmlsdGVyc0NsaWVudCA9IG5ldyBJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50KHRoaXMucmVxdWVzdCwgJy92NC9pbmJveC9yZXN1bHRzL19maWx0ZXJzJyk7XG5cbiAgICBjb25zdCBzZWVkc0xpc3RzQ2xpZW50ID0gbmV3IFNlZWRzTGlzdHNDbGllbnQoXG4gICAgICB0aGlzLnJlcXVlc3QsXG4gICAgICBzZWVkc0xpc3RzQXR0cmlidXRlcyxcbiAgICAgIHNlZWRzTGlzdHNGaWx0ZXJzQ2xpZW50XG4gICAgKTtcblxuICAgIGNvbnN0IGluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQgPSBuZXcgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudChcbiAgICAgIHRoaXMucmVxdWVzdCxcbiAgICAgIHJlc3VsdHNBdHRyaWJ1dGVzQ2xpZW50LFxuICAgICAgcmVzdWx0c0ZpbHRlcnNDbGllbnQsXG4gICAgICBJbmJveFBsYWNlbWVudHNSZXN1bHRzU2hhcmluZ0NsaWVudFxuICAgICk7XG5cbiAgICBjb25zdCBpbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnQgPSBuZXcgSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50KFxuICAgICAgdGhpcy5yZXF1ZXN0XG4gICAgKTtcblxuICAgIHRoaXMuZG9tYWlucyA9IG5ldyBEb21haW5zQ2xpZW50KFxuICAgICAgdGhpcy5yZXF1ZXN0LFxuICAgICAgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQsXG4gICAgICBkb21haW5UZW1wbGF0ZXNDbGllbnQsXG4gICAgICBkb21haW5UYWdzQ2xpZW50XG4gICAgKTtcbiAgICB0aGlzLndlYmhvb2tzID0gbmV3IFdlYmhvb2tzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5ldmVudHMgPSBuZXcgRXZlbnRDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLnN0YXRzID0gbmV3IFN0YXRzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5tZXRyaWNzID0gbmV3IE1ldHJpY3NDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLnN1cHByZXNzaW9ucyA9IG5ldyBTdXBwcmVzc2lvbkNsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMubWVzc2FnZXMgPSBuZXcgTWVzc2FnZXNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLnJvdXRlcyA9IG5ldyBSb3V0ZXNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmlwcyA9IG5ldyBJcHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmlwX3Bvb2xzID0gbmV3IElwUG9vbHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmxpc3RzID0gbmV3IE1haWxpbmdMaXN0c0NsaWVudCh0aGlzLnJlcXVlc3QsIG1haWxMaXN0c01lbWJlcnMpO1xuICAgIHRoaXMudmFsaWRhdGUgPSBuZXcgVmFsaWRhdGVDbGllbnQodGhpcy5yZXF1ZXN0LCBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQpO1xuICAgIHRoaXMuc3ViYWNjb3VudHMgPSBuZXcgU3ViYWNjb3VudHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmluYm94UGxhY2VtZW50cyA9IG5ldyBJbmJveFBsYWNlbWVudHNDbGllbnQoXG4gICAgICB0aGlzLnJlcXVlc3QsXG4gICAgICBzZWVkc0xpc3RzQ2xpZW50LFxuICAgICAgaW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudCxcbiAgICAgIGluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudCxcbiAgICApO1xuICB9XG5cbiAgc2V0U3ViYWNjb3VudChzdWJhY2NvdW50SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdD8uc2V0U3ViYWNjb3VudEhlYWRlcihzdWJhY2NvdW50SWQpO1xuICB9XG5cbiAgcmVzZXRTdWJhY2NvdW50KCk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdD8ucmVzZXRTdWJhY2NvdW50SGVhZGVyKCk7XG4gIH1cbn1cbiIsImltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7XG4gIE1haWxMaXN0TWVtYmVyc1F1ZXJ5LFxuICBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnMsXG4gIE1haWxMaXN0TWVtYmVyLFxuICBNdWx0aXBsZU1lbWJlcnNEYXRhLFxuICBNdWx0aXBsZU1lbWJlcnNSZXFEYXRhLFxuICBEZWxldGVkTWVtYmVyLFxuICBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnNSZXEsXG4gIE5ld011bHRpcGxlTWVtYmVyc1Jlc3BvbnNlLFxuICBNYWlsTGlzdE1lbWJlcnNSZXN1bHQsXG4gIE1haWxMaXN0TWVtYmVyc1Jlc3BvbnNlXG59IGZyb20gJy4uLy4uL1R5cGVzL01haWxpbmdMaXN0cyc7XG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuLi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5pbXBvcnQgeyBJTWFpbExpc3RzTWVtYmVycyB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvTWFpbGluZ0xpc3RzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFpbExpc3RzTWVtYmVyc1xuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8TWFpbExpc3RNZW1iZXJzUmVzdWx0PlxuICBpbXBsZW1lbnRzIElNYWlsTGlzdHNNZW1iZXJzIHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHN1cGVyKHJlcXVlc3QpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5iYXNlUm91dGUgPSAnL3YzL2xpc3RzJztcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tBbmRVcGRhdGVEYXRhKGRhdGE6IENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVycykge1xuICAgIGNvbnN0IG5ld0RhdGEgPSB7IC4uLmRhdGEgfTtcblxuICAgIGlmICh0eXBlb2YgZGF0YS52YXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgbmV3RGF0YS52YXJzID0gSlNPTi5zdHJpbmdpZnkobmV3RGF0YS52YXJzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEuc3Vic2NyaWJlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBuZXdEYXRhLnN1YnNjcmliZWQgPSBkYXRhLnN1YnNjcmliZWQgPyAneWVzJyA6ICdubyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0RhdGEgYXMgQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzUmVxO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChcbiAgICByZXNwb25zZTogTWFpbExpc3RNZW1iZXJzUmVzcG9uc2UsXG4gICk6IE1haWxMaXN0TWVtYmVyc1Jlc3VsdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIE1haWxMaXN0TWVtYmVyc1Jlc3VsdDtcbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcztcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdhZGRyZXNzJyk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0TWVtYmVycyhcbiAgICBtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyxcbiAgICBxdWVyeT86IE1haWxMaXN0TWVtYmVyc1F1ZXJ5XG4gICk6IFByb21pc2U8TWFpbExpc3RNZW1iZXJzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXMoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzL3BhZ2VzYCwgcXVlcnkpO1xuICB9XG5cbiAgZ2V0TWVtYmVyKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBtYWlsTGlzdE1lbWJlckFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8TWFpbExpc3RNZW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMvJHttYWlsTGlzdE1lbWJlckFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5tZW1iZXIgYXMgTWFpbExpc3RNZW1iZXIpO1xuICB9XG5cbiAgY3JlYXRlTWVtYmVyKFxuICAgIG1haWxMaXN0QWRkcmVzczogc3RyaW5nLFxuICAgIGRhdGE6IENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1xuICApOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyPiB7XG4gICAgY29uc3QgcmVxRGF0YSA9IHRoaXMuY2hlY2tBbmRVcGRhdGVEYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnNgLCByZXFEYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lm1lbWJlciBhcyBNYWlsTGlzdE1lbWJlcik7XG4gIH1cblxuICBjcmVhdGVNZW1iZXJzKFxuICAgIG1haWxMaXN0QWRkcmVzczogc3RyaW5nLFxuICAgIGRhdGE6IE11bHRpcGxlTWVtYmVyc0RhdGFcbiAgKTogUHJvbWlzZTxOZXdNdWx0aXBsZU1lbWJlcnNSZXNwb25zZT4ge1xuICAgIGNvbnN0IG5ld0RhdGE6IE11bHRpcGxlTWVtYmVyc1JlcURhdGEgPSB7XG4gICAgICBtZW1iZXJzOiBBcnJheS5pc0FycmF5KGRhdGEubWVtYmVycykgPyBKU09OLnN0cmluZ2lmeShkYXRhLm1lbWJlcnMpIDogZGF0YS5tZW1iZXJzLFxuICAgICAgdXBzZXJ0OiBkYXRhLnVwc2VydFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzLmpzb25gLCBuZXdEYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5IGFzIE5ld011bHRpcGxlTWVtYmVyc1Jlc3BvbnNlKTtcbiAgfVxuXG4gIHVwZGF0ZU1lbWJlcihcbiAgICBtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyxcbiAgICBtYWlsTGlzdE1lbWJlckFkZHJlc3M6IHN0cmluZyxcbiAgICBkYXRhOiBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnNcbiAgKTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcj4ge1xuICAgIGNvbnN0IHJlcURhdGEgPSB0aGlzLmNoZWNrQW5kVXBkYXRlRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMvJHttYWlsTGlzdE1lbWJlckFkZHJlc3N9YCwgcmVxRGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5tZW1iZXIgYXMgTWFpbExpc3RNZW1iZXIpO1xuICB9XG5cbiAgZGVzdHJveU1lbWJlcihtYWlsTGlzdEFkZHJlc3M6IHN0cmluZywgbWFpbExpc3RNZW1iZXJBZGRyZXNzOiBzdHJpbmcpIDogUHJvbWlzZTxEZWxldGVkTWVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzLyR7bWFpbExpc3RNZW1iZXJBZGRyZXNzfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkgYXMgRGVsZXRlZE1lbWJlcik7XG4gIH1cbn1cbiIsImltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7XG4gIExpc3RzUXVlcnksXG4gIENyZWF0ZVVwZGF0ZUxpc3QsXG4gIERlc3Ryb3llZExpc3QsXG4gIE1haWxpbmdMaXN0LFxuICBNYWlsaW5nTGlzdFZhbGlkYXRpb25BcGlSZXNwb25zZSxcbiAgU3RhcnRWYWxpZGF0aW9uUmVzdWx0LFxuICBNYWlsaW5nTGlzdFZhbGlkYXRpb25SZXN1bHQsXG4gIE1haWxpbmdMaXN0Q2FuY2VsVmFsaWRhdGlvblJlc3VsdCxcbiAgTWFpbGluZ0xpc3RSZXN1bHQsXG4gIE1haWxpbmdMaXN0QXBpUmVzcG9uc2Vcbn0gZnJvbSAnLi4vLi4vVHlwZXMvTWFpbGluZ0xpc3RzJztcbmltcG9ydCB7IElNYWlsTGlzdHNNZW1iZXJzIH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9NYWlsaW5nTGlzdHMvTWFpbGluZ0xpc3RNZW1iZXJzJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4uL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCB7IElNYWlsaW5nTGlzdHNDbGllbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFpbGluZ0xpc3RzQ2xpZW50XG4gIGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxNYWlsaW5nTGlzdFJlc3VsdD5cbiAgaW1wbGVtZW50cyBJTWFpbGluZ0xpc3RzQ2xpZW50IHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHB1YmxpYyBtZW1iZXJzOiBJTWFpbExpc3RzTWVtYmVycztcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0LCBtZW1iZXJzOiBJTWFpbExpc3RzTWVtYmVycykge1xuICAgIHN1cGVyKHJlcXVlc3QpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5iYXNlUm91dGUgPSAnL3YzL2xpc3RzJztcbiAgICB0aGlzLm1lbWJlcnMgPSBtZW1iZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVZhbGlkYXRpb25SZXN1bHQoXG4gICAgc3RhdHVzOiBudW1iZXIsXG4gICAgZGF0YTogTWFpbGluZ0xpc3RWYWxpZGF0aW9uQXBpUmVzcG9uc2VcbiAgKTogTWFpbGluZ0xpc3RWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzLFxuICAgICAgdmFsaWRhdGlvblJlc3VsdDoge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQgKiAxMDAwKSAvLyBhZGQgbWlsbGlzZWNvbmQgdG8gVW5peCB0aW1lc3RhbXBcbiAgICAgIH1cbiAgICB9IGFzIE1haWxpbmdMaXN0VmFsaWRhdGlvblJlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QocmVzcG9uc2U6IE1haWxpbmdMaXN0QXBpUmVzcG9uc2UpOiBNYWlsaW5nTGlzdFJlc3VsdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIE1haWxpbmdMaXN0UmVzdWx0O1xuXG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXM7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAnYWRkcmVzcycpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0KHF1ZXJ5PzogTGlzdHNRdWVyeSk6IFByb21pc2U8TWFpbGluZ0xpc3RSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TGlzdFdpdGhQYWdlcyhgJHt0aGlzLmJhc2VSb3V0ZX0vcGFnZXNgLCBxdWVyeSk7XG4gIH1cblxuICBnZXQobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPE1haWxpbmdMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubGlzdCBhcyBNYWlsaW5nTGlzdCk7XG4gIH1cblxuICBjcmVhdGUoZGF0YTogQ3JlYXRlVXBkYXRlTGlzdCk6IFByb21pc2U8TWFpbGluZ0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodGhpcy5iYXNlUm91dGUsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubGlzdCBhcyBNYWlsaW5nTGlzdCk7XG4gIH1cblxuICB1cGRhdGUobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsIGRhdGE6IENyZWF0ZVVwZGF0ZUxpc3QpOiBQcm9taXNlPE1haWxpbmdMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfWAsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubGlzdCBhcyBNYWlsaW5nTGlzdCk7XG4gIH1cblxuICBkZXN0cm95KG1haWxMaXN0QWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxEZXN0cm95ZWRMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkgYXMgRGVzdHJveWVkTGlzdCk7XG4gIH1cblxuICB2YWxpZGF0ZShtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8U3RhcnRWYWxpZGF0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vdmFsaWRhdGVgLCB7fSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gKHtcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICAgIH0pIGFzIFN0YXJ0VmFsaWRhdGlvblJlc3VsdCk7XG4gIH1cblxuICB2YWxpZGF0aW9uUmVzdWx0KG1haWxMaXN0QWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxNYWlsaW5nTGlzdFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L3ZhbGlkYXRlYClcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzcG9uc2UpID0+IHRoaXMucGFyc2VWYWxpZGF0aW9uUmVzdWx0KFxuICAgICAgICAgIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgcmVzcG9uc2UuYm9keSBhcyBNYWlsaW5nTGlzdFZhbGlkYXRpb25BcGlSZXNwb25zZVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgY2FuY2VsVmFsaWRhdGlvbihtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8TWFpbGluZ0xpc3RDYW5jZWxWYWxpZGF0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS92YWxpZGF0ZWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+ICh7XG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2VcbiAgICAgIH0gYXMgTWFpbGluZ0xpc3RDYW5jZWxWYWxpZGF0aW9uUmVzdWx0KSk7XG4gIH1cbn1cbiIsImltcG9ydCBBUElFcnJvciBmcm9tICcuL2NvbW1vbi9FcnJvcic7XG5pbXBvcnQge1xuICBNYWlsZ3VuTWVzc2FnZURhdGEsXG4gIE1lc3NhZ2VzU2VuZEFQSVJlc3BvbnNlLFxuICBNZXNzYWdlc1NlbmRSZXN1bHRcbn0gZnJvbSAnLi4vVHlwZXMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQgeyBJTWVzc2FnZXNDbGllbnQgfSBmcm9tICcuLi9JbnRlcmZhY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVzc2FnZXNDbGllbnQgaW1wbGVtZW50cyBJTWVzc2FnZXNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlQm9vbGVhblZhbHVlcyhkYXRhOiBNYWlsZ3VuTWVzc2FnZURhdGEpOiBNYWlsZ3VuTWVzc2FnZURhdGEge1xuICAgIGNvbnN0IHllc05vUHJvcGVydGllcyA9IG5ldyBTZXQoW1xuICAgICAgJ286dGVzdG1vZGUnLFxuICAgICAgJ3Q6dGV4dCcsXG4gICAgICAnbzpka2ltJyxcbiAgICAgICdvOnRyYWNraW5nJyxcbiAgICAgICdvOnRyYWNraW5nLWNsaWNrcycsXG4gICAgICAnbzp0cmFja2luZy1vcGVucycsXG4gICAgICAnbzpyZXF1aXJlLXRscycsXG4gICAgICAnbzpza2lwLXZlcmlmaWNhdGlvbidcbiAgICBdKTtcblxuICAgIGlmICghZGF0YSB8fCBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoJ01lc3NhZ2UgZGF0YSBvYmplY3QgY2FuIG5vdCBiZSBlbXB0eScsICdNZXNzYWdlIGRhdGEgb2JqZWN0IGNhbiBub3QgYmUgZW1wdHknKTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGRhdGEpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGlmICh5ZXNOb1Byb3BlcnRpZXMuaGFzKGtleSkgJiYgdHlwZW9mIGRhdGFba2V5XSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGFjY1trZXldID0gZGF0YVtrZXldID8gJ3llcycgOiAnbm8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjW2tleV0gPSBkYXRhW2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIE1haWxndW5NZXNzYWdlRGF0YSk7XG4gIH1cblxuICBfcGFyc2VSZXNwb25zZShyZXNwb25zZTogTWVzc2FnZXNTZW5kQVBJUmVzcG9uc2UpOiBNZXNzYWdlc1NlbmRSZXN1bHQge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlKGRvbWFpbjogc3RyaW5nLCBkYXRhOiBNYWlsZ3VuTWVzc2FnZURhdGEpOiBQcm9taXNlPE1lc3NhZ2VzU2VuZFJlc3VsdD4ge1xuICAgIGlmIChkYXRhLm1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgL3YzLyR7ZG9tYWlufS9tZXNzYWdlcy5taW1lYCwgZGF0YSlcbiAgICAgICAgLnRoZW4odGhpcy5fcGFyc2VSZXNwb25zZSk7XG4gICAgfVxuXG4gICAgY29uc3QgbW9kaWZpZWREYXRhID0gdGhpcy5wcmVwYXJlQm9vbGVhblZhbHVlcyhkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYC92My8ke2RvbWFpbn0vbWVzc2FnZXNgLCBtb2RpZmllZERhdGEpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVJlc3BvbnNlKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHsgSUxvZ2dlciB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvQ29tbW9uJztcbmltcG9ydCB7IElNZXRyaWNzQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9NZXRyaWNzL01ldHJpY3NDbGllbnQnO1xuaW1wb3J0IHtcbiAgTWV0cmljc0FQSVF1ZXJ5LCBNZXRyaWNzQVBJUmVzcG9uc2UsIE1ldHJpY3NRdWVyeSwgTWV0cmljc1Jlc3VsdFxufSBmcm9tICcuLi8uLi9UeXBlcy9NZXRyaWNzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0NsaWVudCBpbXBsZW1lbnRzIElNZXRyaWNzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcHJpdmF0ZSBsb2dnZXI6IElMb2dnZXI7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCwgbG9nZ2VyOiBJTG9nZ2VyID0gY29uc29sZSkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnREYXRlVG9VVEMoa2V5OnN0cmluZywgaW5wdXREYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAvKlxuICAgICAgQmVjYXVzZSBcIm5ldyBEYXRlKCcyMDIyLTEyLTI1VDAwOjAwOjAwLjAwMFonKVwiIGJlY29tZXMgXCJTdW4gRGVjIDI1IDIwMjIgMDI6MDA6MDAgR01UKzAyMDBcIlxuICAgICAgKHBsdXMgMiBob3VycyBmcm9tIHRoZSB0aW1lem9uZSlcbiAgICAgIGFuZCBiZWNhdXNlIGZvciBBUEksIHdlIG5lZWQgdG8gcHJvdmlkZSB0aGUgZGF0ZSBpbiB0aGUgZXhwZWN0ZWQgZm9ybWF0XG4gICAgICBleDogJ1RodSwgMTMgT2N0IDIwMTEgMTg6MDI6MDAgKzAwMDAnLlxuICAgICAgSGVyZSB3ZSB0cnkgYXV0by1jb252ZXJ0IHRoZW0gdG8gVVRDXG4gICAgKi9cbiAgICB0aGlzLmxvZ2dlci53YXJuKGBEYXRlOlwiJHtpbnB1dERhdGV9XCIgd2FzIGF1dG8tY29udmVydGVkIHRvIFVUQyB0aW1lIHpvbmUuXG5WYWx1ZSBcIiR7aW5wdXREYXRlLnRvVVRDU3RyaW5nKCl9XCIgd2lsbCBiZSB1c2VkIGZvciByZXF1ZXN0LlxuQ29uc2lkZXIgdXNpbmcgc3RyaW5nIHR5cGUgZm9yIHByb3BlcnR5IFwiJHtrZXl9XCIgdG8gYXZvaWQgYXV0by1jb252ZXJ0aW5nYCk7XG4gICAgcmV0dXJuIGlucHV0RGF0ZS50b1VUQ1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlUXVlcnkocXVlcnk6IE1ldHJpY3NRdWVyeSB8IHVuZGVmaW5lZCk6IE1ldHJpY3NBUElRdWVyeSB7XG4gICAgbGV0IHN0YXJ0RGF0ZTtcbiAgICBsZXQgZW5kRGF0ZTtcbiAgICBpZiAocXVlcnkpIHtcbiAgICAgIGNvbnN0IHFTdGFydCA9IHF1ZXJ5Py5zdGFydDtcbiAgICAgIGNvbnN0IHFFbmQgPSBxdWVyeT8uZW5kO1xuICAgICAgc3RhcnREYXRlID0gcVN0YXJ0IGluc3RhbmNlb2YgRGF0ZSA/IHRoaXMuY29udmVydERhdGVUb1VUQygnc3RhcnQnLCBxU3RhcnQpIDogcVN0YXJ0ID8/ICcnO1xuICAgICAgZW5kRGF0ZSA9IHFFbmQgJiYgcUVuZCBpbnN0YW5jZW9mIERhdGUgPyB0aGlzLmNvbnZlcnREYXRlVG9VVEMoJ2VuZCcsIHFFbmQpIDogcUVuZCA/PyAnJztcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0OiBNZXRyaWNzQVBJUXVlcnkgPSB7XG4gICAgICAuLi5xdWVyeSxcbiAgICAgIHN0YXJ0OiBzdGFydERhdGUsXG4gICAgICBlbmQ6IGVuZERhdGVcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlOiBNZXRyaWNzQVBJUmVzcG9uc2UpOiBNZXRyaWNzUmVzdWx0IHtcbiAgICBjb25zdCByZXNCb2R5ID0gcmVzcG9uc2UuYm9keTtcbiAgICBjb25zdCBzdGFydERhdGUgPSBEYXRlLnBhcnNlKHJlc0JvZHkuc3RhcnQpID8gbmV3IERhdGUocmVzQm9keS5zdGFydCkgOiBudWxsO1xuICAgIGNvbnN0IGVuZERhdGUgPSBEYXRlLnBhcnNlKHJlc0JvZHkuZW5kKSA/IG5ldyBEYXRlKHJlc0JvZHkuZW5kKSA6IG51bGw7XG4gICAgY29uc3QgcmVzdWx0OiBNZXRyaWNzUmVzdWx0ID0ge1xuICAgICAgLi4ucmVzQm9keSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgc3RhcnQ6IHN0YXJ0RGF0ZSxcbiAgICAgIGVuZDogZW5kRGF0ZVxuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIGdldEFjY291bnQocXVlcnk/OiBNZXRyaWNzUXVlcnkpOiBQcm9taXNlPE1ldHJpY3NSZXN1bHQ+IHtcbiAgICBjb25zdCBxdWVyeURhdGEgPSB0aGlzLnByZXBhcmVRdWVyeShxdWVyeSk7XG4gICAgY29uc3QgcmVzcG9uc2U6IE1ldHJpY3NBUElSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0KCcvdjEvYW5hbHl0aWNzL21ldHJpY3MnLCBxdWVyeURhdGEpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGdldEFjY291bnRVc2FnZShxdWVyeT86IE1ldHJpY3NRdWVyeSk6IFByb21pc2U8TWV0cmljc1Jlc3VsdD4ge1xuICAgIGNvbnN0IHF1ZXJ5RGF0YSA9IHRoaXMucHJlcGFyZVF1ZXJ5KHF1ZXJ5KTtcbiAgICBjb25zdCByZXNwb25zZTogTWV0cmljc0FQSVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3QoJy92MS9hbmFseXRpY3MvdXNhZ2UvbWV0cmljcycsIHF1ZXJ5RGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJUm91dGVzQ2xpZW50IH0gZnJvbSAnLi4vSW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICBDcmVhdGVVcGRhdGVSb3V0ZURhdGEsIERlc3Ryb3lSb3V0ZVJlc3BvbnNlLCBSb3V0ZSwgUm91dGVzTGlzdFF1ZXJ5LCBVcGRhdGVSb3V0ZVJlc3BvbnNlXG59IGZyb20gJy4uL1R5cGVzL1JvdXRlcyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGVzQ2xpZW50IGltcGxlbWVudHMgSVJvdXRlc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBsaXN0KHF1ZXJ5OiBSb3V0ZXNMaXN0UXVlcnkpOiBQcm9taXNlPFJvdXRlW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YzL3JvdXRlcycsIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lml0ZW1zKTtcbiAgfVxuXG4gIGdldChpZDogc3RyaW5nKTogUHJvbWlzZTxSb3V0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAvdjMvcm91dGVzLyR7aWR9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5yb3V0ZSk7XG4gIH1cblxuICBjcmVhdGUoZGF0YTogQ3JlYXRlVXBkYXRlUm91dGVEYXRhKTogUHJvbWlzZTxSb3V0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3YzL3JvdXRlcycsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkucm91dGUpO1xuICB9XG5cbiAgdXBkYXRlKGlkOiBzdHJpbmcsIGRhdGE6IENyZWF0ZVVwZGF0ZVJvdXRlRGF0YSk6IFByb21pc2U8VXBkYXRlUm91dGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAvdjMvcm91dGVzLyR7aWR9YCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBkZXN0cm95KGlkOiBzdHJpbmcpOiBQcm9taXNlPERlc3Ryb3lSb3V0ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYC92My9yb3V0ZXMvJHtpZH1gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5KTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHsgU3RhdHNRdWVyeSwgU3RhdHNPcHRpb25zIH0gZnJvbSAnLi4vLi4vVHlwZXMvU3RhdHMnO1xuaW1wb3J0IHsgSUxvZ2dlciB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvQ29tbW9uJztcbmltcG9ydCBTdGF0c0NvbnRhaW5lciBmcm9tICcuL1N0YXRzQ29udGFpbmVyJztcbmltcG9ydCB7IElTdGF0c0NsaWVudCwgSVN0YXRzQ29udGFpbmVyIH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9TdGF0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRzQ2xpZW50IGltcGxlbWVudHMgSVN0YXRzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcHJpdmF0ZSBsb2dnZXI6IElMb2dnZXI7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCwgbG9nZ2VyOiBJTG9nZ2VyID0gY29uc29sZSkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnREYXRlVG9VVEMoa2V5OnN0cmluZywgaW5wdXREYXRlOiBEYXRlKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgLypcbiAgICAgIEJlY2F1c2UgXCJuZXcgRGF0ZSgnMjAyMi0xMi0yNVQwMDowMDowMC4wMDBaJylcIiBiZWNvbWVzIFwiU3VuIERlYyAyNSAyMDIyIDAyOjAwOjAwIEdNVCswMjAwXCJcbiAgICAgIChwbHVzIDIgaG91cnMgZnJvbSB0aGUgdGltZXpvbmUpXG4gICAgICBhbmQgYmVjYXVzZSBmb3IgQVBJLCB3ZSBuZWVkIHRvIHByb3ZpZGUgdGhlIGRhdGUgaW4gdGhlIGV4cGVjdGVkIGZvcm1hdFxuICAgICAgZXg6ICdUaHUsIDEzIE9jdCAyMDExIDE4OjAyOjAwICswMDAwJy5cbiAgICAgIEhlcmUgd2UgdHJ5IGF1dG8tY29udmVydCB0aGVtIHRvIFVUQ1xuICAgICovXG4gICAgdGhpcy5sb2dnZXIud2FybihgRGF0ZTpcIiR7aW5wdXREYXRlfVwiIHdhcyBhdXRvLWNvbnZlcnRlZCB0byBVVEMgdGltZSB6b25lLlxuVmFsdWUgXCIke2lucHV0RGF0ZS50b1VUQ1N0cmluZygpfVwiIHdpbGwgYmUgdXNlZCBmb3IgcmVxdWVzdC5cbkNvbnNpZGVyIHVzaW5nIHN0cmluZyB0eXBlIGZvciBwcm9wZXJ0eSBcIiR7a2V5fVwiIHRvIGF2b2lkIGF1dG8tY29udmVydGluZ2ApO1xuICAgIHJldHVybiBba2V5LCBpbnB1dERhdGUudG9VVENTdHJpbmcoKV07XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVTZWFyY2hQYXJhbXMocXVlcnk6IFN0YXRzUXVlcnkgfCB1bmRlZmluZWQpOiBBcnJheTxBcnJheTxzdHJpbmc+PiB7XG4gICAgbGV0IHNlYXJjaFBhcmFtcyA9IFtdIGFzIEFycmF5PEFycmF5PHN0cmluZz4+O1xuICAgIGlmICh0eXBlb2YgcXVlcnkgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHF1ZXJ5KS5sZW5ndGgpIHtcbiAgICAgIHNlYXJjaFBhcmFtcyA9IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KS5yZWR1Y2UoKGFycmF5V2l0aFBhaXJzLCBjdXJyZW50UGFpcikgPT4ge1xuICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBjdXJyZW50UGFpcjtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoKSB7IC8vIGV2ZW50OiBbJ2RlbGl2ZXJlZCcsICdhY2NlcHRlZCddXG4gICAgICAgICAgY29uc3QgcmVwZWF0ZWRQcm9wZXJ0eSA9IHZhbHVlLm1hcCgoaXRlbSkgPT4gW2tleSwgaXRlbV0pO1xuICAgICAgICAgIHJldHVybiBbLi4uYXJyYXlXaXRoUGFpcnMsIC4uLnJlcGVhdGVkUHJvcGVydHldOyAvLyBbW2V2ZW50LGRlbGl2ZXJlZF0sIFtldmVudCxhY2NlcHRlZF1dXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgYXJyYXlXaXRoUGFpcnMucHVzaCh0aGlzLmNvbnZlcnREYXRlVG9VVEMoa2V5LCB2YWx1ZSkpO1xuICAgICAgICAgIHJldHVybiBhcnJheVdpdGhQYWlycztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgYXJyYXlXaXRoUGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycmF5V2l0aFBhaXJzO1xuICAgICAgfSwgW10gYXMgQXJyYXk8QXJyYXk8c3RyaW5nPj4pO1xuICAgIH1cblxuICAgIHJldHVybiBzZWFyY2hQYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlU3RhdHMocmVzcG9uc2U6IHsgYm9keTogU3RhdHNPcHRpb25zIH0pOiBJU3RhdHNDb250YWluZXIge1xuICAgIHJldHVybiBuZXcgU3RhdHNDb250YWluZXIocmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBnZXREb21haW4oZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogU3RhdHNRdWVyeSk6IFByb21pc2U8SVN0YXRzQ29udGFpbmVyPiB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5wcmVwYXJlU2VhcmNoUGFyYW1zKHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMnLCBkb21haW4sICdzdGF0cy90b3RhbCcpLCBzZWFyY2hQYXJhbXMpXG4gICAgICAudGhlbih0aGlzLnBhcnNlU3RhdHMpO1xuICB9XG5cbiAgZ2V0QWNjb3VudChxdWVyeT86IFN0YXRzUXVlcnkpOiBQcm9taXNlPElTdGF0c0NvbnRhaW5lcj4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMucHJlcGFyZVNlYXJjaFBhcmFtcyhxdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92My9zdGF0cy90b3RhbCcsIHNlYXJjaFBhcmFtcylcbiAgICAgIC50aGVuKHRoaXMucGFyc2VTdGF0cyk7XG4gIH1cbn1cbiIsImltcG9ydCB7IElTdGF0c0NvbnRhaW5lciB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3RhdHMnO1xuaW1wb3J0IHsgU3RhdCwgU3RhdHNPcHRpb25zIH0gZnJvbSAnLi4vLi4vVHlwZXMvU3RhdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0c0NvbnRhaW5lciBpbXBsZW1lbnRzIElTdGF0c0NvbnRhaW5lciB7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgZW5kOiBEYXRlO1xuICAgIHJlc29sdXRpb246IHN0cmluZztcbiAgICBzdGF0czogU3RhdFtdO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFN0YXRzT3B0aW9ucykge1xuICAgICAgdGhpcy5zdGFydCA9IG5ldyBEYXRlKGRhdGEuc3RhcnQpO1xuICAgICAgdGhpcy5lbmQgPSBuZXcgRGF0ZShkYXRhLmVuZCk7XG4gICAgICB0aGlzLnJlc29sdXRpb24gPSBkYXRhLnJlc29sdXRpb247XG4gICAgICB0aGlzLnN0YXRzID0gZGF0YS5zdGF0cy5tYXAoZnVuY3Rpb24gKHN0YXQ6IFN0YXQpIHtcbiAgICAgICAgY29uc3QgcmVzID0geyAuLi5zdGF0IH07XG4gICAgICAgIHJlcy50aW1lID0gbmV3IERhdGUoc3RhdC50aW1lKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pO1xuICAgIH1cbn1cbiIsImltcG9ydCBSZXF1ZXN0IGZyb20gJy4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHsgSVN1YmFjY291bnRzQ2xpZW50IH0gZnJvbSAnLi4vSW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICBTdWJhY2NvdW50TGlzdFJlc3BvbnNlRGF0YSxcbiAgU3ViYWNjb3VudFJlc3BvbnNlRGF0YSxcbiAgU3ViYWNjb3VudHNRdWVyeSxcbn0gZnJvbSAnLi4vVHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJhY2NvdW50c0NsaWVudCBpbXBsZW1lbnRzIElTdWJhY2NvdW50c0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHN0YXRpYyBTVUJBQ0NPVU5UX0hFQURFUiA9ICdYLU1haWxndW4tT24tQmVoYWxmLU9mJztcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGxpc3QocXVlcnk/OiBTdWJhY2NvdW50c1F1ZXJ5KTogUHJvbWlzZTxTdWJhY2NvdW50TGlzdFJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjUvYWNjb3VudHMvc3ViYWNjb3VudHMnLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXMpID0+IHJlcy5ib2R5KTtcbiAgfVxuXG4gIGdldChpZDpzdHJpbmcpOiBQcm9taXNlPFN1YmFjY291bnRSZXNwb25zZURhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3Y1L2FjY291bnRzL3N1YmFjY291bnRzLyR7aWR9YClcbiAgICAgIC50aGVuKChyZXMpID0+IHJlcy5ib2R5KTtcbiAgfVxuXG4gIGNyZWF0ZShuYW1lOnN0cmluZyk6IFByb21pc2U8U3ViYWNjb3VudFJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3Y1L2FjY291bnRzL3N1YmFjY291bnRzJywgeyBuYW1lIH0pXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYm9keSk7XG4gIH1cblxuICBlbmFibGUoaWQ6c3RyaW5nKTogUHJvbWlzZTxTdWJhY2NvdW50UmVzcG9uc2VEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0KGAvdjUvYWNjb3VudHMvc3ViYWNjb3VudHMvJHtpZH0vZW5hYmxlYClcbiAgICAgIC50aGVuKChyZXMpID0+IHJlcy5ib2R5KTtcbiAgfVxuXG4gIGRpc2FibGUoaWQ6c3RyaW5nKTogUHJvbWlzZTxTdWJhY2NvdW50UmVzcG9uc2VEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0KGAvdjUvYWNjb3VudHMvc3ViYWNjb3VudHMvJHtpZH0vZGlzYWJsZWApXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYm9keSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFN1cHByZXNzaW9uTW9kZWxzIH0gZnJvbSAnLi4vLi4vRW51bXMnO1xuaW1wb3J0IHsgSUJvdW5jZSB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCB7IEJvdW5jZURhdGEgfSBmcm9tICcuLi8uLi9UeXBlcy9TdXBwcmVzc2lvbnMnO1xuaW1wb3J0IFN1cHByZXNzaW9uIGZyb20gJy4vU3VwcHJlc3Npb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb3VuY2UgZXh0ZW5kcyBTdXBwcmVzc2lvbiBpbXBsZW1lbnRzIElCb3VuY2Uge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBjb2RlOiBudW1iZXI7XG4gICAgZXJyb3I6IHN0cmluZztcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbiAgICBjcmVhdGVkX2F0OiBEYXRlO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YTogQm91bmNlRGF0YSkge1xuICAgICAgc3VwZXIoU3VwcHJlc3Npb25Nb2RlbHMuQk9VTkNFUyk7XG4gICAgICB0aGlzLmFkZHJlc3MgPSBkYXRhLmFkZHJlc3M7XG4gICAgICB0aGlzLmNvZGUgPSArZGF0YS5jb2RlO1xuICAgICAgdGhpcy5lcnJvciA9IGRhdGEuZXJyb3I7XG4gICAgICB0aGlzLmNyZWF0ZWRfYXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFN1cHByZXNzaW9uTW9kZWxzIH0gZnJvbSAnLi4vLi4vRW51bXMnO1xuaW1wb3J0IHsgSUNvbXBsYWludCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCB7IENvbXBsYWludERhdGEgfSBmcm9tICcuLi8uLi9UeXBlcy9TdXBwcmVzc2lvbnMnO1xuaW1wb3J0IFN1cHByZXNzaW9uIGZyb20gJy4vU3VwcHJlc3Npb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21wbGFpbnQgZXh0ZW5kcyBTdXBwcmVzc2lvbiBpbXBsZW1lbnRzIElDb21wbGFpbnQge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbiAgICBjcmVhdGVkX2F0OiBEYXRlO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IENvbXBsYWludERhdGEpIHtcbiAgICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLkNPTVBMQUlOVFMpO1xuICAgICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBTdXBwcmVzc2lvbk1vZGVscyB9IGZyb20gJy4uLy4uL0VudW1zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3VwcHJlc3Npb24ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBTdXBwcmVzc2lvbk1vZGVscykge1xuICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5cbi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5cbmltcG9ydCBBUElFcnJvciBmcm9tICcuLi9jb21tb24vRXJyb3InO1xuaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IEJvdW5jZSBmcm9tICcuL0JvdW5jZSc7XG5pbXBvcnQgQ29tcGxhaW50IGZyb20gJy4vQ29tcGxhaW50JztcbmltcG9ydCBVbnN1YnNjcmliZSBmcm9tICcuL1Vuc3Vic2NyaWJlJztcbmltcG9ydCBXaGl0ZUxpc3QgZnJvbSAnLi9XaGl0ZUxpc3QnO1xuaW1wb3J0IFN1cHByZXNzaW9uIGZyb20gJy4vU3VwcHJlc3Npb24nO1xuaW1wb3J0IHtcbiAgSUJvdW5jZSxcbiAgSUNvbXBsYWludCxcbiAgSVN1cHByZXNzaW9uQ2xpZW50LFxuICBJVW5zdWJzY3JpYmUsXG4gIElXaGl0ZUxpc3Rcbn0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9TdXBwcmVzc2lvbnMnO1xuaW1wb3J0IHtcbiAgU3VwcHJlc3Npb25MaXN0LFxuICBTdXBwcmVzc2lvbkxpc3RSZXNwb25zZSxcbiAgU3VwcHJlc3Npb25EYXRhVHlwZSxcbiAgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEsXG4gIFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQsXG4gIFN1cHByZXNzaW9uQ3JlYXRpb25SZXNwb25zZSxcbiAgU3VwcHJlc3Npb25MaXN0UXVlcnksXG4gIFN1cHByZXNzaW9uUmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uRGVzdHJveVJlc3VsdCxcbiAgU3VwcHJlc3Npb25EZXN0cm95UmVzcG9uc2Vcbn0gZnJvbSAnLi4vLi4vVHlwZXMvU3VwcHJlc3Npb25zJztcblxuY29uc3QgY3JlYXRlT3B0aW9ucyA9IHtcbiAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1cHByZXNzaW9uQ2xpZW50XG4gIGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxTdXBwcmVzc2lvbkxpc3Q+XG4gIGltcGxlbWVudHMgSVN1cHByZXNzaW9uQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgbW9kZWxzOiBvYmplY3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHN1cGVyKHJlcXVlc3QpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5tb2RlbHMgPSB7XG4gICAgICBib3VuY2VzOiBCb3VuY2UsXG4gICAgICBjb21wbGFpbnRzOiBDb21wbGFpbnQsXG4gICAgICB1bnN1YnNjcmliZXM6IFVuc3Vic2NyaWJlLFxuICAgICAgd2hpdGVsaXN0czogV2hpdGVMaXN0LFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KFxuICAgIHJlc3BvbnNlOiBTdXBwcmVzc2lvbkxpc3RSZXNwb25zZSxcbiAgICBNb2RlbDoge1xuICAgICAgbmV3KGRhdGE6IFN1cHByZXNzaW9uRGF0YVR5cGUpOlxuICAgICAgSUJvdW5jZSB8IElDb21wbGFpbnQgfCBJVW5zdWJzY3JpYmUgfCBJV2hpdGVMaXN0XG4gICAgfVxuICApOiBTdXBwcmVzc2lvbkxpc3Qge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBTdXBwcmVzc2lvbkxpc3Q7XG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXM/Lm1hcCgoaXRlbSkgPT4gbmV3IE1vZGVsKGl0ZW0pKSB8fCBbXTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdhZGRyZXNzJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBfcGFyc2VJdGVtPFQgZXh0ZW5kcyBTdXBwcmVzc2lvbj4oXG4gICAgZGF0YSA6IFN1cHByZXNzaW9uRGF0YVR5cGUsXG4gICAgTW9kZWw6IHtcbiAgICAgIG5ldyhkYXRhVHlwZTogU3VwcHJlc3Npb25EYXRhVHlwZSk6VFxuICAgIH1cbiAgKTogVCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbChkYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV2hpdGVMaXN0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhIHwgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGFbXSxcbiAgICBpc0RhdGFBcnJheTogYm9vbGVhblxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQ+IHtcbiAgICBpZiAoaXNEYXRhQXJyYXkpIHtcbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICdEYXRhIHByb3BlcnR5IHNob3VsZCBiZSBhbiBvYmplY3QnLFxuICAgICAgICAnV2hpdGVsaXN0XFwncyBjcmVhdGlvbiBwcm9jZXNzIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgY3JlYXRpb25zLiBEYXRhIHByb3BlcnR5IHNob3VsZCBiZSBhbiBvYmplY3QnXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAucG9zdFdpdGhGRCh1cmxqb2luKCd2MycsIGRvbWFpbiwgJ3doaXRlbGlzdHMnKSwgZGF0YSBhcyBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YSlcbiAgICAgIC50aGVuKHRoaXMucHJlcGFyZVJlc3BvbnNlKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVW5zdWJzY3JpYmUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgZGF0YTogU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEgfCBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YVtdXG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdD4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7IC8vIFVzZXIgcHJvdmlkZWQgYW4gYXJyYXlcbiAgICAgIGNvbnN0IGlzQ29udGFpbnNUYWcgPSBkYXRhLnNvbWUoKHVuc3Vic2NyaWJlOiBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YSkgPT4gdW5zdWJzY3JpYmUudGFnKTtcbiAgICAgIGlmIChpc0NvbnRhaW5zVGFnKSB7XG4gICAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICAgJ1RhZyBwcm9wZXJ0eSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIGNyZWF0aW5nIG11bHRpcGxlIHVuc3Vic2NyaWJlcy4nLFxuICAgICAgICAgICdUYWcgcHJvcGVydHkgY2FuIGJlIHVzZWQgb25seSBpZiBvbmUgdW5zdWJzY3JpYmUgcHJvdmlkZWQgYXMgc2Vjb25kIGFyZ3VtZW50IG9mIGNyZWF0ZSBtZXRob2QuIFBsZWFzZSB1c2UgdGFncyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgICAgLnBvc3QodXJsam9pbigndjMnLCBkb21haW4sICd1bnN1YnNjcmliZXMnKSwgSlNPTi5zdHJpbmdpZnkoZGF0YSksIGNyZWF0ZU9wdGlvbnMpXG4gICAgICAgIC50aGVuKHRoaXMucHJlcGFyZVJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YT8udGFncykge1xuICAgICAgdGhyb3cgQVBJRXJyb3IuZ2V0VXNlckRhdGFFcnJvcihcbiAgICAgICAgJ1RhZ3MgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBjcmVhdGluZyBvbmUgdW5zdWJzY3JpYmUuJyxcbiAgICAgICAgJ1RhZ3MgcHJvcGVydHkgY2FuIGJlIHVzZWQgaWYgeW91IHByb3ZpZGVzIGFuIGFycmF5IG9mIHVuc3Vic2NyaWJlcyBhcyBzZWNvbmQgYXJndW1lbnQgb2YgY3JlYXRlIG1ldGhvZC4gUGxlYXNlIHVzZSB0YWcgaW5zdGVhZCdcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEudGFnKSkge1xuICAgICAgdGhyb3cgQVBJRXJyb3IuZ2V0VXNlckRhdGFFcnJvcihcbiAgICAgICAgJ1RhZyBwcm9wZXJ0eSBjYW4gbm90IGJlIGFuIGFycmF5JyxcbiAgICAgICAgJ1BsZWFzZSB1c2UgYXJyYXkgb2YgdW5zdWJzY3JpYmVzIGFzIHNlY29uZCBhcmd1bWVudCBvZiBjcmVhdGUgbWV0aG9kIHRvIGJlIGFibGUgdG8gcHJvdmlkZSBmZXcgdGFncydcbiAgICAgICk7XG4gICAgfVxuICAgIC8qIFdlIG5lZWQgRm9ybSBEYXRhIGZvciB1bnN1YnNjcmliZXMgaWYgd2Ugd2FudCB0byBzdXBwb3J0IHRoZSBcInRhZ1wiIHByb3BlcnR5ICovXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLnBvc3RXaXRoRkQodXJsam9pbigndjMnLCBkb21haW4sICd1bnN1YnNjcmliZXMnKSwgZGF0YSlcbiAgICAgIC50aGVuKHRoaXMucHJlcGFyZVJlc3BvbnNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9kZWwodHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGUgaW4gdGhpcy5tb2RlbHMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGVsc1t0eXBlIGFzIGtleW9mIHR5cGVvZiB0aGlzLm1vZGVsc107XG4gICAgfVxuICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAnVW5rbm93biB0eXBlIHZhbHVlJyxcbiAgICAgICdUeXBlIG1heSBiZSBvbmx5IG9uZSBvZiBbYm91bmNlcywgY29tcGxhaW50cywgdW5zdWJzY3JpYmVzLCB3aGl0ZWxpc3RzXSdcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlUmVzcG9uc2UocmVzcG9uc2U6IFN1cHByZXNzaW9uQ3JlYXRpb25SZXNwb25zZSk6IFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UsXG4gICAgICB0eXBlOiByZXNwb25zZS5ib2R5LnR5cGUgfHwgJycsXG4gICAgICB2YWx1ZTogcmVzcG9uc2UuYm9keS52YWx1ZSB8fCAnJyxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGxpc3QoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIHF1ZXJ5PzogU3VwcHJlc3Npb25MaXN0UXVlcnlcbiAgKTogUHJvbWlzZTxTdXBwcmVzc2lvbkxpc3Q+IHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXModXJsam9pbigndjMnLCBkb21haW4sIHR5cGUpLCBxdWVyeSwgbW9kZWwpO1xuICB9XG5cbiAgZ2V0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBhZGRyZXNzOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxJQm91bmNlIHwgSUNvbXBsYWludCB8IElVbnN1YnNjcmliZSB8IElXaGl0ZUxpc3Q+IHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLmdldCh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSwgZW5jb2RlVVJJQ29tcG9uZW50KGFkZHJlc3MpKSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogU3VwcHJlc3Npb25SZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VJdGVtPHR5cGVvZiBtb2RlbD4ocmVzcG9uc2UuYm9keSwgbW9kZWwpKTtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgZGF0YTogU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEgfCBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YVtdXG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdD4ge1xuICAgIHRoaXMuZ2V0TW9kZWwodHlwZSk7XG4gICAgLy8gc3VwcG9ydHMgYWRkaW5nIG11bHRpcGxlIHN1cHByZXNzaW9ucyBieSBkZWZhdWx0XG4gICAgbGV0IHBvc3REYXRhO1xuICAgIGNvbnN0IGlzRGF0YUFycmF5ID0gQXJyYXkuaXNBcnJheShkYXRhKTtcblxuICAgIGlmICh0eXBlID09PSAnd2hpdGVsaXN0cycpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdoaXRlTGlzdChkb21haW4sIGRhdGEsIGlzRGF0YUFycmF5KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ3Vuc3Vic2NyaWJlcycpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVVuc3Vic2NyaWJlKGRvbWFpbiwgZGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0RhdGFBcnJheSkge1xuICAgICAgcG9zdERhdGEgPSBbZGF0YV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvc3REYXRhID0gWy4uLmRhdGFdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5wb3N0KHVybGpvaW4oJ3YzJywgZG9tYWluLCB0eXBlKSwgSlNPTi5zdHJpbmdpZnkocG9zdERhdGEpLCBjcmVhdGVPcHRpb25zKVxuICAgICAgLnRoZW4odGhpcy5wcmVwYXJlUmVzcG9uc2UpO1xuICB9XG5cbiAgZGVzdHJveShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgYWRkcmVzczogc3RyaW5nXG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25EZXN0cm95UmVzdWx0PiB7XG4gICAgdGhpcy5nZXRNb2RlbCh0eXBlKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAuZGVsZXRlKHVybGpvaW4oJ3YzJywgZG9tYWluLCB0eXBlLCBlbmNvZGVVUklDb21wb25lbnQoYWRkcmVzcykpKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBTdXBwcmVzc2lvbkRlc3Ryb3lSZXNwb25zZSkgPT4gKHtcbiAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlLFxuICAgICAgICB2YWx1ZTogcmVzcG9uc2UuYm9keS52YWx1ZSB8fCAnJyxcbiAgICAgICAgYWRkcmVzczogcmVzcG9uc2UuYm9keS5hZGRyZXNzIHx8ICcnLFxuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c1xuICAgICAgfSkpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU3VwcHJlc3Npb25DbGllbnQ7XG4iLCJpbXBvcnQgeyBTdXBwcmVzc2lvbk1vZGVscyB9IGZyb20gJy4uLy4uL0VudW1zJztcbmltcG9ydCB7IElVbnN1YnNjcmliZSB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCB7IFVuc3Vic2NyaWJlRGF0YSB9IGZyb20gJy4uLy4uL1R5cGVzL1N1cHByZXNzaW9ucyc7XG5cbmltcG9ydCBTdXBwcmVzc2lvbiBmcm9tICcuL1N1cHByZXNzaW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVW5zdWJzY3JpYmUgZXh0ZW5kcyBTdXBwcmVzc2lvbiBpbXBsZW1lbnRzIElVbnN1YnNjcmliZSB7XG4gICAgYWRkcmVzczogc3RyaW5nO1xuICAgIHRhZ3M6IHN0cmluZ1tdO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuICAgIGNyZWF0ZWRfYXQ6IERhdGU7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBVbnN1YnNjcmliZURhdGEpIHtcbiAgICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLlVOU1VCU0NSSUJFUyk7XG4gICAgICB0aGlzLmFkZHJlc3MgPSBkYXRhLmFkZHJlc3M7XG4gICAgICB0aGlzLnRhZ3MgPSBkYXRhLnRhZ3M7XG4gICAgICB0aGlzLmNyZWF0ZWRfYXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFN1cHByZXNzaW9uTW9kZWxzIH0gZnJvbSAnLi4vLi4vRW51bXMnO1xuaW1wb3J0IHsgSVdoaXRlTGlzdCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCB7IFdoaXRlTGlzdERhdGEgfSBmcm9tICcuLi8uLi9UeXBlcy9TdXBwcmVzc2lvbnMnO1xuaW1wb3J0IFN1cHByZXNzaW9uIGZyb20gJy4vU3VwcHJlc3Npb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaGl0ZUxpc3QgZXh0ZW5kcyBTdXBwcmVzc2lvbiBpbXBsZW1lbnRzIElXaGl0ZUxpc3Qge1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgcmVhc29uOiBzdHJpbmc7XG4gICAgY3JlYXRlZEF0OiBEYXRlO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YTogV2hpdGVMaXN0RGF0YSkge1xuICAgICAgc3VwZXIoU3VwcHJlc3Npb25Nb2RlbHMuV0hJVEVMSVNUUyk7XG4gICAgICB0aGlzLnZhbHVlID0gZGF0YS52YWx1ZTtcbiAgICAgIHRoaXMucmVhc29uID0gZGF0YS5yZWFzb247XG4gICAgICB0aGlzLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZEF0KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuLi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5pbXBvcnQgeyBBUElSZXNwb25zZSB9IGZyb20gJy4uLy4uL1R5cGVzL0NvbW1vbi9BcGlSZXNwb25zZSc7XG5cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1ZhbGlkYXRpb25zJztcbmltcG9ydCB7XG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYlJlc3VsdCxcbiAgTXVsdGlwbGVWYWxpZGF0aW9uSm9iRGF0YSxcbiAgTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzcG9uc2UsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UXVlcnksXG4gIE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YSxcbiAgQ3JlYXRlZE11bHRpcGxlVmFsaWRhdGlvbkpvYixcbiAgTXVsdGlwbGVWYWxpZGF0aW9uQ3JlYXRpb25EYXRhVXBkYXRlZCxcbiAgQ2FuY2VsZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2Jcbn0gZnJvbSAnLi4vLi4vVHlwZXMvVmFsaWRhdGlvbnMvTXVsdGlwbGVWYWxpZGF0aW9uJztcbmltcG9ydCBBdHRhY2htZW50c0hhbmRsZXIgZnJvbSAnLi4vY29tbW9uL0F0dGFjaG1lbnRzSGFuZGxlcic7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi4vY29tbW9uL0Vycm9yJztcblxuZXhwb3J0IGNsYXNzIE11bHRpcGxlVmFsaWRhdGlvbkpvYiBpbXBsZW1lbnRzIE11bHRpcGxlVmFsaWRhdGlvbkpvYlJlc3VsdCB7XG4gIGNyZWF0ZWRBdDogRGF0ZTtcbiAgaWQ6IHN0cmluZztcbiAgcXVhbnRpdHk6IG51bWJlclxuICByZWNvcmRzUHJvY2Vzc2VkOiBudW1iZXIgfCBudWxsO1xuICBzdGF0dXM6IHN0cmluZztcbiAgZG93bmxvYWRVcmw/OiB7XG4gICAgY3N2OiBzdHJpbmc7XG4gICAganNvbjogc3RyaW5nO1xuICB9O1xuXG4gIHJlc3BvbnNlU3RhdHVzQ29kZTogbnVtYmVyO1xuICBzdW1tYXJ5Pzoge1xuICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgY2F0Y2hBbGw6IG51bWJlcjtcbiAgICAgICAgICBkZWxpdmVyYWJsZTogbnVtYmVyO1xuICAgICAgICAgIGRvTm90U2VuZDogbnVtYmVyO1xuICAgICAgICAgIHVuZGVsaXZlcmFibGU6IG51bWJlcjtcbiAgICAgICAgICB1bmtub3duOiBudW1iZXI7XG4gICAgICB9O1xuICAgICAgcmlzazoge1xuICAgICAgICAgIGhpZ2g6IG51bWJlcjtcbiAgICAgICAgICBsb3c6IG51bWJlcjtcbiAgICAgICAgICBtZWRpdW06IG51bWJlcjtcbiAgICAgICAgICB1bmtub3duOiBudW1iZXI7XG4gICAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihkYXRhOiBNdWx0aXBsZVZhbGlkYXRpb25Kb2JEYXRhLCByZXNwb25zZVN0YXR1c0NvZGU6IG51bWJlcikge1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgICB0aGlzLmlkID0gZGF0YS5pZDtcbiAgICB0aGlzLnF1YW50aXR5ID0gZGF0YS5xdWFudGl0eTtcbiAgICB0aGlzLnJlY29yZHNQcm9jZXNzZWQgPSBkYXRhLnJlY29yZHNfcHJvY2Vzc2VkO1xuICAgIHRoaXMuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgdGhpcy5yZXNwb25zZVN0YXR1c0NvZGUgPSByZXNwb25zZVN0YXR1c0NvZGU7XG4gICAgaWYgKGRhdGEuZG93bmxvYWRfdXJsKSB7XG4gICAgICB0aGlzLmRvd25sb2FkVXJsID0ge1xuICAgICAgICBjc3Y6IGRhdGEuZG93bmxvYWRfdXJsPy5jc3YsXG4gICAgICAgIGpzb246IGRhdGEuZG93bmxvYWRfdXJsPy5qc29uXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZGF0YS5zdW1tYXJ5KSB7XG4gICAgICB0aGlzLnN1bW1hcnkgPSB7XG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIGNhdGNoQWxsOiBkYXRhLnN1bW1hcnkucmVzdWx0LmNhdGNoX2FsbCxcbiAgICAgICAgICBkZWxpdmVyYWJsZTogZGF0YS5zdW1tYXJ5LnJlc3VsdC5kZWxpdmVyYWJsZSxcbiAgICAgICAgICBkb05vdFNlbmQ6IGRhdGEuc3VtbWFyeS5yZXN1bHQuZG9fbm90X3NlbmQsXG4gICAgICAgICAgdW5kZWxpdmVyYWJsZTogZGF0YS5zdW1tYXJ5LnJlc3VsdC51bmRlbGl2ZXJhYmxlLFxuICAgICAgICAgIHVua25vd246IGRhdGEuc3VtbWFyeS5yZXN1bHQudW5rbm93blxuICAgICAgICB9LFxuICAgICAgICByaXNrOiB7XG4gICAgICAgICAgaGlnaDogZGF0YS5zdW1tYXJ5LnJpc2suaGlnaCxcbiAgICAgICAgICBsb3c6IGRhdGEuc3VtbWFyeS5yaXNrLmxvdyxcbiAgICAgICAgICBtZWRpdW06IGRhdGEuc3VtbWFyeS5yaXNrLm1lZGl1bSxcbiAgICAgICAgICB1bmtub3duOiBkYXRhLnN1bW1hcnkucmlzay51bmtub3duXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE11bHRpcGxlVmFsaWRhdGlvbkNsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8TXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQ+XG4gIGltcGxlbWVudHMgSU11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHByaXZhdGUgYXR0YWNobWVudHNIYW5kbGVyOiBBdHRhY2htZW50c0hhbmRsZXI7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlciA9IG5ldyBBdHRhY2htZW50c0hhbmRsZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVzcG9uc2U8VD4ocmVzcG9uc2U6IEFQSVJlc3BvbnNlKTogVCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2U/LmJvZHlcbiAgICB9IGFzIFQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KHJlc3BvbnNlOiBNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFJlc3BvbnNlKVxuICAgIDogTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFJlc3VsdDtcblxuICAgIGRhdGEuam9icyA9IHJlc3BvbnNlLmJvZHkuam9icy5tYXAoKGpvYikgPT4gbmV3IE11bHRpcGxlVmFsaWRhdGlvbkpvYihqb2IsIHJlc3BvbnNlLnN0YXR1cykpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ3Bpdm90Jyk7XG4gICAgZGF0YS50b3RhbCA9IHJlc3BvbnNlLmJvZHkudG90YWw7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxpc3QocXVlcnk/OiBNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFF1ZXJ5KTogUHJvbWlzZTxNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKCcvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrJywgcXVlcnkpO1xuICB9XG5cbiAgYXN5bmMgZ2V0KGxpc3RJZDogc3RyaW5nKTogUHJvbWlzZTxNdWx0aXBsZVZhbGlkYXRpb25Kb2I+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsvJHtsaXN0SWR9YCk7XG4gICAgcmV0dXJuIG5ldyBNdWx0aXBsZVZhbGlkYXRpb25Kb2IocmVzcG9uc2UuYm9keSwgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFRvRXhwZWN0ZWRTaGFwZShkYXRhOiBNdWx0aXBsZVZhbGlkYXRpb25DcmVhdGlvbkRhdGEpXG4gICAgOiBNdWx0aXBsZVZhbGlkYXRpb25DcmVhdGlvbkRhdGFVcGRhdGVkIHtcbiAgICBsZXQgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YTogTXVsdGlwbGVWYWxpZGF0aW9uQ3JlYXRpb25EYXRhVXBkYXRlZDtcbiAgICBpZiAodGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNCdWZmZXIoZGF0YS5maWxlKSkge1xuICAgICAgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YSA9IHsgbXVsdGlwbGVWYWxpZGF0aW9uRmlsZTogZGF0YS5maWxlIH07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YS5maWxlID09PSAnc3RyaW5nJykge1xuICAgICAgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YSA9IHsgbXVsdGlwbGVWYWxpZGF0aW9uRmlsZTogeyBkYXRhOiBkYXRhLmZpbGUgfSB9O1xuICAgIH0gZWxzZSBpZiAodGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNTdHJlYW0oZGF0YS5maWxlKSkge1xuICAgICAgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YSA9IHsgbXVsdGlwbGVWYWxpZGF0aW9uRmlsZTogZGF0YS5maWxlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEgPSB7IG11bHRpcGxlVmFsaWRhdGlvbkZpbGU6IGRhdGEuZmlsZSB9O1xuICAgIH1cblxuICAgIHJldHVybiBtdWx0aXBsZVZhbGlkYXRpb25EYXRhO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKFxuICAgIGxpc3RJZDogc3RyaW5nLFxuICAgIGRhdGE6IE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YVxuICApOiBQcm9taXNlPENyZWF0ZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+IHtcbiAgICBpZiAoIWRhdGEgfHwgIWRhdGEuZmlsZSkge1xuICAgICAgdGhyb3cgQVBJRXJyb3IuZ2V0VXNlckRhdGFFcnJvcignXCJmaWxlXCIgcHJvcGVydHkgZXhwZWN0ZWQuJywgJ01ha2Ugc3VyZSBzZWNvbmQgYXJndW1lbnQgaGFzIFwiZmlsZVwiIHByb3BlcnR5LicpO1xuICAgIH1cbiAgICBjb25zdCBtdWx0aXBsZVZhbGlkYXRpb25EYXRhID0gdGhpcy5jb252ZXJ0VG9FeHBlY3RlZFNoYXBlKGRhdGEpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYC92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsvJHtsaXN0SWR9YCwgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2U8Q3JlYXRlZE11bHRpcGxlVmFsaWRhdGlvbkpvYj4ocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveShsaXN0SWQ6IHN0cmluZyk6IFByb21pc2U8Q2FuY2VsZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5kZWxldGUoYC92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsvJHtsaXN0SWR9YCk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2U8Q2FuY2VsZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+KHJlc3BvbnNlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVZhbGlkYXRpb25DbGllbnQsIElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1ZhbGlkYXRpb25zJztcbmltcG9ydCB7IFZhbGlkYXRpb25RdWVyeSwgVmFsaWRhdGlvblJlc3VsdCwgVmFsaWRhdGlvblJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vVHlwZXMvVmFsaWRhdGlvbnMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWYWxpZGF0ZUNsaWVudCBpbXBsZW1lbnRzIElWYWxpZGF0aW9uQ2xpZW50IHtcbiAgcHVibGljIG11bHRpcGxlVmFsaWRhdGlvbjtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0LCBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQ6IElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubXVsdGlwbGVWYWxpZGF0aW9uID0gbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50O1xuICB9XG5cbiAgYXN5bmMgZ2V0KGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IHF1ZXJ5OiBWYWxpZGF0aW9uUXVlcnkgPSB7IGFkZHJlc3MgfTtcbiAgICBjb25zdCByZXN1bHQ6IFZhbGlkYXRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy92NC9hZGRyZXNzL3ZhbGlkYXRlJywgcXVlcnkpO1xuICAgIHJldHVybiByZXN1bHQuYm9keSBhcyBWYWxpZGF0aW9uUmVzdWx0O1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgeyBXZWJob29rc0lkcyB9IGZyb20gJy4uL0VudW1zJztcbmltcG9ydCB7IElXZWJIb29rc0NsaWVudCB9IGZyb20gJy4uL0ludGVyZmFjZXMvV2ViaG9va3MnO1xuXG5pbXBvcnQge1xuICBXZWJob29rVmFsaWRhdGlvblJlc3BvbnNlLFxuICBXZWJob29rTGlzdCxcbiAgV2ViaG9va1Jlc3BvbnNlLFxuICBXZWJob29rc1F1ZXJ5LFxuICBXZWJob29rUmVzdWx0XG59IGZyb20gJy4uL1R5cGVzL1dlYmhvb2tzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgY2xhc3MgV2ViaG9vayBpbXBsZW1lbnRzIFdlYmhvb2tSZXN1bHQge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdXJsczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgdXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsIHVybHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMudXJsID0gdXJsO1xuICAgIHRoaXMudXJscyA9IHVybHM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViaG9va3NDbGllbnQgaW1wbGVtZW50cyBJV2ViSG9va3NDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VXZWJob29rTGlzdChyZXNwb25zZTogeyBib2R5OiB7IHdlYmhvb2tzOiBXZWJob29rTGlzdCB9IH0pOiBXZWJob29rTGlzdCB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkud2ViaG9va3M7XG4gIH1cblxuICBfcGFyc2VXZWJob29rV2l0aElEKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc3BvbnNlOiBXZWJob29rUmVzcG9uc2UpOiBXZWJob29rUmVzdWx0IHtcbiAgICAgIGNvbnN0IHdlYmhvb2tSZXNwb25zZSA9IHJlc3BvbnNlPy5ib2R5Py53ZWJob29rO1xuICAgICAgbGV0IHVybCA9IHdlYmhvb2tSZXNwb25zZT8udXJsO1xuICAgICAgbGV0IHVybHMgPSB3ZWJob29rUmVzcG9uc2U/LnVybHM7XG4gICAgICBpZiAoIXVybCkge1xuICAgICAgICB1cmwgPSB1cmxzICYmIHVybHMubGVuZ3RoXG4gICAgICAgICAgPyB1cmxzWzBdXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoKCF1cmxzIHx8IHVybHMubGVuZ3RoID09PSAwKSAmJiB1cmwpIHtcbiAgICAgICAgdXJscyA9IFt1cmxdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBXZWJob29rKGlkLCB1cmwsIHVybHMgYXMgc3RyaW5nW10pO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVdlYmhvb2tUZXN0KHJlc3BvbnNlOiB7IGJvZHk6IHsgY29kZTogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcgfSB9KVxuICA6IHtjb2RlOiBudW1iZXIsIG1lc3NhZ2U6c3RyaW5nfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6IHJlc3BvbnNlLmJvZHkuY29kZSxcbiAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZVxuICAgIH0gYXMgV2ViaG9va1ZhbGlkYXRpb25SZXNwb25zZTtcbiAgfVxuXG4gIGxpc3QoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5OiBXZWJob29rc1F1ZXJ5KTogUHJvbWlzZTxXZWJob29rTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnKSwgcXVlcnkpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tMaXN0KTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZywgaWQ6IFdlYmhvb2tzSWRzKTogUHJvbWlzZTxXZWJob29rUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkKSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG5cbiAgY3JlYXRlKGRvbWFpbjogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgdGVzdCA9IGZhbHNlKTogUHJvbWlzZTxXZWJob29rUmVzdWx0IHwgV2ViaG9va1ZhbGlkYXRpb25SZXNwb25zZT4ge1xuICAgIGlmICh0ZXN0KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJywgaWQsICd0ZXN0JyksIHsgdXJsIH0pXG4gICAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1Rlc3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJyksIHsgaWQsIHVybCB9KVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cblxuICB1cGRhdGUoZG9tYWluOiBzdHJpbmcsIGlkOiBzdHJpbmcsIHVybFZhbHVlczogc3RyaW5nIHwgc3RyaW5nW10pOiBQcm9taXNlPFdlYmhvb2tSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJywgaWQpLCB7IHVybDogdXJsVmFsdWVzIH0pXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxuXG4gIGRlc3Ryb3koZG9tYWluOiBzdHJpbmcsIGlkOiBzdHJpbmcpIDogUHJvbWlzZTxXZWJob29rUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkKSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBDdXN0b21GaWxlLCBDdXN0b21GaWxlRGF0YSB9IGZyb20gJy4uLy4uL1R5cGVzJztcbmltcG9ydCBBUElFcnJvciBmcm9tICcuL0Vycm9yJztcbmltcG9ydCB7IEF0dGFjaG1lbnRJbmZvLCBTdHJlYW1WYWx1ZSB9IGZyb20gJy4uLy4uL1R5cGVzL0NvbW1vbi9BdHRhY2htZW50cyc7XG5cbmNsYXNzIEJsb2JGcm9tU3RyZWFtIHtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBSZWFkYWJsZVxuICBzaXplOiBudW1iZXJcblxuICBjb25zdHJ1Y3RvcihzdHJlYW06IFJlYWRhYmxlLCBzaXplOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5zaXplID0gc2l6ZTtcbiAgfVxuXG4gIHN0cmVhbSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RyZWFtO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQmxvYic7XG4gIH1cbn1cblxuY2xhc3MgQXR0YWNobWVudHNIYW5kbGVyIHtcbiAgcHJpdmF0ZSBnZXRBdHRhY2htZW50T3B0aW9ucyhpdGVtOiB7XG4gICAgZmlsZW5hbWU/OiBzdHJpbmc7XG4gICAgY29udGVudFR5cGU/IDogc3RyaW5nO1xuICAgIGtub3duTGVuZ3RoPzogbnVtYmVyO1xuICB9KTogQXR0YWNobWVudEluZm8ge1xuICAgIGNvbnN0IHtcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgY29udGVudFR5cGUsXG4gICAgICBrbm93bkxlbmd0aCxcbiAgICB9ID0gaXRlbTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uKGZpbGVuYW1lID8geyBmaWxlbmFtZSB9IDogeyBmaWxlbmFtZTogJ2ZpbGUnIH0pLFxuICAgICAgLi4uKGNvbnRlbnRUeXBlICYmIHsgY29udGVudFR5cGUgfSksXG4gICAgICAuLi4oa25vd25MZW5ndGggJiYgeyBrbm93bkxlbmd0aCB9KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVJbmZvKGZpbGU6IEZpbGUpIHsgLy8gYnJvd3NlciBjb21wbGlhbnQgZmlsZVxuICAgIGNvbnN0IHtcbiAgICAgIG5hbWU6IGZpbGVuYW1lLFxuICAgICAgdHlwZTogY29udGVudFR5cGUsXG4gICAgICBzaXplOiBrbm93bkxlbmd0aCxcbiAgICB9ID0gZmlsZTtcbiAgICByZXR1cm4gdGhpcy5nZXRBdHRhY2htZW50T3B0aW9ucyh7IGZpbGVuYW1lLCBjb250ZW50VHlwZSwga25vd25MZW5ndGggfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1c3RvbUZpbGVJbmZvKGZpbGU6IEN1c3RvbUZpbGUpIHsgLy8gY3VzdG9tIGNyZWF0ZWQgZmlsZVxuICAgIGNvbnN0IHtcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgY29udGVudFR5cGUsXG4gICAgICBrbm93bkxlbmd0aCxcbiAgICB9ID0gZmlsZTtcbiAgICByZXR1cm4gdGhpcy5nZXRBdHRhY2htZW50T3B0aW9ucyh7IGZpbGVuYW1lLCBjb250ZW50VHlwZSwga25vd25MZW5ndGggfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEJ1ZmZlckluZm8oYnVmZmVyOiBCdWZmZXIpIHtcbiAgICBjb25zdCB7XG4gICAgICBieXRlTGVuZ3RoOiBrbm93bkxlbmd0aCxcbiAgICB9ID0gYnVmZmVyO1xuICAgIHJldHVybiB0aGlzLmdldEF0dGFjaG1lbnRPcHRpb25zKHsgZmlsZW5hbWU6ICdmaWxlJywgY29udGVudFR5cGU6ICcnLCBrbm93bkxlbmd0aCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpc1N0cmVhbShkYXRhOiB1bmtub3duKSA6IGRhdGEgaXMgU3RyZWFtVmFsdWUge1xuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIChkYXRhIGFzIFN0cmVhbVZhbHVlKS5waXBlID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgcHVibGljIGlzQ3VzdG9tRmlsZShvYmo6IHVua25vd24pOiBvYmogaXMgQ3VzdG9tRmlsZSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnXG4gICAgICAmJiAhIShvYmogYXMgQ3VzdG9tRmlsZSkuZGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBpc0Jyb3dzZXJGaWxlKG9iajogdW5rbm93bik6IG9iaiBpcyBGaWxlIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgKCEhKG9iaiBhcyBGaWxlKS5uYW1lIHx8ICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqIGluc3RhbmNlb2YgQmxvYikpO1xuICB9XG5cbiAgcHVibGljIGlzQnVmZmVyKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEJ1ZmZlciB7XG4gICAgcmV0dXJuIHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIEJ1ZmZlci5pc0J1ZmZlcihkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBdHRhY2htZW50SW5mbyhcbiAgICBhdHRhY2htZW50OiBDdXN0b21GaWxlIHwgRmlsZSB8IHN0cmluZyB8IEN1c3RvbUZpbGVEYXRhXG4gICk6IEF0dGFjaG1lbnRJbmZvIHtcbiAgICBjb25zdCBpc0Jyb3dzZXJGaWxlID0gdGhpcy5pc0Jyb3dzZXJGaWxlKGF0dGFjaG1lbnQpO1xuICAgIGNvbnN0IGlzQ3VzdG9tRmlsZSA9IHRoaXMuaXNDdXN0b21GaWxlKGF0dGFjaG1lbnQpO1xuICAgIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIGF0dGFjaG1lbnQgPT09ICdzdHJpbmcnO1xuICAgIGlmICghaXNTdHJpbmcpIHtcbiAgICAgIGlmIChpc0Jyb3dzZXJGaWxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpbGVJbmZvKGF0dGFjaG1lbnQgYXMgRmlsZSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgQnVmZmVyLmlzQnVmZmVyKGF0dGFjaG1lbnQpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ1ZmZlckluZm8oYXR0YWNobWVudCBhcyBCdWZmZXIpO1xuICAgICAgfVxuICAgICAgaWYgKGlzQ3VzdG9tRmlsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDdXN0b21GaWxlSW5mbyhhdHRhY2htZW50IGFzIEN1c3RvbUZpbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnM6IEF0dGFjaG1lbnRJbmZvID0ge1xuICAgICAgZmlsZW5hbWU6ICdmaWxlJyxcbiAgICAgIGNvbnRlbnRUeXBlOiB1bmRlZmluZWQsXG4gICAgICBrbm93bkxlbmd0aDogdW5kZWZpbmVkXG4gICAgfTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBjb252ZXJ0VG9GRGV4cGVjdGVkU2hhcGUoXG4gICAgdXNlclByb3ZpZGVkVmFsdWU6IEN1c3RvbUZpbGUgfCBGaWxlIHwgc3RyaW5nIHwgQ3VzdG9tRmlsZURhdGFcbiAgKSB7XG4gICAgY29uc3QgaXNTdHJlYW0gPSB0aGlzLmlzU3RyZWFtKHVzZXJQcm92aWRlZFZhbHVlKTtcbiAgICBjb25zdCBpc0Jyb3dzZXJGaWxlID0gdGhpcy5pc0Jyb3dzZXJGaWxlKHVzZXJQcm92aWRlZFZhbHVlKTtcbiAgICBjb25zdCBpc0N1c3RvbUZpbGUgPSB0aGlzLmlzQ3VzdG9tRmlsZSh1c2VyUHJvdmlkZWRWYWx1ZSk7XG4gICAgY29uc3QgaXNTdHJpbmcgPSB0eXBlb2YgdXNlclByb3ZpZGVkVmFsdWUgPT09ICdzdHJpbmcnO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKGlzU3RyZWFtIHx8IGlzU3RyaW5nIHx8IGlzQnJvd3NlckZpbGUgfHwgdGhpcy5pc0J1ZmZlcih1c2VyUHJvdmlkZWRWYWx1ZSkpIHtcbiAgICAgIHJlc3VsdCA9IHVzZXJQcm92aWRlZFZhbHVlO1xuICAgIH0gZWxzZSBpZiAoaXNDdXN0b21GaWxlKSB7XG4gICAgICByZXN1bHQgPSB1c2VyUHJvdmlkZWRWYWx1ZS5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgICBgVW5rbm93biBhdHRhY2htZW50IHR5cGUgJHt0eXBlb2YgdXNlclByb3ZpZGVkVmFsdWV9YCxcbiAgICAgICAgYFRoZSBcImF0dGFjaG1lbnRcIiBwcm9wZXJ0eSBleHBlY3RzIGVpdGhlciBCdWZmZXIsIEJsb2IsIG9yIFN0cmluZy5cbiAgICAgICAgICBBbHNvLCBJdCBpcyBwb3NzaWJsZSB0byBwcm92aWRlIGFuIG9iamVjdCB0aGF0IGhhcyB0aGUgcHJvcGVydHkgXCJkYXRhXCIgd2l0aCBhIHZhbHVlIHRoYXQgaXMgZXF1YWwgdG8gb25lIG9mIHRoZSB0eXBlcyBjb3VudGVkIGJlZm9yZS5cbiAgICAgICAgICBBZGRpdGlvbmFsbHksIHlvdSBtYXkgdXNlIGFuIGFycmF5IHRvIHNlbmQgbW9yZSB0aGFuIG9uZSBhdHRhY2htZW50LmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0QmxvYkZyb21TdHJlYW0oc3RyZWFtOiBSZWFkYWJsZSwgc2l6ZTogbnVtYmVyKTogQmxvYkZyb21TdHJlYW0ge1xuICAgIHJldHVybiBuZXcgQmxvYkZyb21TdHJlYW0oc3RyZWFtLCBzaXplKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBdHRhY2htZW50c0hhbmRsZXI7XG4iLCJpbXBvcnQgeyBBUElFcnJvck9wdGlvbnMsIEFQSUVycm9yVHlwZSB9IGZyb20gJy4uLy4uL1R5cGVzL0NvbW1vbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFQSUVycm9yIGV4dGVuZHMgRXJyb3IgaW1wbGVtZW50cyBBUElFcnJvclR5cGUge1xuICBwdWJsaWMgc3RhdHVzOiBudW1iZXIgO1xuICBwdWJsaWMgc3RhY2s6IHN0cmluZztcbiAgcHVibGljIGRldGFpbHM6IHN0cmluZztcbiAgcHVibGljIHR5cGU6IHN0cmluZztcblxuICBwdWJsaWMgc3RhdGljIGdldFVzZXJEYXRhRXJyb3Ioc3RhdHVzVGV4dDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IHRoaXMoe1xuICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICBzdGF0dXNUZXh0LFxuICAgICAgYm9keToge1xuICAgICAgICBtZXNzYWdlXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgc3RhdHVzLFxuICAgIHN0YXR1c1RleHQsXG4gICAgbWVzc2FnZSxcbiAgICBib2R5ID0ge31cbiAgfTogQVBJRXJyb3JPcHRpb25zKSB7XG4gICAgbGV0IGJvZHlNZXNzYWdlID0gJyc7XG4gICAgbGV0IGVycm9yID0gJyc7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgYm9keU1lc3NhZ2UgPSBib2R5O1xuICAgIH0gZWxzZSB7XG4gICAgICBib2R5TWVzc2FnZSA9IGJvZHk/Lm1lc3NhZ2UgfHwgJyc7XG4gICAgICBlcnJvciA9IGJvZHk/LmVycm9yIHx8ICcnO1xuICAgIH1cbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgZXJyb3IgfHwgc3RhdHVzVGV4dCB8fCAnJztcbiAgICB0aGlzLmRldGFpbHMgPSBib2R5TWVzc2FnZTtcbiAgICB0aGlzLnR5cGUgPSAnTWFpbGd1bkFQSUVycm9yJztcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgTm9kZUZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBGb3JtRGF0YUlucHV0LCBJbnB1dEZvcm1EYXRhIH0gZnJvbSAnLi4vLi4vVHlwZXMvQ29tbW9uJztcbmltcG9ydCBBUElFcnJvciBmcm9tICcuL0Vycm9yJztcblxuaW1wb3J0IHtcbiAgQ3VzdG9tRmlsZSxcbiAgQ3VzdG9tRmlsZURhdGEsXG4gIEZvcm1EYXRhSW5wdXRWYWx1ZSxcbiAgTWVzc2FnZUF0dGFjaG1lbnQsXG4gIE1pbWVNZXNzYWdlXG59IGZyb20gJy4uLy4uL1R5cGVzJztcbmltcG9ydCBBdHRhY2htZW50c0hhbmRsZXIgZnJvbSAnLi9BdHRhY2htZW50c0hhbmRsZXInO1xuaW1wb3J0IHsgQXR0YWNobWVudEluZm8gfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24vQXR0YWNobWVudHMnO1xuXG5jbGFzcyBGb3JtRGF0YUJ1aWxkZXIge1xuICBwcml2YXRlIEZvcm1EYXRhQ29uc3RydWN0b3I6IElucHV0Rm9ybURhdGE7XG4gIHByaXZhdGUgZmlsZUtleXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIGF0dGFjaG1lbnRzSGFuZGxlcjogQXR0YWNobWVudHNIYW5kbGVyO1xuXG4gIGNvbnN0cnVjdG9yKEZvcm1EYXRhQ29uc3RydWN0b3I6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLkZvcm1EYXRhQ29uc3RydWN0b3IgPSBGb3JtRGF0YUNvbnN0cnVjdG9yO1xuICAgIHRoaXMuZmlsZUtleXMgPSBbJ2F0dGFjaG1lbnQnLCAnaW5saW5lJywgJ211bHRpcGxlVmFsaWRhdGlvbkZpbGUnXTtcbiAgICB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlciA9IG5ldyBBdHRhY2htZW50c0hhbmRsZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVGb3JtRGF0YShkYXRhOiBGb3JtRGF0YUlucHV0KTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgcHJvdmlkZSBkYXRhIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCBmb3JtRGF0YTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEgPSBPYmplY3Qua2V5cyhkYXRhKVxuICAgICAgLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBkYXRhW2tleV07IH0pXG4gICAgICAucmVkdWNlKChmb3JtRGF0YUFjYzogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEsIGtleSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5maWxlS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgY29uc3QgYXR0YWNobWVudFZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgIGlmICh0aGlzLmlzTWVzc2FnZUF0dGFjaG1lbnQoYXR0YWNobWVudFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRGaWxlc1RvRkQoa2V5LCBhdHRhY2htZW50VmFsdWUsIGZvcm1EYXRhQWNjKTtcbiAgICAgICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgQVBJRXJyb3IuZ2V0VXNlckRhdGFFcnJvcihcbiAgICAgICAgICAgIGBVbmtub3duIHZhbHVlICR7ZGF0YVtrZXldfSB3aXRoIHR5cGUgJHt0eXBlb2YgZGF0YVtrZXldfSBmb3IgcHJvcGVydHkgXCIke2tleX1cImAsXG4gICAgICAgICAgICBgVGhlIGtleSBcIiR7a2V5fVwiIHNob3VsZCBoYXZlIHR5cGUgb2YgQnVmZmVyLCBTdHJlYW0sIEZpbGUsIG9yIFN0cmluZyBgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09ICdtZXNzYWdlJykgeyAvLyBtaW1lIG1lc3NhZ2VcbiAgICAgICAgICBjb25zdCBtZXNzYWdlVmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgaWYgKCFtZXNzYWdlVmFsdWUgfHwgIXRoaXMuaXNNSU1FKG1lc3NhZ2VWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICAgICAgIGBVbmtub3duIGRhdGEgdHlwZSBmb3IgXCIke2tleX1cIiBwcm9wZXJ0eWAsXG4gICAgICAgICAgICAgICdUaGUgbWltZSBkYXRhIHNob3VsZCBoYXZlIHR5cGUgb2YgQnVmZmVyLCBTdHJpbmcgb3IgQmxvYidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYWRkTWltZURhdGFUb0ZEKGtleSwgbWVzc2FnZVZhbHVlLCBmb3JtRGF0YUFjYyk7XG4gICAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hZGRDb21tb25Qcm9wZXJ0eVRvRkQoa2V5LCBkYXRhW2tleV0sIGZvcm1EYXRhQWNjKTtcbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjO1xuICAgICAgfSwgbmV3IHRoaXMuRm9ybURhdGFDb25zdHJ1Y3RvcigpKTtcbiAgICByZXR1cm4gZm9ybURhdGE7XG4gIH1cblxuICBwcml2YXRlIGFkZE1pbWVEYXRhVG9GRChcbiAgICBrZXk6IHN0cmluZyxcbiAgICBkYXRhOiBNaW1lTWVzc2FnZSxcbiAgICBmb3JtRGF0YUluc3RhbmNlOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7IC8vIGlmIHN0cmluZyBvbmx5IHR3byBwYXJhbWV0ZXJzIHNob3VsZCBiZSB1c2VkLlxuICAgICAgZm9ybURhdGFJbnN0YW5jZS5hcHBlbmQoa2V5LCBkYXRhIGFzIHN0cmluZyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNGb3JtRGF0YVBhY2thZ2UoZm9ybURhdGFJbnN0YW5jZSkpIHsgLy8gZm9ybS1kYXRhIHBhY2thZ2UgaXMgdXNlZFxuICAgICAgY29uc3Qgbm9kZUZvcm1EYXRhID0gZm9ybURhdGFJbnN0YW5jZSBhcyBOb2RlRm9ybURhdGE7XG4gICAgICBub2RlRm9ybURhdGEuYXBwZW5kKGtleSwgZGF0YSwgeyBmaWxlbmFtZTogJ01pbWVNZXNzYWdlJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIEJsb2IgIT09IHVuZGVmaW5lZCkgeyAvLyBlaXRoZXIgbm9kZSA+IDE4IG9yIGJyb3dzZXJcbiAgICAgIGNvbnN0IGJyb3dzZXJGb3JtRGF0YSA9IGZvcm1EYXRhSW5zdGFuY2UgYXMgRm9ybURhdGE7IC8vIEJyb3dzZXIgY29tcGxpYW50IEZvcm1EYXRhXG4gICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgYnJvd3NlckZvcm1EYXRhLmFwcGVuZChrZXksIGRhdGEsICdNaW1lTWVzc2FnZScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNCdWZmZXIoZGF0YSkpIHsgLy8gbm9kZSBlbnZpcm9ubWVudFxuICAgICAgICBjb25zdCBibG9iSW5zdGFuY2UgPSBuZXcgQmxvYihbZGF0YV0pO1xuICAgICAgICBicm93c2VyRm9ybURhdGEuYXBwZW5kKGtleSwgYmxvYkluc3RhbmNlLCAnTWltZU1lc3NhZ2UnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNNSU1FKGRhdGE6IHVua25vd24pIDogZGF0YSBpcyBNaW1lTWVzc2FnZSB7XG4gICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJ1xuICAgICAgfHwgKHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhIGluc3RhbmNlb2YgQmxvYilcbiAgICAgIHx8IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzQnVmZmVyKGRhdGEpXG4gICAgICB8fCAodHlwZW9mIFJlYWRhYmxlU3RyZWFtICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Zvcm1EYXRhUGFja2FnZShvYmo6IHVua25vd24pOiBvYmogaXMgTm9kZUZvcm1EYXRhIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbiAgICAgICYmIG9iaiAhPT0gbnVsbFxuICAgICAgJiYgdHlwZW9mIChvYmogYXMgTm9kZUZvcm1EYXRhKS5nZXRIZWFkZXJzID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgcHJpdmF0ZSBpc01lc3NhZ2VBdHRhY2htZW50KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgTWVzc2FnZUF0dGFjaG1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc0N1c3RvbUZpbGUodmFsdWUpXG4gICAgICB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICB8fCAodHlwZW9mIEZpbGUgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgRmlsZSlcbiAgICAgIHx8ICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBCbG9iKVxuICAgICAgfHwgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNCdWZmZXIodmFsdWUpXG4gICAgICB8fCB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc1N0cmVhbSh2YWx1ZSlcbiAgICAgIHx8IChcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUuZXZlcnkoXG4gICAgICAgICAgKGl0ZW0pID0+IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzQ3VzdG9tRmlsZShpdGVtKVxuICAgICAgICAgICAgfHwgKHR5cGVvZiBGaWxlICE9PSAndW5kZWZpbmVkJyAmJiBpdGVtIGluc3RhbmNlb2YgRmlsZSlcbiAgICAgICAgICAgIHx8ICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBCbG9iKVxuICAgICAgICAgICAgfHwgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNCdWZmZXIoaXRlbSlcbiAgICAgICAgICAgIHx8IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzU3RyZWFtKGl0ZW0pXG4gICAgICAgIClcbiAgICAgIClcblxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFkZEZpbGVzVG9GRChcbiAgICBwcm9wZXJ0eU5hbWU6IHR5cGVvZiB0aGlzLmZpbGVLZXlzW251bWJlcl0sXG4gICAgdmFsdWU6IE1lc3NhZ2VBdHRhY2htZW50LFxuICAgIGZvcm1EYXRhSW5zdGFuY2U6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGFwcGVuZEZpbGVUb0ZEID0gKFxuICAgICAgb3JpZ2luYWxLZXk6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnQ6IEN1c3RvbUZpbGUgfCBGaWxlIHwgc3RyaW5nfCBDdXN0b21GaWxlRGF0YSxcbiAgICAgIGZvcm1EYXRhOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICAgICk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gb3JpZ2luYWxLZXkgPT09ICdtdWx0aXBsZVZhbGlkYXRpb25GaWxlJyA/ICdmaWxlJyA6IG9yaWdpbmFsS2V5O1xuICAgICAgY29uc3Qgb2JqRGF0YSA9IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmNvbnZlcnRUb0ZEZXhwZWN0ZWRTaGFwZShhdHRhY2htZW50KTtcbiAgICAgIGNvbnN0IG9wdGlvbnM6IEF0dGFjaG1lbnRJbmZvID0gdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuZ2V0QXR0YWNobWVudEluZm8oYXR0YWNobWVudCk7XG5cbiAgICAgIGlmICh0aGlzLmlzRm9ybURhdGFQYWNrYWdlKGZvcm1EYXRhKSkge1xuICAgICAgICBjb25zdCBmZCA9IGZvcm1EYXRhIGFzIE5vZGVGb3JtRGF0YTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHR5cGVvZiBvYmpEYXRhID09PSAnc3RyaW5nJyA/IEJ1ZmZlci5mcm9tKG9iakRhdGEpIDogb2JqRGF0YTtcbiAgICAgICAgZmQuYXBwZW5kKGtleSwgZGF0YSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBCbG9iICE9PSB1bmRlZmluZWQpIHsgLy8gZWl0aGVyIG5vZGUgPiAxOCBvciBicm93c2VyXG4gICAgICAgIGNvbnN0IGJyb3dzZXJGb3JtRGF0YSA9IGZvcm1EYXRhSW5zdGFuY2UgYXMgRm9ybURhdGE7IC8vIEJyb3dzZXIgY29tcGxpYW50IEZvcm1EYXRhXG5cbiAgICAgICAgaWYgKHR5cGVvZiBvYmpEYXRhID09PSAnc3RyaW5nJyB8fCB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc0J1ZmZlcihvYmpEYXRhKSkge1xuICAgICAgICAgIGNvbnN0IGJsb2JJbnN0YW5jZSA9IG5ldyBCbG9iKFtvYmpEYXRhXSk7XG4gICAgICAgICAgYnJvd3NlckZvcm1EYXRhLmFwcGVuZChrZXksIGJsb2JJbnN0YW5jZSwgb3B0aW9ucy5maWxlbmFtZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9iakRhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgICAgYnJvd3NlckZvcm1EYXRhLmFwcGVuZChrZXksIG9iakRhdGEsIG9wdGlvbnMuZmlsZW5hbWUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc1N0cmVhbShvYmpEYXRhKSkge1xuICAgICAgICAgIGNvbnN0IGJsb2IgPSB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5nZXRCbG9iRnJvbVN0cmVhbShcbiAgICAgICAgICAgIG9iakRhdGEgYXMgdW5rbm93biBhcyBSZWFkYWJsZSxcbiAgICAgICAgICAgIG9wdGlvbnMua25vd25MZW5ndGggYXMgbnVtYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicm93c2VyRm9ybURhdGEuc2V0KGtleSwgYmxvYiBhcyB1bmtub3duIGFzIEZpbGUsIG9wdGlvbnMuZmlsZW5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBhcHBlbmRGaWxlVG9GRChwcm9wZXJ0eU5hbWUsIGl0ZW0sIGZvcm1EYXRhSW5zdGFuY2UpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZEZpbGVUb0ZEKHByb3BlcnR5TmFtZSwgdmFsdWUsIGZvcm1EYXRhSW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29tbW9uUHJvcGVydHlUb0ZEKFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlOiBGb3JtRGF0YUlucHV0VmFsdWUsXG4gICAgZm9ybURhdGFBY2M6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGFkZFZhbHVlQmFzZWRPbkZEID0gKGZkS2V5OiBzdHJpbmcsIGZkVmFsdWU6IEZvcm1EYXRhSW5wdXRWYWx1ZSk6IHZvaWQgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNGb3JtRGF0YVBhY2thZ2UoZm9ybURhdGFBY2MpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmRWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHJlY2VpdmVkIHZhbHVlIGlzIGFuIG9iamVjdC4gXFxuJ1xuICAgICAgICAgICsgJ1wiSlNPTi5TdHJpbmdpZnlcIiB3aWxsIGJlIHVzZWQgdG8gYXZvaWQgVHlwZUVycm9yIFxcbidcbiAgICAgICAgICArICdUbyByZW1vdmUgdGhpcyB3YXJuaW5nOiBcXG4nXG4gICAgICAgICAgKyAnQ29uc2lkZXIgc3dpdGNoaW5nIHRvIGJ1aWx0LWluIEZvcm1EYXRhIG9yIGNvbnZlcnRpbmcgdGhlIHZhbHVlIG9uIHlvdXIgb3duLlxcbicpO1xuICAgICAgICAgIHJldHVybiBmb3JtRGF0YUFjYy5hcHBlbmQoZmRLZXksIEpTT04uc3RyaW5naWZ5KGZkVmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybURhdGFBY2MuYXBwZW5kKGZkS2V5LCBmZFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZmRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjLmFwcGVuZChmZEtleSwgZmRWYWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIEJsb2IgIT09IHVuZGVmaW5lZCAmJiBmZFZhbHVlIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICByZXR1cm4gZm9ybURhdGFBY2MuYXBwZW5kKGZkS2V5LCBmZFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICdVbmtub3duIHZhbHVlIHR5cGUgZm9yIEZvcm0gRGF0YS4gU3RyaW5nIG9yIEJsb2IgZXhwZWN0ZWQnLFxuICAgICAgICAnQnJvd3NlciBjb21wbGlhbnQgRm9ybURhdGEgYWxsb3dzIG9ubHkgc3RyaW5nIG9yIEJsb2IgdmFsdWVzIGZvciBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBhdHRhY2htZW50cy4nXG4gICAgICApO1xuICAgIH07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IEZvcm1EYXRhSW5wdXRWYWx1ZSkge1xuICAgICAgICBhZGRWYWx1ZUJhc2VkT25GRChrZXksIGl0ZW0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBhZGRWYWx1ZUJhc2VkT25GRChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IEZvcm1EYXRhQnVpbGRlcjtcbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBBUElFcnJvciBmcm9tICcuL0Vycm9yJztcblxuaW1wb3J0IHtcbiAgUGFnZXNMaXN0QWNjdW11bGF0b3IsXG4gIFBhcnNlZFBhZ2UsXG4gIFBhcnNlZFBhZ2VzTGlzdCxcbiAgUXVlcnlXaXRoUGFnZSxcbiAgUmVzcG9uc2VXaXRoUGFnaW5nLFxuICBVcGRhdGVkVXJsQW5kUXVlcnksXG4gIEFQSUVycm9yT3B0aW9uc1xufSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24nO1xuaW1wb3J0IHtcbiAgSUJvdW5jZSxcbiAgSUNvbXBsYWludCxcbiAgSVVuc3Vic2NyaWJlLFxuICBJV2hpdGVMaXN0XG59IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vUmVxdWVzdCc7XG5pbXBvcnQge1xuICBTdXBwcmVzc2lvbkRhdGFUeXBlXG59IGZyb20gJy4uLy4uL1R5cGVzL1N1cHByZXNzaW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGFic3RyYWN0IGNsYXNzIE5hdmlnYXRpb25UaHJ1UGFnZXMgPFQ+IHtcbiAgcmVxdWVzdD86IFJlcXVlc3Q7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q/OiBSZXF1ZXN0KSB7XG4gICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlUGFnZShcbiAgICBpZDogc3RyaW5nLFxuICAgIHBhZ2VVcmw6IHN0cmluZyxcbiAgICB1cmxTZXBhcmF0b3I6IHN0cmluZyxcbiAgICBpdGVyYXRvck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICApIDogUGFyc2VkUGFnZSB7XG4gICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChwYWdlVXJsKTtcbiAgICBjb25zdCB7IHNlYXJjaFBhcmFtcyB9ID0gcGFyc2VkVXJsO1xuXG4gICAgY29uc3QgcGFnZVZhbHVlID0gcGFnZVVybCAmJiB0eXBlb2YgcGFnZVVybCA9PT0gJ3N0cmluZycgPyBwYWdlVXJsLnNwbGl0KHVybFNlcGFyYXRvcikucG9wKCkgfHwgJycgOiAnJztcbiAgICBsZXQgaXRlcmF0b3JQb3NpdGlvbiA9IG51bGw7XG4gICAgaWYgKGl0ZXJhdG9yTmFtZSkge1xuICAgICAgaXRlcmF0b3JQb3NpdGlvbiA9IHNlYXJjaFBhcmFtcy5oYXMoaXRlcmF0b3JOYW1lKVxuICAgICAgICA/IHNlYXJjaFBhcmFtcy5nZXQoaXRlcmF0b3JOYW1lKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgcGFnZTogdXJsU2VwYXJhdG9yID09PSAnPycgPyBgPyR7cGFnZVZhbHVlfWAgOiBwYWdlVmFsdWUsXG4gICAgICBpdGVyYXRvclBvc2l0aW9uLFxuICAgICAgdXJsOiBwYWdlVXJsXG4gICAgfSBhcyBQYXJzZWRQYWdlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlUGFnZUxpbmtzKFxuICAgIHJlc3BvbnNlOiBSZXNwb25zZVdpdGhQYWdpbmcsXG4gICAgdXJsU2VwYXJhdG9yOiBzdHJpbmcsXG4gICAgaXRlcmF0b3JOYW1lPzogc3RyaW5nXG4gICk6IFBhcnNlZFBhZ2VzTGlzdCB7XG4gICAgY29uc3QgcGFnZXMgPSBPYmplY3QuZW50cmllcyhyZXNwb25zZS5ib2R5LnBhZ2luZyk7XG4gICAgcmV0dXJuIHBhZ2VzLnJlZHVjZShcbiAgICAgIChhY2M6IFBhZ2VzTGlzdEFjY3VtdWxhdG9yLCBbaWQsIHBhZ2VVcmxdOiBbIGlkOiBzdHJpbmcsIHBhZ2VVcmw6IHN0cmluZ10pID0+IHtcbiAgICAgICAgYWNjW2lkXSA9IHRoaXMucGFyc2VQYWdlKGlkLCBwYWdlVXJsLCB1cmxTZXBhcmF0b3IsIGl0ZXJhdG9yTmFtZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fVxuICAgICkgYXMgdW5rbm93biBhcyBQYXJzZWRQYWdlc0xpc3Q7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVVybEFuZFF1ZXJ5KGNsaWVudFVybDogc3RyaW5nLCBxdWVyeT86IFF1ZXJ5V2l0aFBhZ2UpOiBVcGRhdGVkVXJsQW5kUXVlcnkge1xuICAgIGxldCB1cmwgPSBjbGllbnRVcmw7XG4gICAgY29uc3QgcXVlcnlDb3B5ID0geyAuLi5xdWVyeSB9O1xuICAgIGlmIChxdWVyeUNvcHkucGFnZSkge1xuICAgICAgdXJsID0gdXJsam9pbihjbGllbnRVcmwsIHF1ZXJ5Q29weS5wYWdlKTtcbiAgICAgIGRlbGV0ZSBxdWVyeUNvcHkucGFnZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHVybCxcbiAgICAgIHVwZGF0ZWRRdWVyeTogcXVlcnlDb3B5XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZXF1ZXN0TGlzdFdpdGhQYWdlcyhjbGllbnRVcmw6c3RyaW5nLCBxdWVyeT86IFF1ZXJ5V2l0aFBhZ2UsIE1vZGVsPzoge1xuICAgIG5ldyhkYXRhOiBTdXBwcmVzc2lvbkRhdGFUeXBlKTpcbiAgICBJQm91bmNlIHwgSUNvbXBsYWludCB8IElVbnN1YnNjcmliZSB8IElXaGl0ZUxpc3RcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHsgdXJsLCB1cGRhdGVkUXVlcnkgfSA9IHRoaXMudXBkYXRlVXJsQW5kUXVlcnkoY2xpZW50VXJsLCBxdWVyeSk7XG4gICAgaWYgKHRoaXMucmVxdWVzdCkge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFJlc3BvbnNlV2l0aFBhZ2luZyA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQodXJsLCB1cGRhdGVkUXVlcnkpO1xuICAgICAgLy8gTW9kZWwgaGVyZSBpcyB1c3VhbGx5IHVuZGVmaW5lZCBleGNlcHQgZm9yIFN1cHByZXNzaW9uIENsaWVudFxuICAgICAgcmV0dXJuIHRoaXMucGFyc2VMaXN0KHJlc3BvbnNlLCBNb2RlbCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBBUElFcnJvcih7XG4gICAgICBzdGF0dXM6IDUwMCxcbiAgICAgIHN0YXR1c1RleHQ6ICdSZXF1ZXN0IHByb3BlcnR5IGlzIGVtcHR5JyxcbiAgICAgIGJvZHk6IHsgbWVzc2FnZTogJycgfVxuICAgIH0gYXMgQVBJRXJyb3JPcHRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwYXJzZUxpc3QocmVzcG9uc2U6IFJlc3BvbnNlV2l0aFBhZ2luZywgTW9kZWw/OiB7XG4gICAgbmV3KGRhdGE6IFN1cHByZXNzaW9uRGF0YVR5cGUpOlxuICAgIElCb3VuY2UgfCBJQ29tcGxhaW50IHwgSVVuc3Vic2NyaWJlIHwgSVdoaXRlTGlzdFxuICB9KTogVDtcbn1cbiIsImltcG9ydCAqIGFzIGJhc2U2NCBmcm9tICdiYXNlLTY0JztcbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBheGlvcywge1xuICBBeGlvc0Vycm9yLFxuICBBeGlvc1Jlc3BvbnNlLFxuICBBeGlvc0hlYWRlcnMsXG4gIFJhd0F4aW9zUmVxdWVzdEhlYWRlcnMsXG4gIEF4aW9zUHJveHlDb25maWcsXG59IGZyb20gJ2F4aW9zJztcbmltcG9ydCAqIGFzIE5vZGVGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IEFQSUVycm9yIGZyb20gJy4vRXJyb3InO1xuaW1wb3J0IHtcbiAgT25DYWxsUmVxdWVzdE9wdGlvbnMsXG4gIFJlcXVlc3RPcHRpb25zLFxuICBBUElFcnJvck9wdGlvbnMsXG4gIElucHV0Rm9ybURhdGEsXG4gIEFQSVJlc3BvbnNlLFxuICBJcFBvb2xEZWxldGVEYXRhLFxuICBGb3JtRGF0YUlucHV0XG59IGZyb20gJy4uLy4uL1R5cGVzJztcblxuaW1wb3J0IEZvcm1EYXRhQnVpbGRlciBmcm9tICcuL0Zvcm1EYXRhQnVpbGRlcic7XG5pbXBvcnQgU3ViYWNjb3VudHNDbGllbnQgZnJvbSAnLi4vU3ViYWNjb3VudHMnO1xuXG5jbGFzcyBSZXF1ZXN0IHtcbiAgcHJpdmF0ZSB1c2VybmFtZTogc3RyaW5nO1xuICBwcml2YXRlIGtleTogc3RyaW5nO1xuICBwcml2YXRlIHVybDogc3RyaW5nO1xuICBwcml2YXRlIHRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBoZWFkZXJzOiBBeGlvc0hlYWRlcnM7XG4gIHByaXZhdGUgZm9ybURhdGFCdWlsZGVyOiBGb3JtRGF0YUJ1aWxkZXI7XG4gIHByaXZhdGUgbWF4Qm9keUxlbmd0aDogbnVtYmVyO1xuICBwcml2YXRlIHByb3h5OiBBeGlvc1Byb3h5Q29uZmlnIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLCBmb3JtRGF0YTogSW5wdXRGb3JtRGF0YSkge1xuICAgIHRoaXMudXNlcm5hbWUgPSBvcHRpb25zLnVzZXJuYW1lO1xuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybCBhcyBzdHJpbmc7XG4gICAgdGhpcy50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0O1xuICAgIHRoaXMuaGVhZGVycyA9IHRoaXMubWFrZUhlYWRlcnNGcm9tT2JqZWN0KG9wdGlvbnMuaGVhZGVycyk7XG4gICAgdGhpcy5mb3JtRGF0YUJ1aWxkZXIgPSBuZXcgRm9ybURhdGFCdWlsZGVyKGZvcm1EYXRhKTtcbiAgICB0aGlzLm1heEJvZHlMZW5ndGggPSA1MjQyODgwMDsgLy8gNTAgTUJcbiAgICB0aGlzLnByb3h5ID0gb3B0aW9ucz8ucHJveHk7XG4gIH1cblxuICBhc3luYyByZXF1ZXN0KFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9uQ2FsbE9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPlxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3Qgb3B0aW9uczogT25DYWxsUmVxdWVzdE9wdGlvbnMgPSB7IC4uLm9uQ2FsbE9wdGlvbnMgfTtcbiAgICBkZWxldGUgb3B0aW9ucz8uaGVhZGVycztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IHRoaXMuam9pbkFuZFRyYW5zZm9ybUhlYWRlcnMob25DYWxsT3B0aW9ucyk7XG4gICAgY29uc3QgcGFyYW1zID0geyAuLi5vcHRpb25zIH07XG5cbiAgICBpZiAob3B0aW9ucz8ucXVlcnkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob3B0aW9ucz8ucXVlcnkpLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcmFtcy5wYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKG9wdGlvbnMucXVlcnkpO1xuICAgICAgZGVsZXRlIHBhcmFtcy5xdWVyeTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8uYm9keSkge1xuICAgICAgY29uc3QgYm9keSA9IG9wdGlvbnM/LmJvZHk7XG4gICAgICBwYXJhbXMuZGF0YSA9IGJvZHk7XG4gICAgICBkZWxldGUgcGFyYW1zLmJvZHk7XG4gICAgfVxuICAgIGxldCByZXNwb25zZTogQXhpb3NSZXNwb25zZTtcbiAgICBjb25zdCB1cmxWYWx1ZSA9IHVybGpvaW4odGhpcy51cmwsIHVybCk7XG5cbiAgICB0cnkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5yZXF1ZXN0KHtcbiAgICAgICAgbWV0aG9kOiBtZXRob2QudG9Mb2NhbGVVcHBlckNhc2UoKSxcbiAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICB1cmw6IHVybFZhbHVlLFxuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBtYXhCb2R5TGVuZ3RoOiB0aGlzLm1heEJvZHlMZW5ndGgsXG4gICAgICAgIHByb3h5OiB0aGlzLnByb3h5LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gZXJyIGFzIEF4aW9zRXJyb3I7XG5cbiAgICAgIHRocm93IG5ldyBBUElFcnJvcih7XG4gICAgICAgIHN0YXR1czogZXJyb3JSZXNwb25zZT8ucmVzcG9uc2U/LnN0YXR1cyB8fCA0MDAsXG4gICAgICAgIHN0YXR1c1RleHQ6IGVycm9yUmVzcG9uc2U/LnJlc3BvbnNlPy5zdGF0dXNUZXh0IHx8IGVycm9yUmVzcG9uc2UuY29kZSxcbiAgICAgICAgYm9keTogZXJyb3JSZXNwb25zZT8ucmVzcG9uc2U/LmRhdGEgfHwgZXJyb3JSZXNwb25zZS5tZXNzYWdlXG4gICAgICB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5nZXRSZXNwb25zZUJvZHkocmVzcG9uc2UpO1xuICAgIHJldHVybiByZXMgYXMgQVBJUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFJlc3BvbnNlQm9keShyZXNwb25zZTogQXhpb3NSZXNwb25zZSk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXMgPSB7XG4gICAgICBib2R5OiB7fSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2U/LnN0YXR1c1xuICAgIH0gYXMgQVBJUmVzcG9uc2U7XG5cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAocmVzcG9uc2UuZGF0YSA9PT0gJ01haWxndW4gTWFnbmlmaWNlbnQgQVBJJykge1xuICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICAgIHN0YXR1c1RleHQ6ICdJbmNvcnJlY3QgdXJsJyxcbiAgICAgICAgICBib2R5OiByZXNwb25zZS5kYXRhXG4gICAgICAgIH0gYXMgQVBJRXJyb3JPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHJlcy5ib2R5ID0ge1xuICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5kYXRhXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMuYm9keSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcml2YXRlIGpvaW5BbmRUcmFuc2Zvcm1IZWFkZXJzKFxuICAgIG9uQ2FsbE9wdGlvbnM/OiBPbkNhbGxSZXF1ZXN0T3B0aW9uc1xuICApOiBBeGlvc0hlYWRlcnMge1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gbmV3IEF4aW9zSGVhZGVycygpO1xuXG4gICAgY29uc3QgYmFzaWMgPSBiYXNlNjQuZW5jb2RlKGAke3RoaXMudXNlcm5hbWV9OiR7dGhpcy5rZXl9YCk7XG4gICAgcmVxdWVzdEhlYWRlcnMuc2V0QXV0aG9yaXphdGlvbihgQmFzaWMgJHtiYXNpY31gKTtcbiAgICByZXF1ZXN0SGVhZGVycy5zZXQodGhpcy5oZWFkZXJzKTtcblxuICAgIGNvbnN0IHJlY2VpdmVkT25DYWxsSGVhZGVycyA9IG9uQ2FsbE9wdGlvbnMgJiYgb25DYWxsT3B0aW9ucy5oZWFkZXJzO1xuICAgIGNvbnN0IG9uQ2FsbEhlYWRlcnMgPSB0aGlzLm1ha2VIZWFkZXJzRnJvbU9iamVjdChyZWNlaXZlZE9uQ2FsbEhlYWRlcnMpO1xuICAgIHJlcXVlc3RIZWFkZXJzLnNldChvbkNhbGxIZWFkZXJzKTtcbiAgICByZXR1cm4gcmVxdWVzdEhlYWRlcnM7XG4gIH1cblxuICBwcml2YXRlIG1ha2VIZWFkZXJzRnJvbU9iamVjdChcbiAgICBoZWFkZXJzT2JqZWN0OiBSYXdBeGlvc1JlcXVlc3RIZWFkZXJzID0ge31cbiAgKTogQXhpb3NIZWFkZXJzIHtcbiAgICBsZXQgcmVxdWVzdEhlYWRlcnMgPSBuZXcgQXhpb3NIZWFkZXJzKCk7XG4gICAgcmVxdWVzdEhlYWRlcnMgPSBPYmplY3QuZW50cmllcyhoZWFkZXJzT2JqZWN0KS5yZWR1Y2UoXG4gICAgICAoaGVhZGVyc0FjY3VtdWxhdG9yOiBBeGlvc0hlYWRlcnMsIGN1cnJlbnRQYWlyKSA9PiB7XG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGN1cnJlbnRQYWlyO1xuICAgICAgICBoZWFkZXJzQWNjdW11bGF0b3Iuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gaGVhZGVyc0FjY3VtdWxhdG9yO1xuICAgICAgfSwgcmVxdWVzdEhlYWRlcnNcbiAgICApO1xuICAgIHJldHVybiByZXF1ZXN0SGVhZGVycztcbiAgfVxuXG4gIHNldFN1YmFjY291bnRIZWFkZXIoc3ViYWNjb3VudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5tYWtlSGVhZGVyc0Zyb21PYmplY3Qoe1xuICAgICAgLi4udGhpcy5oZWFkZXJzLFxuICAgICAgW1N1YmFjY291bnRzQ2xpZW50LlNVQkFDQ09VTlRfSEVBREVSXTogc3ViYWNjb3VudElkXG4gICAgfSk7XG4gICAgdGhpcy5oZWFkZXJzLnNldChoZWFkZXJzKTtcbiAgfVxuXG4gIHJlc2V0U3ViYWNjb3VudEhlYWRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmhlYWRlcnMuZGVsZXRlKFN1YmFjY291bnRzQ2xpZW50LlNVQkFDQ09VTlRfSEVBREVSKTtcbiAgfVxuXG4gIHF1ZXJ5KFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBBcnJheTxBcnJheTxzdHJpbmc+PixcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWV0aG9kLCB1cmwsIHsgcXVlcnksIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBjb21tYW5kKFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gfCBzdHJpbmcgfCBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSxcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgYWRkRGVmYXVsdEhlYWRlcnMgPSB0cnVlXG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBsZXQgaGVhZGVycyA9IHt9O1xuICAgIGlmIChhZGREZWZhdWx0SGVhZGVycykge1xuICAgICAgaGVhZGVycyA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnIH07XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgLi4uaGVhZGVycyxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcmVxdWVzdE9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgZ2V0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBBcnJheTxBcnJheTxzdHJpbmc+PixcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5KCdnZXQnLCB1cmwsIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIHBvc3QoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncG9zdCcsIHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBwb3N0V2l0aEZEKFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE6IEZvcm1EYXRhSW5wdXRcbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5mb3JtRGF0YUJ1aWxkZXIuY3JlYXRlRm9ybURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncG9zdCcsIHVybCwgZm9ybURhdGEsIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyB9XG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgcHV0V2l0aEZEKHVybDogc3RyaW5nLCBkYXRhOiBGb3JtRGF0YUlucHV0KTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5mb3JtRGF0YUJ1aWxkZXIuY3JlYXRlRm9ybURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncHV0JywgdXJsLCBmb3JtRGF0YSwge1xuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnIH1cbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICBwYXRjaFdpdGhGRCh1cmw6IHN0cmluZywgZGF0YTogRm9ybURhdGFJbnB1dCk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybURhdGFCdWlsZGVyLmNyZWF0ZUZvcm1EYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3BhdGNoJywgdXJsLCBmb3JtRGF0YSwge1xuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnIH1cbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICBwdXQodXJsOiBzdHJpbmcsIGRhdGE/OiBGb3JtRGF0YUlucHV0IHwgc3RyaW5nLCBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pXG4gIDogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3B1dCcsIHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBkZWxldGUodXJsOiBzdHJpbmcsIGRhdGE/OiBJcFBvb2xEZWxldGVEYXRhKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ2RlbGV0ZScsIHVybCwgZGF0YSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVxdWVzdDtcbiIsImV4cG9ydCBlbnVtIFJlc29sdXRpb24ge1xuICAgIEhPVVIgPSAnaG91cicsXG4gICAgREFZID0gJ2RheScsXG4gICAgTU9OVEggPSAnbW9udGgnXG59XG5cbmV4cG9ydCBlbnVtIFN1cHByZXNzaW9uTW9kZWxzIHtcbiAgICBCT1VOQ0VTID0gJ2JvdW5jZXMnLFxuICAgIENPTVBMQUlOVFMgPSAnY29tcGxhaW50cycsXG4gICAgVU5TVUJTQ1JJQkVTID0gJ3Vuc3Vic2NyaWJlcycsXG4gICAgV0hJVEVMSVNUUyA9ICd3aGl0ZWxpc3RzJ1xufVxuXG5leHBvcnQgZW51bSBXZWJob29rc0lkcyB7XG4gICAgQ0xJQ0tFRCA9ICdjbGlja2VkJyxcbiAgICBDT01QTEFJTkVEID0gJ2NvbXBsYWluZWQnLFxuICAgIERFTElWRVJFRCA9ICdkZWxpdmVyZWQnLFxuICAgIE9QRU5FRCA9ICdvcGVuZWQnLFxuICAgIFBFUk1BTkVOVF9GQUlMID0gJ3Blcm1hbmVudF9mYWlsJyxcbiAgICBURU1QT1JBUllfRkFJTCA9ICd0ZW1wb3JhcnlfZmFpbCcsXG4gICAgVU5TVUJTQ1JJQkVEID0gJ3Vuc3Vic2NyaWJlJyxcbn1cblxuZXhwb3J0IGVudW0gWWVzTm8ge1xuICAgIFlFUyA9ICd5ZXMnLFxuICAgIE5PID0gJ25vJ1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9Mb2dnZXInO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Eb21haW5DcmVkZW50aWFscyc7XG5leHBvcnQgKiBmcm9tICcuL0RvbWFpblRhZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5UZW1wbGF0ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5zQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vSUV2ZW50Q2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vSUlQUG9vbHNDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JSVBzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vQXR0cmlidXRlc0NsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL0ZpbHRlcnNDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9TZWVkc0xpc3RzL1NlZWRzTGlzdHNDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9SZXN1bHRzL0luYm94UGxhY2VtZW50c1Jlc3VsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9SZXN1bHRzL0luYm94UGxhY2VtZW50c1Jlc3VsdHNTaGFyaW5nJztcbiIsImV4cG9ydCAqIGZyb20gJy4vSU1haWxndW5DbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9NYWlsaW5nTGlzdE1lbWJlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9NYWlsaW5nTGlzdHNDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JTWVzc2FnZXNDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JUm91dGVzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vU3RhdHNDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9TdGF0c0NvbnRhaW5lcic7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lTdWJhY2NvdW50c0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0JvdW5jZSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbXBsYWludCc7XG5leHBvcnQgKiBmcm9tICcuL1Vuc3Vic2NyaWJlJztcbmV4cG9ydCAqIGZyb20gJy4vV2hpdGVMaXN0JztcbmV4cG9ydCAqIGZyb20gJy4vSVN1cHByZXNzaW9uc0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL011bHRpcGxlVmFsaWRhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL1ZhbGlkYXRpb24nO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JV2ViSG9va3NDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Db21tb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5zJztcbmV4cG9ydCAqIGZyb20gJy4vTWFpbGd1bkNsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL01haWxpbmdMaXN0cyc7XG5leHBvcnQgKiBmcm9tICcuL1N0YXRzJztcbmV4cG9ydCAqIGZyb20gJy4vU3VwcHJlc3Npb25zJztcbmV4cG9ydCAqIGZyb20gJy4vVmFsaWRhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9FdmVudENsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL1dlYmhvb2tzJztcbmV4cG9ydCAqIGZyb20gJy4vTWVzc2FnZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9Sb3V0ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9JUHMnO1xuZXhwb3J0ICogZnJvbSAnLi9JUFBvb2xzJztcbmV4cG9ydCAqIGZyb20gJy4vU3ViYWNjb3VudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9JbmJveFBsYWNlbWVudHMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9FcnJvcic7XG5leHBvcnQgKiBmcm9tICcuL0FwaVJlc3BvbnNlJztcbmV4cG9ydCAqIGZyb20gJy4vRm9ybURhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdE9wdGlvbnMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Eb21haW5DcmVkZW50aWFscyc7XG5leHBvcnQgKiBmcm9tICcuL0RvbWFpbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5UYWdzJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWluVGVtcGxhdGVzJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWluVHJhY2tpbmcnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9FdmVudHMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JcFBvb2xzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vSVBzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vTWFpbGd1bkNsaWVudE9wdGlvbnMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9NYWlsaW5nTGlzdE1lbWJlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9NYWlsaW5nTGlzdHMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9NZXNzYWdlcyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL1JvdXRlcyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL1N0YXRzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vU3ViYWNjb3VudHMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Cb3VuY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Db21wbGFpbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9TdXBwcmVzc2lvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9VbnN1YnNjcmliZSc7XG5leHBvcnQgKiBmcm9tICcuL1doaXRlTGlzdCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL011bHRpcGxlVmFsaWRhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL1ZhbGlkYXRpb24nO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9XZWJob29rcyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0NvbW1vbic7XG5leHBvcnQgKiBmcm9tICcuL0RvbWFpbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9FdmVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9JUFBvb2xzJztcbmV4cG9ydCAqIGZyb20gJy4vSVBzJztcbmV4cG9ydCAqIGZyb20gJy4vTWFpbGd1bkNsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL01haWxpbmdMaXN0cyc7XG5leHBvcnQgKiBmcm9tICcuL01lc3NhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vUm91dGVzJztcbmV4cG9ydCAqIGZyb20gJy4vU3RhdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9TdWJhY2NvdW50cyc7XG5leHBvcnQgKiBmcm9tICcuL1N1cHByZXNzaW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL1ZhbGlkYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vV2ViaG9va3MnO1xuIiwiaW1wb3J0IE1haWxndW5DbGllbnQgZnJvbSAnLi9DbGFzc2VzL01haWxndW5DbGllbnQnO1xuaW1wb3J0IHsgSU1haWxndW5DbGllbnQgfSBmcm9tICcuL0ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSW5wdXRGb3JtRGF0YSwgTWFpbGd1bkNsaWVudE9wdGlvbnMgfSBmcm9tICcuL1R5cGVzJztcblxuZXhwb3J0ICogYXMgRW51bXMgZnJvbSAnLi9FbnVtcyc7XG5leHBvcnQgKiBmcm9tICcuL1R5cGVzJztcbmV4cG9ydCAqIGFzIEludGVyZmFjZXMgZnJvbSAnLi9JbnRlcmZhY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFpbGd1biB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdCgpOiB0eXBlb2YgTWFpbGd1biB7IHJldHVybiB0aGlzOyB9XG4gIHByaXZhdGUgZm9ybURhdGE6IElucHV0Rm9ybURhdGFcblxuICBjb25zdHJ1Y3RvcihGb3JtRGF0YTogSW5wdXRGb3JtRGF0YSkge1xuICAgIHRoaXMuZm9ybURhdGEgPSBGb3JtRGF0YTtcbiAgfVxuXG4gIGNsaWVudChvcHRpb25zOiBNYWlsZ3VuQ2xpZW50T3B0aW9ucykgOiBJTWFpbGd1bkNsaWVudCB7XG4gICAgcmV0dXJuIG5ldyBNYWlsZ3VuQ2xpZW50KG9wdGlvbnMsIHRoaXMuZm9ybURhdGEpO1xuICB9XG59XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL2Jhc2U2NCB2MS4wLjAgYnkgQG1hdGhpYXMgfCBNSVQgbGljZW5zZSAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGVzIGBleHBvcnRzYC5cblx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cztcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC5cblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdG1vZHVsZS5leHBvcnRzID09IGZyZWVFeHBvcnRzICYmIG1vZHVsZTtcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCwgZnJvbSBOb2RlLmpzIG9yIEJyb3dzZXJpZmllZCBjb2RlLCBhbmQgdXNlXG5cdC8vIGl0IGFzIGByb290YC5cblx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcblx0aWYgKGZyZWVHbG9iYWwuZ2xvYmFsID09PSBmcmVlR2xvYmFsIHx8IGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsKSB7XG5cdFx0cm9vdCA9IGZyZWVHbG9iYWw7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHR2YXIgSW52YWxpZENoYXJhY3RlckVycm9yID0gZnVuY3Rpb24obWVzc2FnZSkge1xuXHRcdHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cdH07XG5cdEludmFsaWRDaGFyYWN0ZXJFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3I7XG5cdEludmFsaWRDaGFyYWN0ZXJFcnJvci5wcm90b3R5cGUubmFtZSA9ICdJbnZhbGlkQ2hhcmFjdGVyRXJyb3InO1xuXG5cdHZhciBlcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcblx0XHQvLyBOb3RlOiB0aGUgZXJyb3IgbWVzc2FnZXMgdXNlZCB0aHJvdWdob3V0IHRoaXMgZmlsZSBtYXRjaCB0aG9zZSB1c2VkIGJ5XG5cdFx0Ly8gdGhlIG5hdGl2ZSBgYXRvYmAvYGJ0b2FgIGltcGxlbWVudGF0aW9uIGluIENocm9taXVtLlxuXHRcdHRocm93IG5ldyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IobWVzc2FnZSk7XG5cdH07XG5cblx0dmFyIFRBQkxFID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuXHQvLyBodHRwOi8vd2hhdHdnLm9yZy9odG1sL2NvbW1vbi1taWNyb3N5bnRheGVzLmh0bWwjc3BhY2UtY2hhcmFjdGVyXG5cdHZhciBSRUdFWF9TUEFDRV9DSEFSQUNURVJTID0gL1tcXHRcXG5cXGZcXHIgXS9nO1xuXG5cdC8vIGBkZWNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYXRvYmAgYXMgZGVzY3JpYmVkIGluIHRoZVxuXHQvLyBIVE1MIFN0YW5kYXJkLiBodHRwOi8vd2hhdHdnLm9yZy9odG1sL3dlYmFwcGFwaXMuaHRtbCNkb20td2luZG93YmFzZTY0LWF0b2Jcblx0Ly8gVGhlIG9wdGltaXplZCBiYXNlNjQtZGVjb2RpbmcgYWxnb3JpdGhtIHVzZWQgaXMgYmFzZWQgb24gQGF0a+KAmXMgZXhjZWxsZW50XG5cdC8vIGltcGxlbWVudGF0aW9uLiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9hdGsvMTAyMDM5NlxuXHR2YXIgZGVjb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0XHRpbnB1dCA9IFN0cmluZyhpbnB1dClcblx0XHRcdC5yZXBsYWNlKFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMsICcnKTtcblx0XHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXHRcdGlmIChsZW5ndGggJSA0ID09IDApIHtcblx0XHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZSgvPT0/JC8sICcnKTtcblx0XHRcdGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0bGVuZ3RoICUgNCA9PSAxIHx8XG5cdFx0XHQvLyBodHRwOi8vd2hhdHdnLm9yZy9DI2FscGhhbnVtZXJpYy1hc2NpaS1jaGFyYWN0ZXJzXG5cdFx0XHQvW14rYS16QS1aMC05L10vLnRlc3QoaW5wdXQpXG5cdFx0KSB7XG5cdFx0XHRlcnJvcihcblx0XHRcdFx0J0ludmFsaWQgY2hhcmFjdGVyOiB0aGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLidcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHZhciBiaXRDb3VudGVyID0gMDtcblx0XHR2YXIgYml0U3RvcmFnZTtcblx0XHR2YXIgYnVmZmVyO1xuXHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHR2YXIgcG9zaXRpb24gPSAtMTtcblx0XHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xuXHRcdFx0YnVmZmVyID0gVEFCTEUuaW5kZXhPZihpbnB1dC5jaGFyQXQocG9zaXRpb24pKTtcblx0XHRcdGJpdFN0b3JhZ2UgPSBiaXRDb3VudGVyICUgNCA/IGJpdFN0b3JhZ2UgKiA2NCArIGJ1ZmZlciA6IGJ1ZmZlcjtcblx0XHRcdC8vIFVubGVzcyB0aGlzIGlzIHRoZSBmaXJzdCBvZiBhIGdyb3VwIG9mIDQgY2hhcmFjdGVyc+KAplxuXHRcdFx0aWYgKGJpdENvdW50ZXIrKyAlIDQpIHtcblx0XHRcdFx0Ly8g4oCmY29udmVydCB0aGUgZmlyc3QgOCBiaXRzIHRvIGEgc2luZ2xlIEFTQ0lJIGNoYXJhY3Rlci5cblx0XHRcdFx0b3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoXG5cdFx0XHRcdFx0MHhGRiAmIGJpdFN0b3JhZ2UgPj4gKC0yICogYml0Q291bnRlciAmIDYpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH07XG5cblx0Ly8gYGVuY29kZWAgaXMgZGVzaWduZWQgdG8gYmUgZnVsbHkgY29tcGF0aWJsZSB3aXRoIGBidG9hYCBhcyBkZXNjcmliZWQgaW4gdGhlXG5cdC8vIEhUTUwgU3RhbmRhcmQ6IGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYnRvYVxuXHR2YXIgZW5jb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0XHRpbnB1dCA9IFN0cmluZyhpbnB1dCk7XG5cdFx0aWYgKC9bXlxcMC1cXHhGRl0vLnRlc3QoaW5wdXQpKSB7XG5cdFx0XHQvLyBOb3RlOiBubyBuZWVkIHRvIHNwZWNpYWwtY2FzZSBhc3RyYWwgc3ltYm9scyBoZXJlLCBhcyBzdXJyb2dhdGVzIGFyZVxuXHRcdFx0Ly8gbWF0Y2hlZCwgYW5kIHRoZSBpbnB1dCBpcyBzdXBwb3NlZCB0byBvbmx5IGNvbnRhaW4gQVNDSUkgYW55d2F5LlxuXHRcdFx0ZXJyb3IoXG5cdFx0XHRcdCdUaGUgc3RyaW5nIHRvIGJlIGVuY29kZWQgY29udGFpbnMgY2hhcmFjdGVycyBvdXRzaWRlIG9mIHRoZSAnICtcblx0XHRcdFx0J0xhdGluMSByYW5nZS4nXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR2YXIgcGFkZGluZyA9IGlucHV0Lmxlbmd0aCAlIDM7XG5cdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdHZhciBwb3NpdGlvbiA9IC0xO1xuXHRcdHZhciBhO1xuXHRcdHZhciBiO1xuXHRcdHZhciBjO1xuXHRcdHZhciBidWZmZXI7XG5cdFx0Ly8gTWFrZSBzdXJlIGFueSBwYWRkaW5nIGlzIGhhbmRsZWQgb3V0c2lkZSBvZiB0aGUgbG9vcC5cblx0XHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoIC0gcGFkZGluZztcblxuXHRcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XG5cdFx0XHQvLyBSZWFkIHRocmVlIGJ5dGVzLCBpLmUuIDI0IGJpdHMuXG5cdFx0XHRhID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbikgPDwgMTY7XG5cdFx0XHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKSA8PCA4O1xuXHRcdFx0YyA9IGlucHV0LmNoYXJDb2RlQXQoKytwb3NpdGlvbik7XG5cdFx0XHRidWZmZXIgPSBhICsgYiArIGM7XG5cdFx0XHQvLyBUdXJuIHRoZSAyNCBiaXRzIGludG8gZm91ciBjaHVua3Mgb2YgNiBiaXRzIGVhY2gsIGFuZCBhcHBlbmQgdGhlXG5cdFx0XHQvLyBtYXRjaGluZyBjaGFyYWN0ZXIgZm9yIGVhY2ggb2YgdGhlbSB0byB0aGUgb3V0cHV0LlxuXHRcdFx0b3V0cHV0ICs9IChcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxOCAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMiAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiA2ICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyICYgMHgzRilcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHBhZGRpbmcgPT0gMikge1xuXHRcdFx0YSA9IGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24pIDw8IDg7XG5cdFx0XHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKTtcblx0XHRcdGJ1ZmZlciA9IGEgKyBiO1xuXHRcdFx0b3V0cHV0ICs9IChcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMCkgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA+PiA0KSAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KChidWZmZXIgPDwgMikgJiAweDNGKSArXG5cdFx0XHRcdCc9J1xuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKHBhZGRpbmcgPT0gMSkge1xuXHRcdFx0YnVmZmVyID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbik7XG5cdFx0XHRvdXRwdXQgKz0gKFxuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDIpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KChidWZmZXIgPDwgNCkgJiAweDNGKSArXG5cdFx0XHRcdCc9PSdcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fTtcblxuXHR2YXIgYmFzZTY0ID0ge1xuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQndmVyc2lvbic6ICcxLjAuMCdcblx0fTtcblxuXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcblx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxuXHRpZiAoXG5cdFx0dHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiZcblx0XHRkZWZpbmUuYW1kXG5cdCkge1xuXHRcdGRlZmluZShmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBiYXNlNjQ7XG5cdFx0fSk7XG5cdH1cdGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmICFmcmVlRXhwb3J0cy5ub2RlVHlwZSkge1xuXHRcdGlmIChmcmVlTW9kdWxlKSB7IC8vIGluIE5vZGUuanMgb3IgUmluZ29KUyB2MC44LjArXG5cdFx0XHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBiYXNlNjQ7XG5cdFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cblx0XHRcdGZvciAodmFyIGtleSBpbiBiYXNlNjQpIHtcblx0XHRcdFx0YmFzZTY0Lmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBiYXNlNjRba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgeyAvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5iYXNlNjQgPSBiYXNlNjQ7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIoZnVuY3Rpb24gKG5hbWUsIGNvbnRleHQsIGRlZmluaXRpb24pIHtcbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSBtb2R1bGUuZXhwb3J0cyA9IGRlZmluaXRpb24oKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSBkZWZpbmUoZGVmaW5pdGlvbik7XG4gIGVsc2UgY29udGV4dFtuYW1lXSA9IGRlZmluaXRpb24oKTtcbn0pKCd1cmxqb2luJywgdGhpcywgZnVuY3Rpb24gKCkge1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZSAoc3RyQXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0QXJyYXkgPSBbXTtcbiAgICBpZiAoc3RyQXJyYXkubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJzsgfVxuXG4gICAgaWYgKHR5cGVvZiBzdHJBcnJheVswXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgc3RyQXJyYXlbMF0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBmaXJzdCBwYXJ0IGlzIGEgcGxhaW4gcHJvdG9jb2wsIHdlIGNvbWJpbmUgaXQgd2l0aCB0aGUgbmV4dCBwYXJ0LlxuICAgIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXlteLzpdKzpcXC8qJC8pICYmIHN0ckFycmF5Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHZhciBmaXJzdCA9IHN0ckFycmF5LnNoaWZ0KCk7XG4gICAgICBzdHJBcnJheVswXSA9IGZpcnN0ICsgc3RyQXJyYXlbMF07XG4gICAgfVxuXG4gICAgLy8gVGhlcmUgbXVzdCBiZSB0d28gb3IgdGhyZWUgc2xhc2hlcyBpbiB0aGUgZmlsZSBwcm90b2NvbCwgdHdvIHNsYXNoZXMgaW4gYW55dGhpbmcgZWxzZS5cbiAgICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15maWxlOlxcL1xcL1xcLy8pKSB7XG4gICAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvbXBvbmVudCA9IHN0ckFycmF5W2ldO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBjb21wb25lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG9uZW50ID09PSAnJykgeyBjb250aW51ZTsgfVxuXG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIHN0YXJ0aW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgZmlyc3QuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9eW1xcL10rLywgJycpO1xuICAgICAgfVxuICAgICAgaWYgKGkgPCBzdHJBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIHRoZSBlbmRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBsYXN0LlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvW1xcL10rJC8sICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciB0aGUgbGFzdCBjb21wb25lbnQgd2Ugd2lsbCBjb21iaW5lIG11bHRpcGxlIHNsYXNoZXMgdG8gYSBzaW5nbGUgb25lLlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvW1xcL10rJC8sICcvJyk7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdEFycmF5LnB1c2goY29tcG9uZW50KTtcblxuICAgIH1cblxuICAgIHZhciBzdHIgPSByZXN1bHRBcnJheS5qb2luKCcvJyk7XG4gICAgLy8gRWFjaCBpbnB1dCBjb21wb25lbnQgaXMgbm93IHNlcGFyYXRlZCBieSBhIHNpbmdsZSBzbGFzaCBleGNlcHQgdGhlIHBvc3NpYmxlIGZpcnN0IHBsYWluIHByb3RvY29sIHBhcnQuXG5cbiAgICAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2ggYmVmb3JlIHBhcmFtZXRlcnMgb3IgaGFzaFxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXC8oXFw/fCZ8I1teIV0pL2csICckMScpO1xuXG4gICAgLy8gcmVwbGFjZSA/IGluIHBhcmFtZXRlcnMgd2l0aCAmXG4gICAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KCc/Jyk7XG4gICAgc3RyID0gcGFydHMuc2hpZnQoKSArIChwYXJ0cy5sZW5ndGggPiAwID8gJz8nOiAnJykgKyBwYXJ0cy5qb2luKCcmJyk7XG5cbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5wdXQ7XG5cbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlucHV0ID0gYXJndW1lbnRzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dCA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplKGlucHV0KTtcbiAgfTtcblxufSk7XG4iLCIvLyBBeGlvcyB2MS43LjQgQ29weXJpZ2h0IChjKSAyMDI0IE1hdHQgWmFicmlza2llIGFuZCBjb250cmlidXRvcnNcbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3Qge3RvU3RyaW5nfSA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCB7Z2V0UHJvdG90eXBlT2Z9ID0gT2JqZWN0O1xuXG5jb25zdCBraW5kT2YgPSAoY2FjaGUgPT4gdGhpbmcgPT4ge1xuICAgIGNvbnN0IHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZVxufTtcblxuY29uc3QgdHlwZU9mVGVzdCA9IHR5cGUgPT4gdGhpbmcgPT4gdHlwZW9mIHRoaW5nID09PSB0eXBlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3Qge2lzQXJyYXl9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiBpc0Z1bmN0aW9uKHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdCgnc3RyaW5nJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNOdW1iZXIgPSB0eXBlT2ZUZXN0KCdudW1iZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCb29sZWFuID0gdGhpbmcgPT4gdGhpbmcgPT09IHRydWUgfHwgdGhpbmcgPT09IGZhbHNlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsKSA9PiB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbCkgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsKTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Zvcm1EYXRhID0gKHRoaW5nKSA9PiB7XG4gIGxldCBraW5kO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHwgKFxuICAgICAgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIChcbiAgICAgICAgKGtpbmQgPSBraW5kT2YodGhpbmcpKSA9PT0gJ2Zvcm1kYXRhJyB8fFxuICAgICAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgICAgIChraW5kID09PSAnb2JqZWN0JyAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSAnW29iamVjdCBGb3JtRGF0YV0nKVxuICAgICAgKVxuICAgIClcbiAgKVxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbmNvbnN0IFtpc1JlYWRhYmxlU3RyZWFtLCBpc1JlcXVlc3QsIGlzUmVzcG9uc2UsIGlzSGVhZGVyc10gPSBbJ1JlYWRhYmxlU3RyZWFtJywgJ1JlcXVlc3QnLCAnUmVzcG9uc2UnLCAnSGVhZGVycyddLm1hcChraW5kT2ZUZXN0KTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuY29uc3QgdHJpbSA9IChzdHIpID0+IHN0ci50cmltID9cbiAgc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5cyA9IGZhbHNlXVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuLCB7YWxsT3duS2V5cyA9IGZhbHNlfSA9IHt9KSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBjb25zdCBrZXlzID0gYWxsT3duS2V5cyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICBsZXQgX2tleTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBfa2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoa2V5ID09PSBfa2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBfa2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgX2dsb2JhbCA9ICgoKSA9PiB7XG4gIC8qZXNsaW50IG5vLXVuZGVmOjAqL1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWxUaGlzO1xuICByZXR1cm4gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKVxufSkoKTtcblxuY29uc3QgaXNDb250ZXh0RGVmaW5lZCA9IChjb250ZXh0KSA9PiAhaXNVbmRlZmluZWQoY29udGV4dCkgJiYgY29udGV4dCAhPT0gX2dsb2JhbDtcblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKlxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICBjb25zdCB7Y2FzZWxlc3N9ID0gaXNDb250ZXh0RGVmaW5lZCh0aGlzKSAmJiB0aGlzIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICBjb25zdCB0YXJnZXRLZXkgPSBjYXNlbGVzcyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSB8fCBrZXk7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W3RhcmdldEtleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZShyZXN1bHRbdGFyZ2V0S2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9O1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59O1xuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBpbmhlcml0cyA9IChjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSA9PiB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgJ3N1cGVyJywge1xuICAgIHZhbHVlOiBzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZVxuICB9KTtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PiB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICpcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICpcbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmNvbnN0IHRvQXJyYXkgPSAodGhpbmcpID0+IHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FycmF5KHRoaW5nKSkgcmV0dXJuIHRoaW5nO1xuICBsZXQgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKCFpc051bWJlcihpKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufTtcblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn07XG5cbi8qKlxuICogSXQgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEgc3RyaW5nLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn1cbiAqL1xuY29uc3QgbWF0Y2hBbGwgPSAocmVnRXhwLCBzdHIpID0+IHtcbiAgbGV0IG1hdGNoZXM7XG4gIGNvbnN0IGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufTtcblxuLyogQ2hlY2tpbmcgaWYgdGhlIGtpbmRPZlRlc3QgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIEhUTUxGb3JtRWxlbWVudC4gKi9cbmNvbnN0IGlzSFRNTEZvcm0gPSBraW5kT2ZUZXN0KCdIVE1MRm9ybUVsZW1lbnQnKTtcblxuY29uc3QgdG9DYW1lbENhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxcbiAgICBmdW5jdGlvbiByZXBsYWNlcihtLCBwMSwgcDIpIHtcbiAgICAgIHJldHVybiBwMS50b1VwcGVyQ2FzZSgpICsgcDI7XG4gICAgfVxuICApO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoKHtoYXNPd25Qcm9wZXJ0eX0pID0+IChvYmosIHByb3ApID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkoT2JqZWN0LnByb3RvdHlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1JlZ0V4cCA9IGtpbmRPZlRlc3QoJ1JlZ0V4cCcpO1xuXG5jb25zdCByZWR1Y2VEZXNjcmlwdG9ycyA9IChvYmosIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopO1xuICBjb25zdCByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTtcblxuICBmb3JFYWNoKGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIGxldCByZXQ7XG4gICAgaWYgKChyZXQgPSByZWR1Y2VyKGRlc2NyaXB0b3IsIG5hbWUsIG9iaikpICE9PSBmYWxzZSkge1xuICAgICAgcmVkdWNlZERlc2NyaXB0b3JzW25hbWVdID0gcmV0IHx8IGRlc2NyaXB0b3I7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7XG59O1xuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IHRvT2JqZWN0U2V0ID0gKGFycmF5T3JTdHJpbmcsIGRlbGltaXRlcikgPT4ge1xuICBjb25zdCBvYmogPSB7fTtcblxuICBjb25zdCBkZWZpbmUgPSAoYXJyKSA9PiB7XG4gICAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgaXNBcnJheShhcnJheU9yU3RyaW5nKSA/IGRlZmluZShhcnJheU9yU3RyaW5nKSA6IGRlZmluZShTdHJpbmcoYXJyYXlPclN0cmluZykuc3BsaXQoZGVsaW1pdGVyKSk7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUgPSArdmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG59O1xuXG5jb25zdCBBTFBIQSA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7XG5cbmNvbnN0IERJR0lUID0gJzAxMjM0NTY3ODknO1xuXG5jb25zdCBBTFBIQUJFVCA9IHtcbiAgRElHSVQsXG4gIEFMUEhBLFxuICBBTFBIQV9ESUdJVDogQUxQSEEgKyBBTFBIQS50b1VwcGVyQ2FzZSgpICsgRElHSVRcbn07XG5cbmNvbnN0IGdlbmVyYXRlU3RyaW5nID0gKHNpemUgPSAxNiwgYWxwaGFiZXQgPSBBTFBIQUJFVC5BTFBIQV9ESUdJVCkgPT4ge1xuICBsZXQgc3RyID0gJyc7XG4gIGNvbnN0IHtsZW5ndGh9ID0gYWxwaGFiZXQ7XG4gIHdoaWxlIChzaXplLS0pIHtcbiAgICBzdHIgKz0gYWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIGxlbmd0aHwwXTtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIElmIHRoZSB0aGluZyBpcyBhIEZvcm1EYXRhIG9iamVjdCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB0aGluZyAtIFRoZSB0aGluZyB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTcGVjQ29tcGxpYW50Rm9ybSh0aGluZykge1xuICByZXR1cm4gISEodGhpbmcgJiYgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIHRoaW5nW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YScgJiYgdGhpbmdbU3ltYm9sLml0ZXJhdG9yXSk7XG59XG5cbmNvbnN0IHRvSlNPTk9iamVjdCA9IChvYmopID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgQXJyYXkoMTApO1xuXG4gIGNvbnN0IHZpc2l0ID0gKHNvdXJjZSwgaSkgPT4ge1xuXG4gICAgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIGlmIChzdGFjay5pbmRleE9mKHNvdXJjZSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKCEoJ3RvSlNPTicgaW4gc291cmNlKSkge1xuICAgICAgICBzdGFja1tpXSA9IHNvdXJjZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gaXNBcnJheShzb3VyY2UpID8gW10gOiB7fTtcblxuICAgICAgICBmb3JFYWNoKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2YWx1ZSwgaSArIDEpO1xuICAgICAgICAgICFpc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpICYmICh0YXJnZXRba2V5XSA9IHJlZHVjZWRWYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YWNrW2ldID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfTtcblxuICByZXR1cm4gdmlzaXQob2JqLCAwKTtcbn07XG5cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiYgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uKHRoaW5nKSkgJiYgaXNGdW5jdGlvbih0aGluZy50aGVuKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLmNhdGNoKTtcblxuLy8gb3JpZ2luYWwgY29kZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0RpZ2l0YWxCcmFpbkpTL0F4aW9zUHJvbWlzZS9ibG9iLzE2ZGVhYjEzNzEwZWMwOTc3OTkyMjEzMWYzZmE1OTU0MzIwZjgzYWIvbGliL3V0aWxzLmpzI0wxMS1MMzRcblxuY29uc3QgX3NldEltbWVkaWF0ZSA9ICgoc2V0SW1tZWRpYXRlU3VwcG9ydGVkLCBwb3N0TWVzc2FnZVN1cHBvcnRlZCkgPT4ge1xuICBpZiAoc2V0SW1tZWRpYXRlU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIHNldEltbWVkaWF0ZTtcbiAgfVxuXG4gIHJldHVybiBwb3N0TWVzc2FnZVN1cHBvcnRlZCA/ICgodG9rZW4sIGNhbGxiYWNrcykgPT4ge1xuICAgIF9nbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKHtzb3VyY2UsIGRhdGF9KSA9PiB7XG4gICAgICBpZiAoc291cmNlID09PSBfZ2xvYmFsICYmIGRhdGEgPT09IHRva2VuKSB7XG4gICAgICAgIGNhbGxiYWNrcy5sZW5ndGggJiYgY2FsbGJhY2tzLnNoaWZ0KCkoKTtcbiAgICAgIH1cbiAgICB9LCBmYWxzZSk7XG5cbiAgICByZXR1cm4gKGNiKSA9PiB7XG4gICAgICBjYWxsYmFja3MucHVzaChjYik7XG4gICAgICBfZ2xvYmFsLnBvc3RNZXNzYWdlKHRva2VuLCBcIipcIik7XG4gICAgfVxuICB9KShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsIFtdKSA6IChjYikgPT4gc2V0VGltZW91dChjYik7XG59KShcbiAgdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyxcbiAgaXNGdW5jdGlvbihfZ2xvYmFsLnBvc3RNZXNzYWdlKVxuKTtcblxuY29uc3QgYXNhcCA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayAhPT0gJ3VuZGVmaW5lZCcgP1xuICBxdWV1ZU1pY3JvdGFzay5iaW5kKF9nbG9iYWwpIDogKCB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5uZXh0VGljayB8fCBfc2V0SW1tZWRpYXRlKTtcblxuLy8gKioqKioqKioqKioqKioqKioqKioqXG5cbnZhciB1dGlscyQxID0ge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZXF1ZXN0LFxuICBpc1Jlc3BvbnNlLFxuICBpc0hlYWRlcnMsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIEFMUEhBQkVULFxuICBnZW5lcmF0ZVN0cmluZyxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGUsXG4gIHNldEltbWVkaWF0ZTogX3NldEltbWVkaWF0ZSxcbiAgYXNhcFxufTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICB9XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICByZXNwb25zZSAmJiAodGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlKTtcbn1cblxudXRpbHMkMS5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB1dGlscyQxLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMucmVzcG9uc2UgJiYgdGhpcy5yZXNwb25zZS5zdGF0dXMgPyB0aGlzLnJlc3BvbnNlLnN0YXR1cyA6IG51bGxcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlJDEgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goY29kZSA9PiB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlJDEsICdpc0F4aW9zRXJyb3InLCB7dmFsdWU6IHRydWV9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbkF4aW9zRXJyb3IuZnJvbSA9IChlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpID0+IHtcbiAgY29uc3QgYXhpb3NFcnJvciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlJDEpO1xuXG4gIHV0aWxzJDEudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9LCBwcm9wID0+IHtcbiAgICByZXR1cm4gcHJvcCAhPT0gJ2lzQXhpb3NFcnJvcic7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IuY2FsbChheGlvc0Vycm9yLCBlcnJvci5tZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKTtcblxuICBheGlvc0Vycm9yLmNhdXNlID0gZXJyb3I7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3RcbnZhciBodHRwQWRhcHRlciA9IG51bGw7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMkMS5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscyQxLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscyQxLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMkMS5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTtcbn1cblxuY29uc3QgcHJlZGljYXRlcyA9IHV0aWxzJDEudG9GbGF0T2JqZWN0KHV0aWxzJDEsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscyQxLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyAoRm9ybURhdGEpKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB1dGlscyQxLnRvRmxhdE9iamVjdChvcHRpb25zLCB7XG4gICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICBkb3RzOiBmYWxzZSxcbiAgICBpbmRleGVzOiBmYWxzZVxuICB9LCBmYWxzZSwgZnVuY3Rpb24gZGVmaW5lZChvcHRpb24sIHNvdXJjZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICAgIHJldHVybiAhdXRpbHMkMS5pc1VuZGVmaW5lZChzb3VyY2Vbb3B0aW9uXSk7XG4gIH0pO1xuXG4gIGNvbnN0IG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBjb25zdCB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yO1xuICBjb25zdCBkb3RzID0gb3B0aW9ucy5kb3RzO1xuICBjb25zdCBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzO1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYjtcbiAgY29uc3QgdXNlQmxvYiA9IF9CbG9iICYmIHV0aWxzJDEuaXNTcGVjQ29tcGxpYW50Rm9ybShmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscyQxLmlzRnVuY3Rpb24odmlzaXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMkMS5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMkMS5pc0Jsb2IodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscyQxLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscyQxLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMkMS5pc0FycmF5KHZhbHVlKSAmJiBpc0ZsYXRBcnJheSh2YWx1ZSkpIHx8XG4gICAgICAgICgodXRpbHMkMS5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscyQxLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscyQxLnRvQXJyYXkodmFsdWUpKVxuICAgICAgICApKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSByZW1vdmVCcmFja2V0cyhrZXkpO1xuXG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIGVhY2goZWwsIGluZGV4KSB7XG4gICAgICAgICAgISh1dGlscyQxLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICBpbmRleGVzID09PSB0cnVlID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cykgOiAoaW5kZXhlcyA9PT0gbnVsbCA/IGtleSA6IGtleSArICdbXScpLFxuICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrID0gW107XG5cbiAgY29uc3QgZXhwb3NlZEhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHByZWRpY2F0ZXMsIHtcbiAgICBkZWZhdWx0VmlzaXRvcixcbiAgICBjb252ZXJ0VmFsdWUsXG4gICAgaXNWaXNpdGFibGVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMkMS5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24gZWFjaChlbCwga2V5KSB7XG4gICAgICBjb25zdCByZXN1bHQgPSAhKHV0aWxzJDEuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiB2aXNpdG9yLmNhbGwoXG4gICAgICAgIGZvcm1EYXRhLCBlbCwgdXRpbHMkMS5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzJDEuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG4vKipcbiAqIEl0IGVuY29kZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdW5yZXNlcnZlZCBzZXQgd2l0aFxuICogdGhlaXIgcGVyY2VudC1lbmNvZGVkIGVxdWl2YWxlbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlJDEoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJ1xuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhcmFtcyBvYmplY3QgYW5kIGNvbnZlcnRzIGl0IHRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBGb3JtRGF0YSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIHRoZSBBeGlvcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTtcbn1cblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xuXG5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX3BhaXJzLnB1c2goW25hbWUsIHZhbHVlXSk7XG59O1xuXG5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGVyKSB7XG4gIGNvbnN0IF9lbmNvZGUgPSBlbmNvZGVyID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUkMSk7XG4gIH0gOiBlbmNvZGUkMTtcblxuICByZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uIGVhY2gocGFpcikge1xuICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgfSwgJycpLmpvaW4oJyYnKTtcbn07XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVycyBgOmAsIGAkYCwgYCxgLCBgK2AsIGBbYCwgYW5kIGBdYCB3aXRoIHRoZWlyXG4gKiBVUkkgZW5jb2RlZCBjb3VudGVycGFydHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIFRoZSB2YWx1ZSB0byBiZSBlbmNvZGVkLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHBhcmFtIHs/b2JqZWN0fSBvcHRpb25zXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xuZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBcbiAgY29uc3QgX2VuY29kZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGUgfHwgZW5jb2RlO1xuXG4gIGNvbnN0IHNlcmlhbGl6ZUZuID0gb3B0aW9ucyAmJiBvcHRpb25zLnNlcmlhbGl6ZTtcblxuICBsZXQgc2VyaWFsaXplZFBhcmFtcztcblxuICBpZiAoc2VyaWFsaXplRm4pIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gc2VyaWFsaXplRm4ocGFyYW1zLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gdXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpID9cbiAgICAgIHBhcmFtcy50b1N0cmluZygpIDpcbiAgICAgIG5ldyBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpLnRvU3RyaW5nKF9lbmNvZGUpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICBjb25zdCBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuXG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG5cbmNsYXNzIEludGVyY2VwdG9yTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICAgKi9cbiAgdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgICAgZnVsZmlsbGVkLFxuICAgICAgcmVqZWN0ZWQsXG4gICAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnRlcmNlcHRvciB3YXMgcmVtb3ZlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIGVqZWN0KGlkKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycykge1xuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICAgKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmb3JFYWNoKGZuKSB7XG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICAgIGZuKGgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbnZhciBJbnRlcmNlcHRvck1hbmFnZXIkMSA9IEludGVyY2VwdG9yTWFuYWdlcjtcblxudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0ge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuXG52YXIgVVJMU2VhcmNoUGFyYW1zJDEgPSB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyA/IFVSTFNlYXJjaFBhcmFtcyA6IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuXG52YXIgRm9ybURhdGEkMSA9IHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgPyBGb3JtRGF0YSA6IG51bGw7XG5cbnZhciBCbG9iJDEgPSB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iIDogbnVsbDtcblxudmFyIHBsYXRmb3JtJDEgPSB7XG4gIGlzQnJvd3NlcjogdHJ1ZSxcbiAgY2xhc3Nlczoge1xuICAgIFVSTFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zJDEsXG4gICAgRm9ybURhdGE6IEZvcm1EYXRhJDEsXG4gICAgQmxvYjogQmxvYiQxXG4gIH0sXG4gIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddXG59O1xuXG5jb25zdCBoYXNCcm93c2VyRW52ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlckVudiA9IChcbiAgKHByb2R1Y3QpID0+IHtcbiAgICByZXR1cm4gaGFzQnJvd3NlckVudiAmJiBbJ1JlYWN0TmF0aXZlJywgJ05hdGl2ZVNjcmlwdCcsICdOUyddLmluZGV4T2YocHJvZHVjdCkgPCAwXG4gIH0pKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5wcm9kdWN0KTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxuY29uc3Qgb3JpZ2luID0gaGFzQnJvd3NlckVudiAmJiB3aW5kb3cubG9jYXRpb24uaHJlZiB8fCAnaHR0cDovL2xvY2FsaG9zdCc7XG5cbnZhciB1dGlscyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBoYXNCcm93c2VyRW52OiBoYXNCcm93c2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52OiBoYXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIG9yaWdpbjogb3JpZ2luXG59KTtcblxudmFyIHBsYXRmb3JtID0ge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm0kMVxufTtcblxuZnVuY3Rpb24gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCBPYmplY3QuYXNzaWduKHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzJDEuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwgb3B0aW9ucykpO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscyQxLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjb252ZXJ0IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgdGhlIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIGxldCBpO1xuICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgbGV0IGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55PiB8IG51bGx9IFRoZSBjb252ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICBsZXQgbmFtZSA9IHBhdGhbaW5kZXgrK107XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMkMS5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQubGVuZ3RoIDogbmFtZTtcblxuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIGlmICh1dGlscyQxLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzJDEuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMkMS5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgfVxuXG4gIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzJDEuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoRW50cnkoZm9ybURhdGEsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgYnVpbGRQYXRoKHBhcnNlUHJvcFBhdGgobmFtZSksIHZhbHVlLCBvYmosIDApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMkMS5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMkMS50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogWyd4aHInLCAnaHR0cCcsICdmZXRjaCddLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSB8fCAnJztcbiAgICBjb25zdCBoYXNKU09OQ29udGVudFR5cGUgPSBjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi9qc29uJykgPiAtMTtcbiAgICBjb25zdCBpc09iamVjdFBheWxvYWQgPSB1dGlscyQxLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscyQxLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGb3JtRGF0YSA9IHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKTtcblxuICAgIGlmIChpc0Zvcm1EYXRhKSB7XG4gICAgICByZXR1cm4gaGFzSlNPTkNvbnRlbnRUeXBlID8gSlNPTi5zdHJpbmdpZnkoZm9ybURhdGFUb0pTT04oZGF0YSkpIDogZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0Jsb2IoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNSZWFkYWJsZVN0cmVhbShkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscyQxLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscyQxLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscyQxLmlzRmlsZUxpc3QoZGF0YSkpIHx8IGNvbnRlbnRUeXBlLmluZGV4T2YoJ211bHRpcGFydC9mb3JtLWRhdGEnKSA+IC0xKSB7XG4gICAgICAgIGNvbnN0IF9Gb3JtRGF0YSA9IHRoaXMuZW52ICYmIHRoaXMuZW52LkZvcm1EYXRhO1xuXG4gICAgICAgIHJldHVybiB0b0Zvcm1EYXRhKFxuICAgICAgICAgIGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsXG4gICAgICAgICAgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSxcbiAgICAgICAgICB0aGlzLmZvcm1TZXJpYWxpemVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBoYXNKU09OQ29udGVudFR5cGUgKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi9qc29uJywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgY29uc3QgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIGNvbnN0IGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICBjb25zdCBKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmICh1dGlscyQxLmlzUmVzcG9uc2UoZGF0YSkgfHwgdXRpbHMkMS5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscyQxLmlzU3RyaW5nKGRhdGEpICYmICgoZm9yY2VkSlNPTlBhcnNpbmcgJiYgIXRoaXMucmVzcG9uc2VUeXBlKSB8fCBKU09OUmVxdWVzdGVkKSkge1xuICAgICAgY29uc3Qgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgICAgY29uc3Qgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgSlNPTlJlcXVlc3RlZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2JcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyxcbiAgICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzJDEuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnZhciBkZWZhdWx0cyQxID0gZGVmYXVsdHM7XG5cbi8vIFJhd0F4aW9zSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbmNvbnN0IGlnbm9yZUR1cGxpY2F0ZU9mID0gdXRpbHMkMS50b09iamVjdFNldChbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXSk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByYXdIZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG52YXIgcGFyc2VIZWFkZXJzID0gcmF3SGVhZGVycyA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IHt9O1xuICBsZXQga2V5O1xuICBsZXQgdmFsO1xuICBsZXQgaTtcblxuICByYXdIZWFkZXJzICYmIHJhd0hlYWRlcnMuc3BsaXQoJ1xcbicpLmZvckVhY2goZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgaSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gbGluZS5zdWJzdHJpbmcoaSArIDEpLnRyaW0oKTtcblxuICAgIGlmICgha2V5IHx8IChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZltrZXldKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgaWYgKHBhcnNlZFtrZXldKSB7XG4gICAgICAgIHBhcnNlZFtrZXldLnB1c2godmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gW3ZhbF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcblxuY29uc3QgJGludGVybmFscyA9IFN5bWJvbCgnaW50ZXJuYWxzJyk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlciAmJiBTdHJpbmcoaGVhZGVyKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAobm9ybWFsaXplVmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUb2tlbnMoc3RyKSB7XG4gIGNvbnN0IHRva2VucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IHRva2Vuc1JFID0gLyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZztcbiAgbGV0IG1hdGNoO1xuXG4gIHdoaWxlICgobWF0Y2ggPSB0b2tlbnNSRS5leGVjKHN0cikpKSB7XG4gICAgdG9rZW5zW21hdGNoWzFdXSA9IG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuY29uc3QgaXNWYWxpZEhlYWRlck5hbWUgPSAoc3RyKSA9PiAvXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KHN0ci50cmltKCkpO1xuXG5mdW5jdGlvbiBtYXRjaEhlYWRlclZhbHVlKGNvbnRleHQsIHZhbHVlLCBoZWFkZXIsIGZpbHRlciwgaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gIGlmICh1dGlscyQxLmlzRnVuY3Rpb24oZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLCB2YWx1ZSwgaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgICB2YWx1ZSA9IGhlYWRlcjtcbiAgfVxuXG4gIGlmICghdXRpbHMkMS5pc1N0cmluZyh2YWx1ZSkpIHJldHVybjtcblxuICBpZiAodXRpbHMkMS5pc1N0cmluZyhmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICBpZiAodXRpbHMkMS5pc1JlZ0V4cChmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci50ZXN0KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIudHJpbSgpXG4gICAgLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCAodywgY2hhciwgc3RyKSA9PiB7XG4gICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpICsgc3RyO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFjY2Vzc29ycyhvYmosIGhlYWRlcikge1xuICBjb25zdCBhY2Nlc3Nvck5hbWUgPSB1dGlscyQxLnRvQ2FtZWxDYXNlKCcgJyArIGhlYWRlcik7XG5cbiAgWydnZXQnLCAnc2V0JywgJ2hhcyddLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbWV0aG9kTmFtZSArIGFjY2Vzc29yTmFtZSwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uY2FsbCh0aGlzLCBoZWFkZXIsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcbn1cblxuY2xhc3MgQXhpb3NIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IoaGVhZGVycykge1xuICAgIGhlYWRlcnMgJiYgdGhpcy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICBzZXQoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSwgcmV3cml0ZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgZnVuY3Rpb24gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghbEhlYWRlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleShzZWxmLCBsSGVhZGVyKTtcblxuICAgICAgaWYoIWtleSB8fCBzZWxmW2tleV0gPT09IHVuZGVmaW5lZCB8fCBfcmV3cml0ZSA9PT0gdHJ1ZSB8fCAoX3Jld3JpdGUgPT09IHVuZGVmaW5lZCAmJiBzZWxmW2tleV0gIT09IGZhbHNlKSkge1xuICAgICAgICBzZWxmW2tleSB8fCBfaGVhZGVyXSA9IG5vcm1hbGl6ZVZhbHVlKF92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0SGVhZGVycyA9IChoZWFkZXJzLCBfcmV3cml0ZSkgPT5cbiAgICAgIHV0aWxzJDEuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNQbGFpbk9iamVjdChoZWFkZXIpIHx8IGhlYWRlciBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpIHtcbiAgICAgIHNldEhlYWRlcnMoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmKHV0aWxzJDEuaXNTdHJpbmcoaGVhZGVyKSAmJiAoaGVhZGVyID0gaGVhZGVyLnRyaW0oKSkgJiYgIWlzVmFsaWRIZWFkZXJOYW1lKGhlYWRlcikpIHtcbiAgICAgIHNldEhlYWRlcnMocGFyc2VIZWFkZXJzKGhlYWRlciksIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNIZWFkZXJzKGhlYWRlcikpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGhlYWRlci5lbnRyaWVzKCkpIHtcbiAgICAgICAgc2V0SGVhZGVyKHZhbHVlLCBrZXksIHJld3JpdGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXIgIT0gbnVsbCAmJiBzZXRIZWFkZXIodmFsdWVPclJld3JpdGUsIGhlYWRlciwgcmV3cml0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQoaGVhZGVyLCBwYXJzZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmNhbGwodGhpcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMkMS5pc1JlZ0V4cChwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShrZXkgJiYgdGhpc1trZXldICE9PSB1bmRlZmluZWQgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHNlbGYsIF9oZWFkZXIpO1xuXG4gICAgICAgIGlmIChrZXkgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUoc2VsZiwgc2VsZltrZXldLCBrZXksIG1hdGNoZXIpKSkge1xuICAgICAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG5cbiAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscyQxLmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyLmZvckVhY2goZGVsZXRlSGVhZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlSGVhZGVyKGhlYWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBjbGVhcihtYXRjaGVyKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICAgIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZighbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyLCB0cnVlKSkge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIG5vcm1hbGl6ZShmb3JtYXQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICB1dGlscyQxLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleShoZWFkZXJzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHNlbGZba2V5XSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gZm9ybWF0ID8gZm9ybWF0SGVhZGVyKGhlYWRlcikgOiBTdHJpbmcoaGVhZGVyKS50cmltKCk7XG5cbiAgICAgIGlmIChub3JtYWxpemVkICE9PSBoZWFkZXIpIHtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgIH1cblxuICAgICAgc2VsZltub3JtYWxpemVkXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgaGVhZGVyc1tub3JtYWxpemVkXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbmNhdCguLi50YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsIC4uLnRhcmdldHMpO1xuICB9XG5cbiAgdG9KU09OKGFzU3RyaW5ncykge1xuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICB1dGlscyQxLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09IGZhbHNlICYmIChvYmpbaGVhZGVyXSA9IGFzU3RyaW5ncyAmJiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgdGhpcyA/IHRoaW5nIDogbmV3IHRoaXModGhpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChmaXJzdCwgLi4udGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IGNvbXB1dGVkLnNldCh0YXJnZXQpKTtcblxuICAgIHJldHVybiBjb21wdXRlZDtcbiAgfVxuXG4gIHN0YXRpYyBhY2Nlc3NvcihoZWFkZXIpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzWyRpbnRlcm5hbHNdID0gKHRoaXNbJGludGVybmFsc10gPSB7XG4gICAgICBhY2Nlc3NvcnM6IHt9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBpbnRlcm5hbHMuYWNjZXNzb3JzO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFhY2Nlc3NvcnNbbEhlYWRlcl0pIHtcbiAgICAgICAgYnVpbGRBY2Nlc3NvcnMocHJvdG90eXBlLCBfaGVhZGVyKTtcbiAgICAgICAgYWNjZXNzb3JzW2xIZWFkZXJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlscyQxLmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlci5mb3JFYWNoKGRlZmluZUFjY2Vzc29yKSA6IGRlZmluZUFjY2Vzc29yKGhlYWRlcik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5BeGlvc0hlYWRlcnMuYWNjZXNzb3IoWydDb250ZW50LVR5cGUnLCAnQ29udGVudC1MZW5ndGgnLCAnQWNjZXB0JywgJ0FjY2VwdC1FbmNvZGluZycsICdVc2VyLUFnZW50JywgJ0F1dGhvcml6YXRpb24nXSk7XG5cbi8vIHJlc2VydmVkIG5hbWVzIGhvdGZpeFxudXRpbHMkMS5yZWR1Y2VEZXNjcmlwdG9ycyhBeGlvc0hlYWRlcnMucHJvdG90eXBlLCAoe3ZhbHVlfSwga2V5KSA9PiB7XG4gIGxldCBtYXBwZWQgPSBrZXlbMF0udG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTsgLy8gbWFwIGBzZXRgID0+IGBTZXRgXG4gIHJldHVybiB7XG4gICAgZ2V0OiAoKSA9PiB2YWx1ZSxcbiAgICBzZXQoaGVhZGVyVmFsdWUpIHtcbiAgICAgIHRoaXNbbWFwcGVkXSA9IGhlYWRlclZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG5cbnV0aWxzJDEuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG52YXIgQXhpb3NIZWFkZXJzJDEgPSBBeGlvc0hlYWRlcnM7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHMkMTtcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oY29udGV4dC5oZWFkZXJzKTtcbiAgbGV0IGRhdGEgPSBjb250ZXh0LmRhdGE7XG5cbiAgdXRpbHMkMS5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzJDEuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgcmVzcG9uc2UuXG4gKi9cbmZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICBbQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihyZXNwb25zZS5zdGF0dXMgLyAxMDApIC0gNF0sXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKHVybCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgZGF0YSBtYXhSYXRlXG4gKiBAcGFyYW0ge051bWJlcn0gW3NhbXBsZXNDb3VudD0gMTBdXG4gKiBAcGFyYW0ge051bWJlcn0gW21pbj0gMTAwMF1cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3BlZWRvbWV0ZXIoc2FtcGxlc0NvdW50LCBtaW4pIHtcbiAgc2FtcGxlc0NvdW50ID0gc2FtcGxlc0NvdW50IHx8IDEwO1xuICBjb25zdCBieXRlcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBjb25zdCB0aW1lc3RhbXBzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGxldCBoZWFkID0gMDtcbiAgbGV0IHRhaWwgPSAwO1xuICBsZXQgZmlyc3RTYW1wbGVUUztcblxuICBtaW4gPSBtaW4gIT09IHVuZGVmaW5lZCA/IG1pbiA6IDEwMDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHB1c2goY2h1bmtMZW5ndGgpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gdGltZXN0YW1wc1t0YWlsXTtcblxuICAgIGlmICghZmlyc3RTYW1wbGVUUykge1xuICAgICAgZmlyc3RTYW1wbGVUUyA9IG5vdztcbiAgICB9XG5cbiAgICBieXRlc1toZWFkXSA9IGNodW5rTGVuZ3RoO1xuICAgIHRpbWVzdGFtcHNbaGVhZF0gPSBub3c7XG5cbiAgICBsZXQgaSA9IHRhaWw7XG4gICAgbGV0IGJ5dGVzQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKGkgIT09IGhlYWQpIHtcbiAgICAgIGJ5dGVzQ291bnQgKz0gYnl0ZXNbaSsrXTtcbiAgICAgIGkgPSBpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGhlYWQgPSAoaGVhZCArIDEpICUgc2FtcGxlc0NvdW50O1xuXG4gICAgaWYgKGhlYWQgPT09IHRhaWwpIHtcbiAgICAgIHRhaWwgPSAodGFpbCArIDEpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGlmIChub3cgLSBmaXJzdFNhbXBsZVRTIDwgbWluKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFzc2VkID0gc3RhcnRlZEF0ICYmIG5vdyAtIHN0YXJ0ZWRBdDtcblxuICAgIHJldHVybiBwYXNzZWQgPyBNYXRoLnJvdW5kKGJ5dGVzQ291bnQgKiAxMDAwIC8gcGFzc2VkKSA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaHJvdHRsZSBkZWNvcmF0b3JcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gZnJlcVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCBmcmVxKSB7XG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBsZXQgdGhyZXNob2xkID0gMTAwMCAvIGZyZXE7XG4gIGxldCBsYXN0QXJncztcbiAgbGV0IHRpbWVyO1xuXG4gIGNvbnN0IGludm9rZSA9IChhcmdzLCBub3cgPSBEYXRlLm5vdygpKSA9PiB7XG4gICAgdGltZXN0YW1wID0gbm93O1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgfVxuICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9O1xuXG4gIGNvbnN0IHRocm90dGxlZCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBwYXNzZWQgPSBub3cgLSB0aW1lc3RhbXA7XG4gICAgaWYgKCBwYXNzZWQgPj0gdGhyZXNob2xkKSB7XG4gICAgICBpbnZva2UoYXJncywgbm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICBpbnZva2UobGFzdEFyZ3MpO1xuICAgICAgICB9LCB0aHJlc2hvbGQgLSBwYXNzZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBmbHVzaCA9ICgpID0+IGxhc3RBcmdzICYmIGludm9rZShsYXN0QXJncyk7XG5cbiAgcmV0dXJuIFt0aHJvdHRsZWQsIGZsdXNoXTtcbn1cblxuY29uc3QgcHJvZ3Jlc3NFdmVudFJlZHVjZXIgPSAobGlzdGVuZXIsIGlzRG93bmxvYWRTdHJlYW0sIGZyZXEgPSAzKSA9PiB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIHRocm90dGxlKGUgPT4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm9ncmVzc0J5dGVzID0gbG9hZGVkIC0gYnl0ZXNOb3RpZmllZDtcbiAgICBjb25zdCByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpO1xuICAgIGNvbnN0IGluUmFuZ2UgPSBsb2FkZWQgPD0gdG90YWw7XG5cbiAgICBieXRlc05vdGlmaWVkID0gbG9hZGVkO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHRvdGFsLFxuICAgICAgcHJvZ3Jlc3M6IHRvdGFsID8gKGxvYWRlZCAvIHRvdGFsKSA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGUsXG4gICAgICBsZW5ndGhDb21wdXRhYmxlOiB0b3RhbCAhPSBudWxsLFxuICAgICAgW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddOiB0cnVlXG4gICAgfTtcblxuICAgIGxpc3RlbmVyKGRhdGEpO1xuICB9LCBmcmVxKTtcbn07XG5cbmNvbnN0IHByb2dyZXNzRXZlbnREZWNvcmF0b3IgPSAodG90YWwsIHRocm90dGxlZCkgPT4ge1xuICBjb25zdCBsZW5ndGhDb21wdXRhYmxlID0gdG90YWwgIT0gbnVsbDtcblxuICByZXR1cm4gWyhsb2FkZWQpID0+IHRocm90dGxlZFswXSh7XG4gICAgbGVuZ3RoQ29tcHV0YWJsZSxcbiAgICB0b3RhbCxcbiAgICBsb2FkZWRcbiAgfSksIHRocm90dGxlZFsxXV07XG59O1xuXG5jb25zdCBhc3luY0RlY29yYXRvciA9IChmbikgPT4gKC4uLmFyZ3MpID0+IHV0aWxzJDEuYXNhcCgoKSA9PiBmbiguLi5hcmdzKSk7XG5cbnZhciBpc1VSTFNhbWVPcmlnaW4gPSBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4vLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3Rcbi8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIGNvbnN0IG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGNvbnN0IHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxldCBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0cyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICBsZXQgaHJlZiA9IHVybDtcblxuICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gKHV0aWxzJDEuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpO1xuXG52YXIgY29va2llcyA9IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gIHtcbiAgICB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgIGNvbnN0IGNvb2tpZSA9IFtuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKV07XG5cbiAgICAgIHV0aWxzJDEuaXNOdW1iZXIoZXhwaXJlcykgJiYgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuXG4gICAgICB1dGlscyQxLmlzU3RyaW5nKHBhdGgpICYmIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcblxuICAgICAgdXRpbHMkMS5pc1N0cmluZyhkb21haW4pICYmIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG5cbiAgICAgIHNlY3VyZSA9PT0gdHJ1ZSAmJiBjb29raWUucHVzaCgnc2VjdXJlJyk7XG5cbiAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgIH0sXG5cbiAgICByZWFkKG5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgfSxcblxuICAgIHJlbW92ZShuYW1lKSB7XG4gICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgIH1cbiAgfVxuXG4gIDpcblxuICAvLyBOb24tc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIHtcbiAgICB3cml0ZSgpIHt9LFxuICAgIHJlYWQoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZSgpIHt9XG4gIH07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xuZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLz9cXC8kLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5mdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn1cblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyBpbnN0YW5jZW9mIEF4aW9zSGVhZGVycyQxID8geyAuLi50aGluZyB9IDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscyQxLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzJDEubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzJDEubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSwgY2FzZWxlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMoYSwgYiwgcHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VNYXAgPSB7XG4gICAgdXJsOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIG1ldGhvZDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGJhc2VVUkw6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBwYXJhbXNTZXJpYWxpemVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhYU1JGVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB2YWxpZGF0ZVN0YXR1czogbWVyZ2VEaXJlY3RLZXlzLFxuICAgIGhlYWRlcnM6IChhLCBiKSA9PiBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLCB0cnVlKVxuICB9O1xuXG4gIHV0aWxzJDEuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb25maWcxLCBjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgY29uc3QgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzJDEuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG5cbnZhciByZXNvbHZlQ29uZmlnID0gKGNvbmZpZykgPT4ge1xuICBjb25zdCBuZXdDb25maWcgPSBtZXJnZUNvbmZpZyh7fSwgY29uZmlnKTtcblxuICBsZXQge2RhdGEsIHdpdGhYU1JGVG9rZW4sIHhzcmZIZWFkZXJOYW1lLCB4c3JmQ29va2llTmFtZSwgaGVhZGVycywgYXV0aH0gPSBuZXdDb25maWc7XG5cbiAgbmV3Q29uZmlnLmhlYWRlcnMgPSBoZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShoZWFkZXJzKTtcblxuICBuZXdDb25maWcudXJsID0gYnVpbGRVUkwoYnVpbGRGdWxsUGF0aChuZXdDb25maWcuYmFzZVVSTCwgbmV3Q29uZmlnLnVybCksIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcblxuICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gIGlmIChhdXRoKSB7XG4gICAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArXG4gICAgICBidG9hKChhdXRoLnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChhdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgucGFzc3dvcmQpKSA6ICcnKSlcbiAgICApO1xuICB9XG5cbiAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSh1bmRlZmluZWQpOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfSBlbHNlIGlmICgoY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkpICE9PSBmYWxzZSkge1xuICAgICAgLy8gZml4IHNlbWljb2xvbiBkdXBsaWNhdGlvbiBpc3N1ZSBmb3IgUmVhY3ROYXRpdmUgRm9ybURhdGEgaW1wbGVtZW50YXRpb25cbiAgICAgIGNvbnN0IFt0eXBlLCAuLi50b2tlbnNdID0gY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIC4uLnRva2Vuc10uam9pbignOyAnKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuXG4gIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYpIHtcbiAgICB3aXRoWFNSRlRva2VuICYmIHV0aWxzJDEuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4obmV3Q29uZmlnKSk7XG5cbiAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKG5ld0NvbmZpZy51cmwpKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICBjb25zdCB4c3JmVmFsdWUgPSB4c3JmSGVhZGVyTmFtZSAmJiB4c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoeHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0KHhzcmZIZWFkZXJOYW1lLCB4c3JmVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdDb25maWc7XG59O1xuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG52YXIgeGhyQWRhcHRlciA9IGlzWEhSQWRhcHRlclN1cHBvcnRlZCAmJiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgY29uc3QgX2NvbmZpZyA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBfY29uZmlnLmRhdGE7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKF9jb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG4gICAgbGV0IHtyZXNwb25zZVR5cGUsIG9uVXBsb2FkUHJvZ3Jlc3MsIG9uRG93bmxvYWRQcm9ncmVzc30gPSBfY29uZmlnO1xuICAgIGxldCBvbkNhbmNlbGVkO1xuICAgIGxldCB1cGxvYWRUaHJvdHRsZWQsIGRvd25sb2FkVGhyb3R0bGVkO1xuICAgIGxldCBmbHVzaFVwbG9hZCwgZmx1c2hEb3dubG9hZDtcblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBmbHVzaFVwbG9hZCAmJiBmbHVzaFVwbG9hZCgpOyAvLyBmbHVzaCBldmVudHNcbiAgICAgIGZsdXNoRG93bmxvYWQgJiYgZmx1c2hEb3dubG9hZCgpOyAvLyBmbHVzaCBldmVudHNcblxuICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuXG4gICAgICBfY29uZmlnLnNpZ25hbCAmJiBfY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgIH1cblxuICAgIGxldCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oX2NvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgX2NvbmZpZy51cmwsIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBfY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgX2NvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IF9jb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMkMS5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLnRvSlNPTigpLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKF9jb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIV9jb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IF9jb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAob25Eb3dubG9hZFByb2dyZXNzKSB7XG4gICAgICAoW2Rvd25sb2FkVGhyb3R0bGVkLCBmbHVzaERvd25sb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGRvd25sb2FkVGhyb3R0bGVkKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmIChvblVwbG9hZFByb2dyZXNzICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICAoW3VwbG9hZFRocm90dGxlZCwgZmx1c2hVcGxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25VcGxvYWRQcm9ncmVzcykpO1xuXG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHVwbG9hZFRocm90dGxlZCk7XG5cbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbHVzaFVwbG9hZCk7XG4gICAgfVxuXG4gICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4gfHwgX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gY2FuY2VsID0+IHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAgIF9jb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBfY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChfY29uZmlnLnVybCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufTtcblxuY29uc3QgY29tcG9zZVNpZ25hbHMgPSAoc2lnbmFscywgdGltZW91dCkgPT4ge1xuICBsZXQgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICBsZXQgYWJvcnRlZDtcblxuICBjb25zdCBvbmFib3J0ID0gZnVuY3Rpb24gKGNhbmNlbCkge1xuICAgIGlmICghYWJvcnRlZCkge1xuICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgY29uc3QgZXJyID0gY2FuY2VsIGluc3RhbmNlb2YgRXJyb3IgPyBjYW5jZWwgOiB0aGlzLnJlYXNvbjtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvciA/IGVyciA6IG5ldyBDYW5jZWxlZEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnIpKTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IHRpbWVyID0gdGltZW91dCAmJiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBvbmFib3J0KG5ldyBBeGlvc0Vycm9yKGB0aW1lb3V0ICR7dGltZW91dH0gb2YgbXMgZXhjZWVkZWRgLCBBeGlvc0Vycm9yLkVUSU1FRE9VVCkpO1xuICB9LCB0aW1lb3V0KTtcblxuICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICBpZiAoc2lnbmFscykge1xuICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgIHNpZ25hbHMuZm9yRWFjaChzaWduYWwgPT4ge1xuICAgICAgICBzaWduYWwgJiZcbiAgICAgICAgKHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyID8gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkgOiBzaWduYWwudW5zdWJzY3JpYmUob25hYm9ydCkpO1xuICAgICAgfSk7XG4gICAgICBzaWduYWxzID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHNpZ25hbCAmJiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KSk7XG5cbiAgY29uc3Qge3NpZ25hbH0gPSBjb250cm9sbGVyO1xuXG4gIHNpZ25hbC51bnN1YnNjcmliZSA9IHVuc3Vic2NyaWJlO1xuXG4gIHJldHVybiBbc2lnbmFsLCAoKSA9PiB7XG4gICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB0aW1lciA9IG51bGw7XG4gIH1dO1xufTtcblxudmFyIGNvbXBvc2VTaWduYWxzJDEgPSBjb21wb3NlU2lnbmFscztcblxuY29uc3Qgc3RyZWFtQ2h1bmsgPSBmdW5jdGlvbiogKGNodW5rLCBjaHVua1NpemUpIHtcbiAgbGV0IGxlbiA9IGNodW5rLmJ5dGVMZW5ndGg7XG5cbiAgaWYgKCFjaHVua1NpemUgfHwgbGVuIDwgY2h1bmtTaXplKSB7XG4gICAgeWllbGQgY2h1bms7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBlbmQ7XG5cbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGVuZCA9IHBvcyArIGNodW5rU2l6ZTtcbiAgICB5aWVsZCBjaHVuay5zbGljZShwb3MsIGVuZCk7XG4gICAgcG9zID0gZW5kO1xuICB9XG59O1xuXG5jb25zdCByZWFkQnl0ZXMgPSBhc3luYyBmdW5jdGlvbiogKGl0ZXJhYmxlLCBjaHVua1NpemUsIGVuY29kZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXJhYmxlKSB7XG4gICAgeWllbGQqIHN0cmVhbUNodW5rKEFycmF5QnVmZmVyLmlzVmlldyhjaHVuaykgPyBjaHVuayA6IChhd2FpdCBlbmNvZGUoU3RyaW5nKGNodW5rKSkpLCBjaHVua1NpemUpO1xuICB9XG59O1xuXG5jb25zdCB0cmFja1N0cmVhbSA9IChzdHJlYW0sIGNodW5rU2l6ZSwgb25Qcm9ncmVzcywgb25GaW5pc2gsIGVuY29kZSkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IHJlYWRCeXRlcyhzdHJlYW0sIGNodW5rU2l6ZSwgZW5jb2RlKTtcblxuICBsZXQgYnl0ZXMgPSAwO1xuICBsZXQgZG9uZTtcbiAgbGV0IF9vbkZpbmlzaCA9IChlKSA9PiB7XG4gICAgaWYgKCFkb25lKSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIG9uRmluaXNoICYmIG9uRmluaXNoKGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgIF9vbkZpbmlzaCgpO1xuICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICBsZXQgbG9hZGVkQnl0ZXMgPSBieXRlcyArPSBsZW47XG4gICAgICAgICAgb25Qcm9ncmVzcyhsb2FkZWRCeXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX29uRmluaXNoKGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgIF9vbkZpbmlzaChyZWFzb24pO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yLnJldHVybigpO1xuICAgIH1cbiAgfSwge1xuICAgIGhpZ2hXYXRlck1hcms6IDJcbiAgfSlcbn07XG5cbmNvbnN0IGlzRmV0Y2hTdXBwb3J0ZWQgPSB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlcXVlc3QgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlc3BvbnNlID09PSAnZnVuY3Rpb24nO1xuY29uc3QgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgdHlwZW9mIFJlYWRhYmxlU3RyZWFtID09PSAnZnVuY3Rpb24nO1xuXG4vLyB1c2VkIG9ubHkgaW5zaWRlIHRoZSBmZXRjaCBhZGFwdGVyXG5jb25zdCBlbmNvZGVUZXh0ID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAodHlwZW9mIFRleHRFbmNvZGVyID09PSAnZnVuY3Rpb24nID9cbiAgICAoKGVuY29kZXIpID0+IChzdHIpID0+IGVuY29kZXIuZW5jb2RlKHN0cikpKG5ldyBUZXh0RW5jb2RlcigpKSA6XG4gICAgYXN5bmMgKHN0cikgPT4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgbmV3IFJlc3BvbnNlKHN0cikuYXJyYXlCdWZmZXIoKSlcbik7XG5cbmNvbnN0IHRlc3QgPSAoZm4sIC4uLmFyZ3MpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFmbiguLi5hcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59O1xuXG5jb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmIHRlc3QoKCkgPT4ge1xuICBsZXQgZHVwbGV4QWNjZXNzZWQgPSBmYWxzZTtcblxuICBjb25zdCBoYXNDb250ZW50VHlwZSA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgIGJvZHk6IG5ldyBSZWFkYWJsZVN0cmVhbSgpLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGdldCBkdXBsZXgoKSB7XG4gICAgICBkdXBsZXhBY2Nlc3NlZCA9IHRydWU7XG4gICAgICByZXR1cm4gJ2hhbGYnO1xuICAgIH0sXG4gIH0pLmhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKTtcblxuICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xufSk7XG5cbmNvbnN0IERFRkFVTFRfQ0hVTktfU0laRSA9IDY0ICogMTAyNDtcblxuY29uc3Qgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgdGVzdCgoKSA9PiB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCcnKS5ib2R5KSk7XG5cblxuY29uc3QgcmVzb2x2ZXJzID0ge1xuICBzdHJlYW06IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKChyZXMpID0+IHJlcy5ib2R5KVxufTtcblxuaXNGZXRjaFN1cHBvcnRlZCAmJiAoKChyZXMpID0+IHtcbiAgWyd0ZXh0JywgJ2FycmF5QnVmZmVyJywgJ2Jsb2InLCAnZm9ybURhdGEnLCAnc3RyZWFtJ10uZm9yRWFjaCh0eXBlID0+IHtcbiAgICAhcmVzb2x2ZXJzW3R5cGVdICYmIChyZXNvbHZlcnNbdHlwZV0gPSB1dGlscyQxLmlzRnVuY3Rpb24ocmVzW3R5cGVdKSA/IChyZXMpID0+IHJlc1t0eXBlXSgpIDpcbiAgICAgIChfLCBjb25maWcpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFJlc3BvbnNlIHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLCBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCwgY29uZmlnKTtcbiAgICAgIH0pO1xuICB9KTtcbn0pKG5ldyBSZXNwb25zZSkpO1xuXG5jb25zdCBnZXRCb2R5TGVuZ3RoID0gYXN5bmMgKGJvZHkpID0+IHtcbiAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc0Jsb2IoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5zaXplO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1NwZWNDb21wbGlhbnRGb3JtKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBuZXcgUmVxdWVzdChib2R5KS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc0FycmF5QnVmZmVyVmlldyhib2R5KSB8fCB1dGlscyQxLmlzQXJyYXlCdWZmZXIoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuICAgIGJvZHkgPSBib2R5ICsgJyc7XG4gIH1cblxuICBpZih1dGlscyQxLmlzU3RyaW5nKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICB9XG59O1xuXG5jb25zdCByZXNvbHZlQm9keUxlbmd0aCA9IGFzeW5jIChoZWFkZXJzLCBib2R5KSA9PiB7XG4gIGNvbnN0IGxlbmd0aCA9IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG59O1xuXG52YXIgZmV0Y2hBZGFwdGVyID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAoYXN5bmMgKGNvbmZpZykgPT4ge1xuICBsZXQge1xuICAgIHVybCxcbiAgICBtZXRob2QsXG4gICAgZGF0YSxcbiAgICBzaWduYWwsXG4gICAgY2FuY2VsVG9rZW4sXG4gICAgdGltZW91dCxcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgb25VcGxvYWRQcm9ncmVzcyxcbiAgICByZXNwb25zZVR5cGUsXG4gICAgaGVhZGVycyxcbiAgICB3aXRoQ3JlZGVudGlhbHMgPSAnc2FtZS1vcmlnaW4nLFxuICAgIGZldGNoT3B0aW9uc1xuICB9ID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuXG4gIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSA/IChyZXNwb25zZVR5cGUgKyAnJykudG9Mb3dlckNhc2UoKSA6ICd0ZXh0JztcblxuICBsZXQgW2NvbXBvc2VkU2lnbmFsLCBzdG9wVGltZW91dF0gPSAoc2lnbmFsIHx8IGNhbmNlbFRva2VuIHx8IHRpbWVvdXQpID9cbiAgICBjb21wb3NlU2lnbmFscyQxKFtzaWduYWwsIGNhbmNlbFRva2VuXSwgdGltZW91dCkgOiBbXTtcblxuICBsZXQgZmluaXNoZWQsIHJlcXVlc3Q7XG5cbiAgY29uc3Qgb25GaW5pc2ggPSAoKSA9PiB7XG4gICAgIWZpbmlzaGVkICYmIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29tcG9zZWRTaWduYWwgJiYgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcblxuICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgfTtcblxuICBsZXQgcmVxdWVzdENvbnRlbnRMZW5ndGg7XG5cbiAgdHJ5IHtcbiAgICBpZiAoXG4gICAgICBvblVwbG9hZFByb2dyZXNzICYmIHN1cHBvcnRzUmVxdWVzdFN0cmVhbSAmJiBtZXRob2QgIT09ICdnZXQnICYmIG1ldGhvZCAhPT0gJ2hlYWQnICYmXG4gICAgICAocmVxdWVzdENvbnRlbnRMZW5ndGggPSBhd2FpdCByZXNvbHZlQm9keUxlbmd0aChoZWFkZXJzLCBkYXRhKSkgIT09IDBcbiAgICApIHtcbiAgICAgIGxldCBfcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgZHVwbGV4OiBcImhhbGZcIlxuICAgICAgfSk7XG5cbiAgICAgIGxldCBjb250ZW50VHlwZUhlYWRlcjtcblxuICAgICAgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKSAmJiAoY29udGVudFR5cGVIZWFkZXIgPSBfcmVxdWVzdC5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoY29udGVudFR5cGVIZWFkZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3JlcXVlc3QuYm9keSkge1xuICAgICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgICByZXF1ZXN0Q29udGVudExlbmd0aCxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvblVwbG9hZFByb2dyZXNzKSlcbiAgICAgICAgKTtcblxuICAgICAgICBkYXRhID0gdHJhY2tTdHJlYW0oX3JlcXVlc3QuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCBmbHVzaCwgZW5jb2RlVGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscyQxLmlzU3RyaW5nKHdpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHdpdGhDcmVkZW50aWFscyA9IHdpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdvbWl0JztcbiAgICB9XG5cbiAgICByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAuLi5mZXRjaE9wdGlvbnMsXG4gICAgICBzaWduYWw6IGNvbXBvc2VkU2lnbmFsLFxuICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMubm9ybWFsaXplKCkudG9KU09OKCksXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgZHVwbGV4OiBcImhhbGZcIixcbiAgICAgIGNyZWRlbnRpYWxzOiB3aXRoQ3JlZGVudGlhbHNcbiAgICB9KTtcblxuICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3QpO1xuXG4gICAgY29uc3QgaXNTdHJlYW1SZXNwb25zZSA9IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScgfHwgcmVzcG9uc2VUeXBlID09PSAncmVzcG9uc2UnKTtcblxuICAgIGlmIChzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChvbkRvd25sb2FkUHJvZ3Jlc3MgfHwgaXNTdHJlYW1SZXNwb25zZSkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICAgICAgWydzdGF0dXMnLCAnc3RhdHVzVGV4dCcsICdoZWFkZXJzJ10uZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgb3B0aW9uc1twcm9wXSA9IHJlc3BvbnNlW3Byb3BdO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlQ29udGVudExlbmd0aCA9IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuXG4gICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gb25Eb3dubG9hZFByb2dyZXNzICYmIHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgIHJlc3BvbnNlQ29udGVudExlbmd0aCxcbiAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25Eb3dubG9hZFByb2dyZXNzKSwgdHJ1ZSlcbiAgICAgICkgfHwgW107XG5cbiAgICAgIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKFxuICAgICAgICB0cmFja1N0cmVhbShyZXNwb25zZS5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsICgpID0+IHtcbiAgICAgICAgICBmbHVzaCAmJiBmbHVzaCgpO1xuICAgICAgICAgIGlzU3RyZWFtUmVzcG9uc2UgJiYgb25GaW5pc2goKTtcbiAgICAgICAgfSwgZW5jb2RlVGV4dCksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlIHx8ICd0ZXh0JztcblxuICAgIGxldCByZXNwb25zZURhdGEgPSBhd2FpdCByZXNvbHZlcnNbdXRpbHMkMS5maW5kS2V5KHJlc29sdmVycywgcmVzcG9uc2VUeXBlKSB8fCAndGV4dCddKHJlc3BvbnNlLCBjb25maWcpO1xuXG4gICAgIWlzU3RyZWFtUmVzcG9uc2UgJiYgb25GaW5pc2goKTtcblxuICAgIHN0b3BUaW1lb3V0ICYmIHN0b3BUaW1lb3V0KCk7XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIGhlYWRlcnM6IEF4aW9zSGVhZGVycyQxLmZyb20ocmVzcG9uc2UuaGVhZGVycyksXG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH0pO1xuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG9uRmluaXNoKCk7XG5cbiAgICBpZiAoZXJyICYmIGVyci5uYW1lID09PSAnVHlwZUVycm9yJyAmJiAvZmV0Y2gvaS50ZXN0KGVyci5tZXNzYWdlKSkge1xuICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgbmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpLFxuICAgICAgICB7XG4gICAgICAgICAgY2F1c2U6IGVyci5jYXVzZSB8fCBlcnJcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cblxuICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlcnIsIGVyciAmJiBlcnIuY29kZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgfVxufSk7XG5cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXIsXG4gIGZldGNoOiBmZXRjaEFkYXB0ZXJcbn07XG5cbnV0aWxzJDEuZm9yRWFjaChrbm93bkFkYXB0ZXJzLCAoZm4sIHZhbHVlKSA9PiB7XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge3ZhbHVlfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywge3ZhbHVlfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByZW5kZXJSZWFzb24gPSAocmVhc29uKSA9PiBgLSAke3JlYXNvbn1gO1xuXG5jb25zdCBpc1Jlc29sdmVkSGFuZGxlID0gKGFkYXB0ZXIpID0+IHV0aWxzJDEuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCBhZGFwdGVyID09PSBudWxsIHx8IGFkYXB0ZXIgPT09IGZhbHNlO1xuXG52YXIgYWRhcHRlcnMgPSB7XG4gIGdldEFkYXB0ZXI6IChhZGFwdGVycykgPT4ge1xuICAgIGFkYXB0ZXJzID0gdXRpbHMkMS5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICAgIGNvbnN0IHtsZW5ndGh9ID0gYWRhcHRlcnM7XG4gICAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gICAgbGV0IGFkYXB0ZXI7XG5cbiAgICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICAgIGxldCBpZDtcblxuICAgICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRhcHRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWFkYXB0ZXIpIHtcblxuICAgICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucylcbiAgICAgICAgLm1hcCgoW2lkLCBzdGF0ZV0pID0+IGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICAgICAgKTtcblxuICAgICAgbGV0IHMgPSBsZW5ndGggP1xuICAgICAgICAocmVhc29ucy5sZW5ndGggPiAxID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKSA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKSkgOlxuICAgICAgICAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhZGFwdGVyO1xuICB9LFxuICBhZGFwdGVyczoga25vd25BZGFwdGVyc1xufTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5mdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cyQxLmFkYXB0ZXIpO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20ocmVzcG9uc2UuaGVhZGVycyk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuXG5jb25zdCBWRVJTSU9OID0gXCIxLjcuNFwiO1xuXG5jb25zdCB2YWxpZGF0b3JzJDEgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKCh0eXBlLCBpKSA9PiB7XG4gIHZhbGlkYXRvcnMkMVt0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbmNvbnN0IGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzJDEudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgY29uc3Qgb3B0ID0ga2V5c1tpXTtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG52YXIgdmFsaWRhdG9yID0ge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzJDFcbn07XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIkMSgpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIkMSgpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBsZXQgZHVtbXk7XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSA9IHt9KSA6IChkdW1teSA9IG5ldyBFcnJvcigpKTtcblxuICAgICAgICAvLyBzbGljZSBvZmYgdGhlIEVycm9yOiAuLi4gbGluZVxuICAgICAgICBjb25zdCBzdGFjayA9IGR1bW15LnN0YWNrID8gZHVtbXkuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywgJycpIDogJyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFlcnIuc3RhY2spIHtcbiAgICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgICAgLy8gbWF0Y2ggd2l0aG91dCB0aGUgMiB0b3Agc3RhY2sgbGluZXNcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrICYmICFTdHJpbmcoZXJyLnN0YWNrKS5lbmRzV2l0aChzdGFjay5yZXBsYWNlKC9eLitcXG4uK1xcbi8sICcnKSkpIHtcbiAgICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlnbm9yZSB0aGUgY2FzZSB3aGVyZSBcInN0YWNrXCIgaXMgYW4gdW4td3JpdGFibGUgcHJvcGVydHlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gICAgY29uc3Qge3RyYW5zaXRpb25hbCwgcGFyYW1zU2VyaWFsaXplciwgaGVhZGVyc30gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7XG4gICAgICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplclxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMocGFyYW1zU2VyaWFsaXplciwge1xuICAgICAgICAgIGVuY29kZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb25cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgICBjb25maWcubWV0aG9kID0gKGNvbmZpZy5tZXRob2QgfHwgdGhpcy5kZWZhdWx0cy5tZXRob2QgfHwgJ2dldCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgICBsZXQgY29udGV4dEhlYWRlcnMgPSBoZWFkZXJzICYmIHV0aWxzJDEubWVyZ2UoXG4gICAgICBoZWFkZXJzLmNvbW1vbixcbiAgICAgIGhlYWRlcnNbY29uZmlnLm1ldGhvZF1cbiAgICApO1xuXG4gICAgaGVhZGVycyAmJiB1dGlscyQxLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5jb25jYXQoY29udGV4dEhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICAgIGNvbnN0IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgbGV0IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgY2hhaW4ucHVzaC5hcHBseShjaGFpbiwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDtcblxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluW2krK10sIGNoYWluW2krK10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBsZW4gPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICBsZXQgbmV3Q29uZmlnID0gY29uZmlnO1xuXG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgY29uc3Qgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgY29uc3Qgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICB0cnkge1xuICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QuY2FsbCh0aGlzLCBuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGkgPSAwO1xuICAgIGxlbiA9IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0VXJpKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbiAgfVxufVxuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzJDEuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscyQxLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxudmFyIEF4aW9zJDEgPSBBeGlvcztcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmNsYXNzIENhbmNlbFRva2VuIHtcbiAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVQcm9taXNlO1xuXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gdGhpcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4oY2FuY2VsID0+IHtcbiAgICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgICBsZXQgaSA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgICB9XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4gPSBvbmZ1bGZpbGxlZCA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAqL1xuICB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgdGhyb3cgdGhpcy5yZWFzb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICAgKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICAgKi9cbiAgc3RhdGljIHNvdXJjZSgpIHtcbiAgICBsZXQgY2FuY2VsO1xuICAgIGNvbnN0IHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICAgIGNhbmNlbCA9IGM7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuLFxuICAgICAgY2FuY2VsXG4gICAgfTtcbiAgfVxufVxuXG52YXIgQ2FuY2VsVG9rZW4kMSA9IENhbmNlbFRva2VuO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzJDEuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn1cblxuY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbn07XG5cbk9iamVjdC5lbnRyaWVzKEh0dHBTdGF0dXNDb2RlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgSHR0cFN0YXR1c0NvZGVbdmFsdWVdID0ga2V5O1xufSk7XG5cbnZhciBIdHRwU3RhdHVzQ29kZSQxID0gSHR0cFN0YXR1c0NvZGU7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBBeGlvcyQxKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MkMS5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMkMS5leHRlbmQoaW5zdGFuY2UsIEF4aW9zJDEucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscyQxLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG5jb25zdCBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzJDEpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3MkMTtcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW4kMTtcbmF4aW9zLmlzQ2FuY2VsID0gaXNDYW5jZWw7XG5heGlvcy5WRVJTSU9OID0gVkVSU0lPTjtcbmF4aW9zLnRvRm9ybURhdGEgPSB0b0Zvcm1EYXRhO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IEF4aW9zRXJyb3I7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG5heGlvcy5zcHJlYWQgPSBzcHJlYWQ7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IGlzQXhpb3NFcnJvcjtcblxuLy8gRXhwb3NlIG1lcmdlQ29uZmlnXG5heGlvcy5tZXJnZUNvbmZpZyA9IG1lcmdlQ29uZmlnO1xuXG5heGlvcy5BeGlvc0hlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMTtcblxuYXhpb3MuZm9ybVRvSlNPTiA9IHRoaW5nID0+IGZvcm1EYXRhVG9KU09OKHV0aWxzJDEuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZSQxO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1heGlvcy5janMubWFwXG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubm1kID0gKG1vZHVsZSkgPT4ge1xuXHRtb2R1bGUucGF0aHMgPSBbXTtcblx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRyZXR1cm4gbW9kdWxlO1xufTsiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTcxMSk7XG4iXSwibmFtZXMiOlsiRG9tYWluIiwiZGF0YSIsInJlY2VpdmluZyIsInNlbmRpbmciLCJ0aGlzIiwibmFtZSIsInJlcXVpcmVfdGxzIiwic2tpcF92ZXJpZmljYXRpb24iLCJzdGF0ZSIsIndpbGRjYXJkIiwic3BhbV9hY3Rpb24iLCJjcmVhdGVkX2F0IiwiRGF0ZSIsInNtdHBfcGFzc3dvcmQiLCJzbXRwX2xvZ2luIiwidHlwZSIsInJlY2VpdmluZ19kbnNfcmVjb3JkcyIsInNlbmRpbmdfZG5zX3JlY29yZHMiLCJpZCIsImlzX2Rpc2FibGVkIiwid2ViX3ByZWZpeCIsIndlYl9zY2hlbWUiLCJ1c2VfYXV0b21hdGljX3NlbmRlcl9zZWN1cml0eSIsImR5bmFtaWNQcm9wZXJ0aWVzIiwicmVkdWNlIiwiYWNjIiwicHJvcGVydHlOYW1lIiwiT2JqZWN0IiwiYXNzaWduIiwidXJsX2pvaW5fMSIsIl9faW1wb3J0RGVmYXVsdCIsInJlcXVpcmUiLCJFcnJvcl8xIiwiZG9tYWluXzEiLCJEb21haW5zQ2xpZW50IiwicmVxdWVzdCIsImRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IiwiZG9tYWluVGVtcGxhdGVzQ2xpZW50IiwiZG9tYWluVGFnc0NsaWVudCIsImxvZ2dlciIsImNvbnNvbGUiLCJkb21haW5DcmVkZW50aWFscyIsImRvbWFpblRlbXBsYXRlcyIsImRvbWFpblRhZ3MiLCJwcm90b3R5cGUiLCJfaGFuZGxlQm9vbFZhbHVlcyIsInByb3BzRm9yUmVwbGFjZW1lbnQiLCJyZXBsYWNlZFByb3BzIiwia2V5cyIsImtleSIsInByb3AiLCJ2YWx1ZSIsInRvU3RyaW5nIiwiX19hc3NpZ24iLCJfcGFyc2VNZXNzYWdlIiwicmVzcG9uc2UiLCJib2R5IiwicGFyc2VEb21haW5MaXN0IiwiaXRlbXMiLCJtYXAiLCJpdGVtIiwiZGVmYXVsdCIsIl9wYXJzZURvbWFpbiIsImRvbWFpbiIsIl9wYXJzZVRyYWNraW5nU2V0dGluZ3MiLCJ0cmFja2luZyIsIl9wYXJzZVRyYWNraW5nVXBkYXRlIiwiX2lzT3BlblRyYWNraW5nSW5mb1dpdFBsYWNlIiwib2JqIiwibGlzdCIsInF1ZXJ5IiwiX3RoaXMiLCJnZXQiLCJ0aGVuIiwicmVzIiwicHJlcGFyZWRRdWVyeSIsIl9hIiwiZXh0ZW5kZWQiLCJfYiIsIndpdGhfZG5zIiwiY29uY2F0IiwiY3JlYXRlIiwicG9zdE9iaiIsInBvc3RXaXRoRkQiLCJ1cGRhdGUiLCJwdXREYXRhIiwicHV0V2l0aEZEIiwidmVyaWZ5IiwicHV0IiwiZGVzdHJveSIsImRlbGV0ZSIsImdldENvbm5lY3Rpb24iLCJ1cGRhdGVDb25uZWN0aW9uIiwiZ2V0VHJhY2tpbmciLCJ1cGRhdGVUcmFja2luZyIsInByZXBhcmVkRGF0YSIsImFjdGl2ZSIsInBsYWNlX2F0X3RoZV90b3AiLCJnZXRJcHMiLCJ3YXJuIiwiYXNzaWduSXAiLCJpcCIsImRlbGV0ZUlwIiwibGlua0lwUG9vbCIsInBvb2xJZCIsInBvb2xfaWQiLCJ1bmxpbmtJcFBvbGwiLCJyZXBsYWNlbWVudCIsInNlYXJjaFBhcmFtcyIsImdldFVzZXJEYXRhRXJyb3IiLCJ1cGRhdGVES0lNQXV0aG9yaXR5Iiwic2VsZiIsInVwZGF0ZURLSU1TZWxlY3RvciIsImRraW1TZWxlY3RvciIsInN0YXR1cyIsInNlbnQiLCJtZXNzYWdlIiwidXBkYXRlV2ViUHJlZml4Iiwid2ViUHJlZml4IiwiRG9tYWluQ3JlZGVudGlhbHNDbGllbnQiLCJiYXNlUm91dGUiLCJfcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QiLCJ0b3RhbENvdW50IiwidG90YWxfY291bnQiLCJfcGFyc2VNZXNzYWdlUmVzcG9uc2UiLCJfcGFyc2VEZWxldGVkUmVzcG9uc2UiLCJzcGVjIiwiY3JlZGVudGlhbHNMb2dpbiIsIk5hdmlnYXRpb25UaHJ1UGFnZXNfMSIsIkRvbWFpblRhZyIsInRhZ0luZm8iLCJ0YWciLCJkZXNjcmlwdGlvbiIsImV4cG9ydHMiLCJEb21haW5UYWdTdGF0aXN0aWMiLCJ0YWdTdGF0aXN0aWNJbmZvIiwic3RhcnQiLCJlbmQiLCJyZXNvbHV0aW9uIiwic3RhdHMiLCJzdGF0IiwidGltZSIsIkRvbWFpblRhZ3NDbGllbnQiLCJfc3VwZXIiLCJjYWxsIiwiX19leHRlbmRzIiwicGFyc2VMaXN0IiwicGFnZXMiLCJwYXJzZVBhZ2VMaW5rcyIsIl9wYXJzZVRhZ1N0YXRpc3RpYyIsInJlcXVlc3RMaXN0V2l0aFBhZ2VzIiwic3RhdGlzdGljIiwiY291bnRyaWVzIiwicHJvdmlkZXJzIiwiZGV2aWNlcyIsIkRvbWFpblRlbXBsYXRlSXRlbSIsImRvbWFpblRlbXBsYXRlRnJvbUFQSSIsImNyZWF0ZWRBdCIsImNyZWF0ZWRCeSIsInZlcnNpb24iLCJ2ZXJzaW9ucyIsImxlbmd0aCIsInJlc3VsdCIsIkRvbWFpblRlbXBsYXRlc0NsaWVudCIsInBhcnNlQ3JlYXRpb25SZXNwb25zZSIsInRlbXBsYXRlIiwicGFyc2VDcmVhdGlvblZlcnNpb25SZXNwb25zZSIsInBhcnNlTXV0YXRpb25SZXNwb25zZSIsInRlbXBsYXRlTmFtZSIsInBhcnNlTm90aWZpY2F0aW9uUmVzcG9uc2UiLCJwYXJzZU11dGF0ZVRlbXBsYXRlVmVyc2lvblJlc3BvbnNlIiwidGVtcGxhdGVWZXJzaW9uIiwiZCIsInBhcnNlTGlzdFRlbXBsYXRlVmVyc2lvbnMiLCJkZXN0cm95QWxsIiwibGlzdFZlcnNpb25zIiwiZ2V0VmVyc2lvbiIsImNyZWF0ZVZlcnNpb24iLCJ1cGRhdGVWZXJzaW9uIiwiZGVzdHJveVZlcnNpb24iLCJFdmVudENsaWVudCIsIklwUG9vbHNDbGllbnQiLCJwYXJzZUlwUG9vbHNSZXNwb25zZSIsInBhdGNoV2l0aEZEIiwiSXBzQ2xpZW50IiwicGFyc2VJcHNSZXNwb25zZSIsIkluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQiLCJwYXRoIiwiYXR0cmlidXRlTmFtZSIsIkluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQiLCJzdXBwb3J0ZWRfZmlsdGVycyIsIkluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQiLCJhdHRyaWJ1dGVzIiwiZmlsdGVycyIsInNoYXJpbmciLCJjb252ZXJ0RGF0ZVRvVVRDIiwiaW5wdXREYXRlIiwidG9JU09TdHJpbmciLCJwcmVwYXJlUXVlcnlEYXRhIiwicXVlcnlEYXRhIiwicHJlcGFyZUluYm94UGxhY2VtZW50c1Jlc3VsdCIsImJveCIsImhhbmRsZWRTZWVkTGlzdERhdGVzIiwidXBkYXRlZF9hdCIsInNoYXJpbmdfZXhwaXJlc19hdCIsIkJveCIsImxhc3RfcmVzdWx0X2F0IiwiSUQiLCJpbmJveFBsYWNlbWVudHNSZXN1bHQiLCJJZCIsImluYm94UGxhY2VtZW50UmVzdWx0IiwiZ2V0UmVzdWx0QnlTaGFyZUlkIiwic2hhcmVJZCIsIklQUlNoYXJpbmdDbGllbnQiLCJwcmVwYXJlSW5ib3hQbGFjZW1lbnRzUmVzdWx0U2hhcmluZyIsImV4cGlyZXNfYXQiLCJlbmFibGVkIiwiU2VlZHNMaXN0c0NsaWVudCIsInByZXBhcmVSZXN1bHQiLCJzZWVkTGlzdCIsInByZXBhcmVTZWVkTGlzdCIsInNlZWRzIiwiU2VlZHMiLCJzZWVkSXRlbSIsImhhbmRsZWRTZWVkRGF0ZXMiLCJtYXhfZW1haWxfY291bnRfaGl0X2F0IiwibGFzdF9zZW50X3RvX2F0IiwibGFzdF9kZWxpdmVyZWRfYXQiLCJ1cGRhdGVkU2VlZHNMaXN0Iiwic2VlZGxpc3QiLCJJbmJveFBsYWNlbWVudHNDbGllbnQiLCJzZWVkc0xpc3RzQ2xpZW50IiwicmVzdWx0cyIsInNlZWRzTGlzdHMiLCJydW5UZXN0IiwicG9zdCIsIkluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudCIsImhhbmRsZWRQcm92aWRlckRhdGVzIiwiUmVxdWVzdF8xIiwiZG9tYWluc0NsaWVudF8xIiwiRXZlbnRzXzEiLCJTdGF0c0NsaWVudF8xIiwiU3VwcHJlc3Npb25zQ2xpZW50XzEiLCJXZWJob29rc18xIiwiTWVzc2FnZXNfMSIsIlJvdXRlc18xIiwidmFsaWRhdGVfMSIsIklQc18xIiwiSVBQb29sc18xIiwibWFpbGluZ0xpc3RzXzEiLCJtYWlsTGlzdE1lbWJlcnNfMSIsImRvbWFpbnNDcmVkZW50aWFsc18xIiwibXVsdGlwbGVWYWxpZGF0aW9uXzEiLCJkb21haW5zVGVtcGxhdGVzXzEiLCJkb21haW5zVGFnc18xIiwiU3ViYWNjb3VudHNfMSIsIlNlZWRzTGlzdHNDbGllbnRfMSIsImluYm94UGxhY2VtZW50c18xIiwiSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudF8xIiwiQXR0cmlidXRlc0NsaWVudF8xIiwiRmlsdGVyc0NsaWVudF8xIiwiSW5ib3hQbGFjZW1lbnRzUmVzdWx0c1NoYXJpbmdDbGllbnRfMSIsIkluYm94UGxhY2VtZW50c1Byb3ZpZGVyc18xIiwiTWV0cmljc0NsaWVudF8xIiwiTWFpbGd1bkNsaWVudCIsIm9wdGlvbnMiLCJmb3JtRGF0YSIsImNvbmZpZyIsInVybCIsInVzZXJuYW1lIiwiRXJyb3IiLCJtYWlsTGlzdHNNZW1iZXJzIiwibXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IiwiSW5ib3hQbGFjZW1lbnRzUmVzdWx0c1NoYXJpbmdDbGllbnQiLCJzZWVkc0xpc3RzQXR0cmlidXRlcyIsInJlc3VsdHNBdHRyaWJ1dGVzQ2xpZW50Iiwic2VlZHNMaXN0c0ZpbHRlcnNDbGllbnQiLCJyZXN1bHRzRmlsdGVyc0NsaWVudCIsImluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQiLCJpbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnQiLCJkb21haW5zIiwid2ViaG9va3MiLCJldmVudHMiLCJtZXRyaWNzIiwic3VwcHJlc3Npb25zIiwibWVzc2FnZXMiLCJyb3V0ZXMiLCJpcHMiLCJpcF9wb29scyIsImxpc3RzIiwidmFsaWRhdGUiLCJzdWJhY2NvdW50cyIsImluYm94UGxhY2VtZW50cyIsInNldFN1YmFjY291bnQiLCJzdWJhY2NvdW50SWQiLCJzZXRTdWJhY2NvdW50SGVhZGVyIiwicmVzZXRTdWJhY2NvdW50IiwicmVzZXRTdWJhY2NvdW50SGVhZGVyIiwiTWFpbExpc3RzTWVtYmVycyIsImNoZWNrQW5kVXBkYXRlRGF0YSIsIm5ld0RhdGEiLCJ2YXJzIiwiSlNPTiIsInN0cmluZ2lmeSIsInN1YnNjcmliZWQiLCJsaXN0TWVtYmVycyIsIm1haWxMaXN0QWRkcmVzcyIsImdldE1lbWJlciIsIm1haWxMaXN0TWVtYmVyQWRkcmVzcyIsIm1lbWJlciIsImNyZWF0ZU1lbWJlciIsInJlcURhdGEiLCJjcmVhdGVNZW1iZXJzIiwibWVtYmVycyIsIkFycmF5IiwiaXNBcnJheSIsInVwc2VydCIsInVwZGF0ZU1lbWJlciIsImRlc3Ryb3lNZW1iZXIiLCJNYWlsaW5nTGlzdHNDbGllbnQiLCJwYXJzZVZhbGlkYXRpb25SZXN1bHQiLCJ2YWxpZGF0aW9uUmVzdWx0IiwiY2FuY2VsVmFsaWRhdGlvbiIsIk1lc3NhZ2VzQ2xpZW50IiwicHJlcGFyZUJvb2xlYW5WYWx1ZXMiLCJ5ZXNOb1Byb3BlcnRpZXMiLCJTZXQiLCJoYXMiLCJfcGFyc2VSZXNwb25zZSIsIm1vZGlmaWVkRGF0YSIsIk1ldHJpY3NDbGllbnQiLCJ0b1VUQ1N0cmluZyIsInByZXBhcmVRdWVyeSIsInN0YXJ0RGF0ZSIsImVuZERhdGUiLCJxU3RhcnQiLCJxRW5kIiwiaGFuZGxlUmVzcG9uc2UiLCJyZXNCb2R5IiwicGFyc2UiLCJnZXRBY2NvdW50IiwiZ2V0QWNjb3VudFVzYWdlIiwiUm91dGVzQ2xpZW50Iiwicm91dGUiLCJTdGF0c0NvbnRhaW5lcl8xIiwiU3RhdHNDbGllbnQiLCJwcmVwYXJlU2VhcmNoUGFyYW1zIiwiZW50cmllcyIsImFycmF5V2l0aFBhaXJzIiwiY3VycmVudFBhaXIiLCJyZXBlYXRlZFByb3BlcnR5IiwiX19zcHJlYWRBcnJheSIsInB1c2giLCJwYXJzZVN0YXRzIiwiZ2V0RG9tYWluIiwiU3RhdHNDb250YWluZXIiLCJTdWJhY2NvdW50c0NsaWVudCIsImVuYWJsZSIsImRpc2FibGUiLCJTVUJBQ0NPVU5UX0hFQURFUiIsIkVudW1zXzEiLCJCb3VuY2UiLCJTdXBwcmVzc2lvbk1vZGVscyIsIkJPVU5DRVMiLCJhZGRyZXNzIiwiY29kZSIsImVycm9yIiwiQ29tcGxhaW50IiwiQ09NUExBSU5UUyIsIlN1cHByZXNzaW9uIiwiQm91bmNlXzEiLCJDb21wbGFpbnRfMSIsIlVuc3Vic2NyaWJlXzEiLCJXaGl0ZUxpc3RfMSIsImNyZWF0ZU9wdGlvbnMiLCJoZWFkZXJzIiwiU3VwcHJlc3Npb25DbGllbnQiLCJtb2RlbHMiLCJib3VuY2VzIiwiY29tcGxhaW50cyIsInVuc3Vic2NyaWJlcyIsIndoaXRlbGlzdHMiLCJNb2RlbCIsIl9wYXJzZUl0ZW0iLCJjcmVhdGVXaGl0ZUxpc3QiLCJpc0RhdGFBcnJheSIsInByZXBhcmVSZXNwb25zZSIsImNyZWF0ZVVuc3Vic2NyaWJlIiwic29tZSIsInVuc3Vic2NyaWJlIiwidGFncyIsImdldE1vZGVsIiwibW9kZWwiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwb3N0RGF0YSIsIm1vZHVsZSIsIlVuc3Vic2NyaWJlIiwiVU5TVUJTQ1JJQkVTIiwiV2hpdGVMaXN0IiwiV0hJVEVMSVNUUyIsInJlYXNvbiIsIkF0dGFjaG1lbnRzSGFuZGxlcl8xIiwiTXVsdGlwbGVWYWxpZGF0aW9uSm9iIiwicmVzcG9uc2VTdGF0dXNDb2RlIiwicXVhbnRpdHkiLCJyZWNvcmRzUHJvY2Vzc2VkIiwicmVjb3Jkc19wcm9jZXNzZWQiLCJkb3dubG9hZF91cmwiLCJkb3dubG9hZFVybCIsImNzdiIsImpzb24iLCJzdW1tYXJ5IiwiY2F0Y2hBbGwiLCJjYXRjaF9hbGwiLCJkZWxpdmVyYWJsZSIsImRvTm90U2VuZCIsImRvX25vdF9zZW5kIiwidW5kZWxpdmVyYWJsZSIsInVua25vd24iLCJyaXNrIiwiaGlnaCIsImxvdyIsIm1lZGl1bSIsIk11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCIsImF0dGFjaG1lbnRzSGFuZGxlciIsImpvYnMiLCJqb2IiLCJ0b3RhbCIsImxpc3RJZCIsImNvbnZlcnRUb0V4cGVjdGVkU2hhcGUiLCJpc0J1ZmZlciIsImZpbGUiLCJtdWx0aXBsZVZhbGlkYXRpb25GaWxlIiwiaXNTdHJlYW0iLCJtdWx0aXBsZVZhbGlkYXRpb25EYXRhIiwiVmFsaWRhdGVDbGllbnQiLCJtdWx0aXBsZVZhbGlkYXRpb24iLCJXZWJob29rIiwidXJscyIsIldlYmhvb2tzQ2xpZW50IiwiX3BhcnNlV2ViaG9va0xpc3QiLCJfcGFyc2VXZWJob29rV2l0aElEIiwid2ViaG9va1Jlc3BvbnNlIiwid2ViaG9vayIsInVuZGVmaW5lZCIsIl9wYXJzZVdlYmhvb2tUZXN0IiwidGVzdCIsInVybFZhbHVlcyIsIkJsb2JGcm9tU3RyZWFtIiwic3RyZWFtIiwic2l6ZSIsIl9zdHJlYW0iLCJkZWZpbmVQcm9wZXJ0eSIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwiQXR0YWNobWVudHNIYW5kbGVyIiwiZ2V0QXR0YWNobWVudE9wdGlvbnMiLCJmaWxlbmFtZSIsImNvbnRlbnRUeXBlIiwia25vd25MZW5ndGgiLCJnZXRGaWxlSW5mbyIsImdldEN1c3RvbUZpbGVJbmZvIiwiZ2V0QnVmZmVySW5mbyIsImJ1ZmZlciIsImJ5dGVMZW5ndGgiLCJwaXBlIiwiaXNDdXN0b21GaWxlIiwiaXNCcm93c2VyRmlsZSIsIkJsb2IiLCJCdWZmZXIiLCJnZXRBdHRhY2htZW50SW5mbyIsImF0dGFjaG1lbnQiLCJjb252ZXJ0VG9GRGV4cGVjdGVkU2hhcGUiLCJ1c2VyUHJvdmlkZWRWYWx1ZSIsImdldEJsb2JGcm9tU3RyZWFtIiwiQVBJRXJyb3IiLCJzdGF0dXNUZXh0IiwiYm9keU1lc3NhZ2UiLCJzdGFjayIsImRldGFpbHMiLCJGb3JtRGF0YUJ1aWxkZXIiLCJGb3JtRGF0YUNvbnN0cnVjdG9yIiwiZmlsZUtleXMiLCJjcmVhdGVGb3JtRGF0YSIsImZpbHRlciIsImZvcm1EYXRhQWNjIiwiaW5jbHVkZXMiLCJhdHRhY2htZW50VmFsdWUiLCJpc01lc3NhZ2VBdHRhY2htZW50IiwiYWRkRmlsZXNUb0ZEIiwibWVzc2FnZVZhbHVlIiwiaXNNSU1FIiwiYWRkTWltZURhdGFUb0ZEIiwiYWRkQ29tbW9uUHJvcGVydHlUb0ZEIiwiZm9ybURhdGFJbnN0YW5jZSIsImlzRm9ybURhdGFQYWNrYWdlIiwiYXBwZW5kIiwiYnJvd3NlckZvcm1EYXRhIiwiYmxvYkluc3RhbmNlIiwiUmVhZGFibGVTdHJlYW0iLCJnZXRIZWFkZXJzIiwiRmlsZSIsImV2ZXJ5IiwiYXBwZW5kRmlsZVRvRkQiLCJvcmlnaW5hbEtleSIsIm9iakRhdGEiLCJmZCIsImZyb20iLCJibG9iIiwic2V0IiwiZm9yRWFjaCIsImFkZFZhbHVlQmFzZWRPbkZEIiwiZmRLZXkiLCJmZFZhbHVlIiwiTmF2aWdhdGlvblRocnVQYWdlcyIsInBhcnNlUGFnZSIsInBhZ2VVcmwiLCJ1cmxTZXBhcmF0b3IiLCJpdGVyYXRvck5hbWUiLCJVUkwiLCJwYWdlVmFsdWUiLCJzcGxpdCIsInBvcCIsIml0ZXJhdG9yUG9zaXRpb24iLCJwYWdlIiwicGFnaW5nIiwidXBkYXRlVXJsQW5kUXVlcnkiLCJjbGllbnRVcmwiLCJxdWVyeUNvcHkiLCJ1cGRhdGVkUXVlcnkiLCJiYXNlNjQiLCJfX2ltcG9ydFN0YXIiLCJheGlvc18xIiwiRm9ybURhdGFCdWlsZGVyXzEiLCJSZXF1ZXN0IiwidGltZW91dCIsIm1ha2VIZWFkZXJzRnJvbU9iamVjdCIsImZvcm1EYXRhQnVpbGRlciIsIm1heEJvZHlMZW5ndGgiLCJwcm94eSIsIm1ldGhvZCIsIm9uQ2FsbE9wdGlvbnMiLCJyZXF1ZXN0SGVhZGVycyIsImpvaW5BbmRUcmFuc2Zvcm1IZWFkZXJzIiwicGFyYW1zIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIlVSTFNlYXJjaFBhcmFtcyIsInVybFZhbHVlIiwidG9Mb2NhbGVVcHBlckNhc2UiLCJfZCIsImVycm9yUmVzcG9uc2UiLCJlcnJfMSIsIl9jIiwiZ2V0UmVzcG9uc2VCb2R5IiwiQXhpb3NIZWFkZXJzIiwiYmFzaWMiLCJlbmNvZGUiLCJzZXRBdXRob3JpemF0aW9uIiwicmVjZWl2ZWRPbkNhbGxIZWFkZXJzIiwib25DYWxsSGVhZGVycyIsImhlYWRlcnNPYmplY3QiLCJoZWFkZXJzQWNjdW11bGF0b3IiLCJjb21tYW5kIiwiYWRkRGVmYXVsdEhlYWRlcnMiLCJyZXF1ZXN0T3B0aW9ucyIsIlJlc29sdXRpb24iLCJXZWJob29rc0lkcyIsIlllc05vIiwiX19leHBvcnRTdGFyIiwiTWFpbGd1bkNsaWVudF8xIiwiTWFpbGd1biIsIkZvcm1EYXRhIiwiY2xpZW50IiwiZnJlZUV4cG9ydHMiLCJmcmVlR2xvYmFsIiwiZyIsImdsb2JhbCIsIndpbmRvdyIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsIlRBQkxFIiwiUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyIsImlucHV0IiwiU3RyaW5nIiwiYSIsImIiLCJjIiwicGFkZGluZyIsIm91dHB1dCIsInBvc2l0aW9uIiwiY2hhckNvZGVBdCIsImNoYXJBdCIsInJlcGxhY2UiLCJiaXRTdG9yYWdlIiwiYml0Q291bnRlciIsImluZGV4T2YiLCJmcm9tQ2hhckNvZGUiLCJzdHJBcnJheSIsInJlc3VsdEFycmF5IiwiVHlwZUVycm9yIiwibWF0Y2giLCJmaXJzdCIsInNoaWZ0IiwiaSIsImNvbXBvbmVudCIsInN0ciIsImpvaW4iLCJwYXJ0cyIsIm5vcm1hbGl6ZSIsImFyZ3VtZW50cyIsInNsaWNlIiwiZGVmaW5pdGlvbiIsImJpbmQiLCJmbiIsInRoaXNBcmciLCJhcHBseSIsImdldFByb3RvdHlwZU9mIiwia2luZE9mIiwiY2FjaGUiLCJ0aGluZyIsInRvTG93ZXJDYXNlIiwia2luZE9mVGVzdCIsInR5cGVPZlRlc3QiLCJpc1VuZGVmaW5lZCIsImlzQXJyYXlCdWZmZXIiLCJpc1N0cmluZyIsImlzRnVuY3Rpb24iLCJpc051bWJlciIsImlzT2JqZWN0IiwiaXNQbGFpbk9iamVjdCIsInZhbCIsIml0ZXJhdG9yIiwiaXNEYXRlIiwiaXNGaWxlIiwiaXNCbG9iIiwiaXNGaWxlTGlzdCIsImlzVVJMU2VhcmNoUGFyYW1zIiwiaXNSZWFkYWJsZVN0cmVhbSIsImlzUmVxdWVzdCIsImlzUmVzcG9uc2UiLCJpc0hlYWRlcnMiLCJhbGxPd25LZXlzIiwibCIsImxlbiIsImZpbmRLZXkiLCJfa2V5IiwiX2dsb2JhbCIsImdsb2JhbFRoaXMiLCJpc0NvbnRleHREZWZpbmVkIiwiY29udGV4dCIsImlzVHlwZWRBcnJheSIsIlR5cGVkQXJyYXkiLCJVaW50OEFycmF5IiwiaXNIVE1MRm9ybSIsImhhc093blByb3BlcnR5IiwiaXNSZWdFeHAiLCJyZWR1Y2VEZXNjcmlwdG9ycyIsInJlZHVjZXIiLCJkZXNjcmlwdG9ycyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJyZWR1Y2VkRGVzY3JpcHRvcnMiLCJkZXNjcmlwdG9yIiwicmV0IiwiZGVmaW5lUHJvcGVydGllcyIsIkFMUEhBIiwiRElHSVQiLCJBTFBIQUJFVCIsIkFMUEhBX0RJR0lUIiwidG9VcHBlckNhc2UiLCJpc0FzeW5jRm4iLCJfc2V0SW1tZWRpYXRlIiwic2V0SW1tZWRpYXRlU3VwcG9ydGVkIiwic2V0SW1tZWRpYXRlIiwicG9zdE1lc3NhZ2VTdXBwb3J0ZWQiLCJwb3N0TWVzc2FnZSIsInRva2VuIiwiTWF0aCIsInJhbmRvbSIsImNhbGxiYWNrcyIsImFkZEV2ZW50TGlzdGVuZXIiLCJzb3VyY2UiLCJjYiIsInNldFRpbWVvdXQiLCJhc2FwIiwicXVldWVNaWNyb3Rhc2siLCJwcm9jZXNzIiwibmV4dFRpY2siLCJ1dGlscyQxIiwiY29uc3RydWN0b3IiLCJpc0Zvcm1EYXRhIiwia2luZCIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJpc0Jvb2xlYW4iLCJtZXJnZSIsImNhc2VsZXNzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJleHRlbmQiLCJ0cmltIiwic3RyaXBCT00iLCJjb250ZW50IiwiaW5oZXJpdHMiLCJzdXBlckNvbnN0cnVjdG9yIiwicHJvcHMiLCJ0b0ZsYXRPYmplY3QiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwicHJvcEZpbHRlciIsIm1lcmdlZCIsImVuZHNXaXRoIiwic2VhcmNoU3RyaW5nIiwibGFzdEluZGV4IiwidG9BcnJheSIsImFyciIsImZvckVhY2hFbnRyeSIsIm5leHQiLCJkb25lIiwicGFpciIsIm1hdGNoQWxsIiwicmVnRXhwIiwibWF0Y2hlcyIsImV4ZWMiLCJoYXNPd25Qcm9wIiwiZnJlZXplTWV0aG9kcyIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsInRvT2JqZWN0U2V0IiwiYXJyYXlPclN0cmluZyIsImRlbGltaXRlciIsImRlZmluZSIsInRvQ2FtZWxDYXNlIiwibSIsInAxIiwicDIiLCJub29wIiwidG9GaW5pdGVOdW1iZXIiLCJkZWZhdWx0VmFsdWUiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImdlbmVyYXRlU3RyaW5nIiwiYWxwaGFiZXQiLCJpc1NwZWNDb21wbGlhbnRGb3JtIiwidG9KU09OT2JqZWN0IiwidmlzaXQiLCJ0YXJnZXQiLCJyZWR1Y2VkVmFsdWUiLCJpc1RoZW5hYmxlIiwiY2F0Y2giLCJBeGlvc0Vycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJ0b0pTT04iLCJudW1iZXIiLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJwcm90b3R5cGUkMSIsImN1c3RvbVByb3BzIiwiYXhpb3NFcnJvciIsImNhdXNlIiwiaXNWaXNpdGFibGUiLCJyZW1vdmVCcmFja2V0cyIsInJlbmRlcktleSIsImRvdHMiLCJwcmVkaWNhdGVzIiwidG9Gb3JtRGF0YSIsIm1ldGFUb2tlbnMiLCJpbmRleGVzIiwib3B0aW9uIiwidmlzaXRvciIsImRlZmF1bHRWaXNpdG9yIiwidXNlQmxvYiIsImNvbnZlcnRWYWx1ZSIsImlzRmxhdEFycmF5IiwiZWwiLCJpbmRleCIsImV4cG9zZWRIZWxwZXJzIiwiYnVpbGQiLCJlbmNvZGUkMSIsImNoYXJNYXAiLCJBeGlvc1VSTFNlYXJjaFBhcmFtcyIsIl9wYWlycyIsImJ1aWxkVVJMIiwiX2VuY29kZSIsInNlcmlhbGl6ZUZuIiwic2VyaWFsaXplIiwic2VyaWFsaXplZFBhcmFtcyIsImhhc2htYXJrSW5kZXgiLCJlbmNvZGVyIiwiSW50ZXJjZXB0b3JNYW5hZ2VyJDEiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJoYW5kbGVycyIsInVzZSIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwic3luY2hyb25vdXMiLCJydW5XaGVuIiwiZWplY3QiLCJjbGVhciIsImgiLCJ0cmFuc2l0aW9uYWxEZWZhdWx0cyIsInNpbGVudEpTT05QYXJzaW5nIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJjbGFyaWZ5VGltZW91dEVycm9yIiwicGxhdGZvcm0kMSIsImlzQnJvd3NlciIsImNsYXNzZXMiLCJwcm90b2NvbHMiLCJoYXNCcm93c2VyRW52IiwiZG9jdW1lbnQiLCJoYXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJwcm9kdWN0IiwibmF2aWdhdG9yIiwiaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52IiwiV29ya2VyR2xvYmFsU2NvcGUiLCJpbXBvcnRTY3JpcHRzIiwib3JpZ2luIiwibG9jYXRpb24iLCJocmVmIiwicGxhdGZvcm0iLCJmcmVlemUiLCJfX3Byb3RvX18iLCJmb3JtRGF0YVRvSlNPTiIsImJ1aWxkUGF0aCIsImlzTnVtZXJpY0tleSIsImlzTGFzdCIsImFycmF5VG9PYmplY3QiLCJwYXJzZVByb3BQYXRoIiwiZGVmYXVsdHMiLCJ0cmFuc2l0aW9uYWwiLCJhZGFwdGVyIiwidHJhbnNmb3JtUmVxdWVzdCIsImdldENvbnRlbnRUeXBlIiwiaGFzSlNPTkNvbnRlbnRUeXBlIiwiaXNPYmplY3RQYXlsb2FkIiwic2V0Q29udGVudFR5cGUiLCJoZWxwZXJzIiwiaXNOb2RlIiwidG9VUkxFbmNvZGVkRm9ybSIsImZvcm1TZXJpYWxpemVyIiwiX0Zvcm1EYXRhIiwiZW52IiwicmF3VmFsdWUiLCJwYXJzZXIiLCJlIiwic3RyaW5naWZ5U2FmZWx5IiwidHJhbnNmb3JtUmVzcG9uc2UiLCJKU09OUmVxdWVzdGVkIiwicmVzcG9uc2VUeXBlIiwic3RyaWN0SlNPTlBhcnNpbmciLCJFUlJfQkFEX1JFU1BPTlNFIiwieHNyZkNvb2tpZU5hbWUiLCJ4c3JmSGVhZGVyTmFtZSIsIm1heENvbnRlbnRMZW5ndGgiLCJ2YWxpZGF0ZVN0YXR1cyIsImNvbW1vbiIsImRlZmF1bHRzJDEiLCJpZ25vcmVEdXBsaWNhdGVPZiIsIiRpbnRlcm5hbHMiLCJub3JtYWxpemVIZWFkZXIiLCJoZWFkZXIiLCJub3JtYWxpemVWYWx1ZSIsIm1hdGNoSGVhZGVyVmFsdWUiLCJpc0hlYWRlck5hbWVGaWx0ZXIiLCJ2YWx1ZU9yUmV3cml0ZSIsInJld3JpdGUiLCJzZXRIZWFkZXIiLCJfdmFsdWUiLCJfaGVhZGVyIiwiX3Jld3JpdGUiLCJsSGVhZGVyIiwic2V0SGVhZGVycyIsInJhd0hlYWRlcnMiLCJwYXJzZWQiLCJsaW5lIiwic3Vic3RyaW5nIiwicGFyc2VIZWFkZXJzIiwidG9rZW5zIiwidG9rZW5zUkUiLCJwYXJzZVRva2VucyIsIm1hdGNoZXIiLCJkZWxldGVkIiwiZGVsZXRlSGVhZGVyIiwiZm9ybWF0Iiwibm9ybWFsaXplZCIsInciLCJjaGFyIiwiZm9ybWF0SGVhZGVyIiwidGFyZ2V0cyIsImFzU3RyaW5ncyIsImNvbXB1dGVkIiwiYWNjZXNzb3IiLCJhY2Nlc3NvcnMiLCJkZWZpbmVBY2Nlc3NvciIsImFjY2Vzc29yTmFtZSIsIm1ldGhvZE5hbWUiLCJhcmcxIiwiYXJnMiIsImFyZzMiLCJjb25maWd1cmFibGUiLCJidWlsZEFjY2Vzc29ycyIsIm1hcHBlZCIsImhlYWRlclZhbHVlIiwiQXhpb3NIZWFkZXJzJDEiLCJ0cmFuc2Zvcm1EYXRhIiwiZm5zIiwiaXNDYW5jZWwiLCJfX0NBTkNFTF9fIiwiQ2FuY2VsZWRFcnJvciIsIkVSUl9DQU5DRUxFRCIsInNldHRsZSIsInJlc29sdmUiLCJyZWplY3QiLCJFUlJfQkFEX1JFUVVFU1QiLCJmbG9vciIsInByb2dyZXNzRXZlbnRSZWR1Y2VyIiwibGlzdGVuZXIiLCJpc0Rvd25sb2FkU3RyZWFtIiwiZnJlcSIsImJ5dGVzTm90aWZpZWQiLCJfc3BlZWRvbWV0ZXIiLCJzYW1wbGVzQ291bnQiLCJtaW4iLCJieXRlcyIsInRpbWVzdGFtcHMiLCJmaXJzdFNhbXBsZVRTIiwiaGVhZCIsInRhaWwiLCJjaHVua0xlbmd0aCIsIm5vdyIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJwYXNzZWQiLCJyb3VuZCIsInNwZWVkb21ldGVyIiwibGFzdEFyZ3MiLCJ0aW1lciIsInRpbWVzdGFtcCIsInRocmVzaG9sZCIsImludm9rZSIsImFyZ3MiLCJjbGVhclRpbWVvdXQiLCJ0aHJvdHRsZSIsImxvYWRlZCIsImxlbmd0aENvbXB1dGFibGUiLCJwcm9ncmVzc0J5dGVzIiwicmF0ZSIsInByb2dyZXNzIiwiZXN0aW1hdGVkIiwiZXZlbnQiLCJwcm9ncmVzc0V2ZW50RGVjb3JhdG9yIiwidGhyb3R0bGVkIiwiYXN5bmNEZWNvcmF0b3IiLCJpc1VSTFNhbWVPcmlnaW4iLCJtc2llIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJjcmVhdGVFbGVtZW50Iiwib3JpZ2luVVJMIiwicmVzb2x2ZVVSTCIsInNldEF0dHJpYnV0ZSIsInByb3RvY29sIiwiaG9zdCIsInNlYXJjaCIsImhhc2giLCJob3N0bmFtZSIsInBvcnQiLCJwYXRobmFtZSIsInJlcXVlc3RVUkwiLCJjb29raWVzIiwid3JpdGUiLCJleHBpcmVzIiwic2VjdXJlIiwiY29va2llIiwidG9HTVRTdHJpbmciLCJyZWFkIiwiUmVnRXhwIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVtb3ZlIiwiYnVpbGRGdWxsUGF0aCIsImJhc2VVUkwiLCJyZXF1ZXN0ZWRVUkwiLCJyZWxhdGl2ZVVSTCIsImNvbWJpbmVVUkxzIiwiaGVhZGVyc1RvT2JqZWN0IiwibWVyZ2VDb25maWciLCJjb25maWcxIiwiY29uZmlnMiIsImdldE1lcmdlZFZhbHVlIiwibWVyZ2VEZWVwUHJvcGVydGllcyIsInZhbHVlRnJvbUNvbmZpZzIiLCJkZWZhdWx0VG9Db25maWcyIiwibWVyZ2VEaXJlY3RLZXlzIiwibWVyZ2VNYXAiLCJwYXJhbXNTZXJpYWxpemVyIiwidGltZW91dE1lc3NhZ2UiLCJ3aXRoQ3JlZGVudGlhbHMiLCJ3aXRoWFNSRlRva2VuIiwib25VcGxvYWRQcm9ncmVzcyIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImRlY29tcHJlc3MiLCJiZWZvcmVSZWRpcmVjdCIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJjYW5jZWxUb2tlbiIsInNvY2tldFBhdGgiLCJyZXNwb25zZUVuY29kaW5nIiwiY29uZmlnVmFsdWUiLCJyZXNvbHZlQ29uZmlnIiwibmV3Q29uZmlnIiwiYXV0aCIsImJ0b2EiLCJwYXNzd29yZCIsInVuZXNjYXBlIiwiQm9vbGVhbiIsInhzcmZWYWx1ZSIsInhockFkYXB0ZXIiLCJYTUxIdHRwUmVxdWVzdCIsIlByb21pc2UiLCJfY29uZmlnIiwicmVxdWVzdERhdGEiLCJvbkNhbmNlbGVkIiwidXBsb2FkVGhyb3R0bGVkIiwiZG93bmxvYWRUaHJvdHRsZWQiLCJmbHVzaFVwbG9hZCIsImZsdXNoRG93bmxvYWQiLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwiZXJyIiwicmVzcG9uc2VUZXh0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsIm9uYWJvcnQiLCJFQ09OTkFCT1JURUQiLCJvbmVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiRVRJTUVET1VUIiwic2V0UmVxdWVzdEhlYWRlciIsInVwbG9hZCIsImNhbmNlbCIsImFib3J0Iiwic3Vic2NyaWJlIiwiYWJvcnRlZCIsInBhcnNlUHJvdG9jb2wiLCJzZW5kIiwiY29tcG9zZVNpZ25hbHMkMSIsInNpZ25hbHMiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwic3RyZWFtQ2h1bmsiLCJjaHVuayIsImNodW5rU2l6ZSIsInBvcyIsInRyYWNrU3RyZWFtIiwib25Qcm9ncmVzcyIsIm9uRmluaXNoIiwiYXN5bmMiLCJpdGVyYWJsZSIsInJlYWRCeXRlcyIsIl9vbkZpbmlzaCIsInB1bGwiLCJjbG9zZSIsImxvYWRlZEJ5dGVzIiwiZW5xdWV1ZSIsInJldHVybiIsImhpZ2hXYXRlck1hcmsiLCJpc0ZldGNoU3VwcG9ydGVkIiwiZmV0Y2giLCJSZXNwb25zZSIsImlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQiLCJlbmNvZGVUZXh0IiwiVGV4dEVuY29kZXIiLCJhcnJheUJ1ZmZlciIsInN1cHBvcnRzUmVxdWVzdFN0cmVhbSIsImR1cGxleEFjY2Vzc2VkIiwiaGFzQ29udGVudFR5cGUiLCJkdXBsZXgiLCJzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtIiwicmVzb2x2ZXJzIiwiXyIsIkVSUl9OT1RfU1VQUE9SVCIsInJlc29sdmVCb2R5TGVuZ3RoIiwiZ2V0Q29udGVudExlbmd0aCIsImdldEJvZHlMZW5ndGgiLCJrbm93bkFkYXB0ZXJzIiwiaHR0cCIsInhociIsImZldGNoT3B0aW9ucyIsImZpbmlzaGVkIiwiY29tcG9zZWRTaWduYWwiLCJzdG9wVGltZW91dCIsInJlcXVlc3RDb250ZW50TGVuZ3RoIiwiY29udGVudFR5cGVIZWFkZXIiLCJfcmVxdWVzdCIsImZsdXNoIiwiY3JlZGVudGlhbHMiLCJpc1N0cmVhbVJlc3BvbnNlIiwicmVzcG9uc2VDb250ZW50TGVuZ3RoIiwicmVzcG9uc2VEYXRhIiwicmVuZGVyUmVhc29uIiwiaXNSZXNvbHZlZEhhbmRsZSIsImFkYXB0ZXJzIiwibmFtZU9yQWRhcHRlciIsInJlamVjdGVkUmVhc29ucyIsInJlYXNvbnMiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidGhyb3dJZlJlcXVlc3RlZCIsImRpc3BhdGNoUmVxdWVzdCIsIlZFUlNJT04iLCJ2YWxpZGF0b3JzJDEiLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ2YWxpZGF0b3IiLCJmb3JtYXRNZXNzYWdlIiwib3B0IiwiZGVzYyIsIm9wdHMiLCJFUlJfREVQUkVDQVRFRCIsImFzc2VydE9wdGlvbnMiLCJzY2hlbWEiLCJhbGxvd1Vua25vd24iLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwidmFsaWRhdG9ycyIsIkF4aW9zIiwiaW5zdGFuY2VDb25maWciLCJpbnRlcmNlcHRvcnMiLCJjb25maWdPclVybCIsImR1bW15IiwiYm9vbGVhbiIsImZ1bmN0aW9uIiwiY29udGV4dEhlYWRlcnMiLCJyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiIsInN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwidW5zaGlmdCIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsInByb21pc2UiLCJjaGFpbiIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImdldFVyaSIsImdlbmVyYXRlSFRUUE1ldGhvZCIsImlzRm9ybSIsIkF4aW9zJDEiLCJDYW5jZWxUb2tlbiIsImV4ZWN1dG9yIiwicmVzb2x2ZVByb21pc2UiLCJfbGlzdGVuZXJzIiwib25mdWxmaWxsZWQiLCJfcmVzb2x2ZSIsInNwbGljZSIsIkNhbmNlbFRva2VuJDEiLCJIdHRwU3RhdHVzQ29kZSIsIkNvbnRpbnVlIiwiU3dpdGNoaW5nUHJvdG9jb2xzIiwiUHJvY2Vzc2luZyIsIkVhcmx5SGludHMiLCJPayIsIkNyZWF0ZWQiLCJBY2NlcHRlZCIsIk5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbiIsIk5vQ29udGVudCIsIlJlc2V0Q29udGVudCIsIlBhcnRpYWxDb250ZW50IiwiTXVsdGlTdGF0dXMiLCJBbHJlYWR5UmVwb3J0ZWQiLCJJbVVzZWQiLCJNdWx0aXBsZUNob2ljZXMiLCJNb3ZlZFBlcm1hbmVudGx5IiwiRm91bmQiLCJTZWVPdGhlciIsIk5vdE1vZGlmaWVkIiwiVXNlUHJveHkiLCJVbnVzZWQiLCJUZW1wb3JhcnlSZWRpcmVjdCIsIlBlcm1hbmVudFJlZGlyZWN0IiwiQmFkUmVxdWVzdCIsIlVuYXV0aG9yaXplZCIsIlBheW1lbnRSZXF1aXJlZCIsIkZvcmJpZGRlbiIsIk5vdEZvdW5kIiwiTWV0aG9kTm90QWxsb3dlZCIsIk5vdEFjY2VwdGFibGUiLCJQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJSZXF1ZXN0VGltZW91dCIsIkNvbmZsaWN0IiwiR29uZSIsIkxlbmd0aFJlcXVpcmVkIiwiUHJlY29uZGl0aW9uRmFpbGVkIiwiUGF5bG9hZFRvb0xhcmdlIiwiVXJpVG9vTG9uZyIsIlVuc3VwcG9ydGVkTWVkaWFUeXBlIiwiUmFuZ2VOb3RTYXRpc2ZpYWJsZSIsIkV4cGVjdGF0aW9uRmFpbGVkIiwiSW1BVGVhcG90IiwiTWlzZGlyZWN0ZWRSZXF1ZXN0IiwiVW5wcm9jZXNzYWJsZUVudGl0eSIsIkxvY2tlZCIsIkZhaWxlZERlcGVuZGVuY3kiLCJUb29FYXJseSIsIlVwZ3JhZGVSZXF1aXJlZCIsIlByZWNvbmRpdGlvblJlcXVpcmVkIiwiVG9vTWFueVJlcXVlc3RzIiwiUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlIiwiVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMiLCJJbnRlcm5hbFNlcnZlckVycm9yIiwiTm90SW1wbGVtZW50ZWQiLCJCYWRHYXRld2F5IiwiU2VydmljZVVuYXZhaWxhYmxlIiwiR2F0ZXdheVRpbWVvdXQiLCJIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZCIsIlZhcmlhbnRBbHNvTmVnb3RpYXRlcyIsIkluc3VmZmljaWVudFN0b3JhZ2UiLCJMb29wRGV0ZWN0ZWQiLCJOb3RFeHRlbmRlZCIsIk5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiSHR0cFN0YXR1c0NvZGUkMSIsImF4aW9zIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiaW5zdGFuY2UiLCJDYW5jZWwiLCJhbGwiLCJwcm9taXNlcyIsInNwcmVhZCIsImNhbGxiYWNrIiwiaXNBeGlvc0Vycm9yIiwicGF5bG9hZCIsImZvcm1Ub0pTT04iLCJnZXRBZGFwdGVyIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIkZ1bmN0aW9uIiwibm1kIiwicGF0aHMiLCJjaGlsZHJlbiJdLCJzb3VyY2VSb290IjoiIn0=