mailgun.js 11.1.0 → 12.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AMD/definitions.amd.js +48 -0
- package/AMD/mailgun.amd.js +2 -0
- package/CHANGELOG.md +74 -0
- package/CJS/definitions.cjs +46 -0
- package/CJS/mailgun.node.cjs +2 -0
- package/ESM/definitions.browser.js +44 -0
- package/ESM/definitions.node.js +44 -0
- package/ESM/mailgun.browser.js +2 -0
- package/ESM/mailgun.node.js +2 -0
- package/README.md +94 -28
- package/{Classes → Types/Classes}/Domains/domain.d.ts +1 -1
- package/{Classes → Types/Classes}/Domains/domainsClient.d.ts +5 -5
- package/{Classes → Types/Classes}/Domains/domainsCredentials.d.ts +3 -3
- package/{Classes → Types/Classes}/Domains/domainsTags.d.ts +5 -5
- package/{Classes → Types/Classes}/Domains/domainsTemplates.d.ts +4 -4
- package/{Classes → Types/Classes}/Domains/domainsTracking.d.ts +3 -3
- package/{Classes → Types/Classes}/Events.d.ts +4 -4
- package/{Classes → Types/Classes}/IPPools.d.ts +3 -3
- package/{Classes → Types/Classes}/IPs.d.ts +3 -3
- package/{Classes → Types/Classes}/InboxPlacements/AttributesClient.d.ts +3 -3
- package/{Classes → Types/Classes}/InboxPlacements/FiltersClient.d.ts +3 -3
- package/{Classes → Types/Classes}/InboxPlacements/Results/InboxPlacementsResultsClient.d.ts +4 -4
- package/{Classes → Types/Classes}/InboxPlacements/Results/InboxPlacementsResultsSharingClient.d.ts +3 -3
- package/{Classes → Types/Classes}/InboxPlacements/SeedsLists/SeedsListsClient.d.ts +4 -4
- package/{Classes → Types/Classes}/InboxPlacements/inboxPlacements.d.ts +3 -5
- package/{Classes → Types/Classes}/InboxPlacements/providers/InboxPlacementsProviders.d.ts +3 -3
- package/{Classes → Types/Classes}/MailgunClient.d.ts +4 -4
- package/{Classes → Types/Classes}/MailingLists/mailListMembers.d.ts +4 -4
- package/{Classes → Types/Classes}/MailingLists/mailingLists.d.ts +5 -5
- package/{Classes → Types/Classes}/Messages.d.ts +3 -3
- package/{Classes → Types/Classes}/Metrics/MetricsClient.d.ts +3 -4
- package/{Classes → Types/Classes}/Routes.d.ts +3 -3
- package/{Classes → Types/Classes}/Stats/StatsClient.d.ts +3 -4
- package/{Classes → Types/Classes}/Stats/StatsContainer.d.ts +2 -2
- package/{Classes → Types/Classes}/Subaccounts.d.ts +3 -3
- package/{Classes → Types/Classes}/Suppressions/Bounce.d.ts +3 -3
- package/Types/Classes/Suppressions/Complaint.d.ts +8 -0
- package/{Classes → Types/Classes}/Suppressions/Suppression.d.ts +1 -1
- package/{Classes → Types/Classes}/Suppressions/SuppressionsClient.d.ts +5 -5
- package/{Classes → Types/Classes}/Suppressions/Unsubscribe.d.ts +3 -3
- package/Types/Classes/Suppressions/WhiteList.d.ts +9 -0
- package/{Classes → Types/Classes}/Validations/multipleValidation.d.ts +4 -4
- package/{Classes → Types/Classes}/Validations/validate.d.ts +3 -3
- package/{Classes → Types/Classes}/Webhooks.d.ts +4 -4
- package/{Classes → Types/Classes}/common/AttachmentsHandler.d.ts +2 -2
- package/{Classes → Types/Classes}/common/Error.d.ts +1 -1
- package/{Classes → Types/Classes}/common/FormDataBuilder.d.ts +2 -2
- package/{Classes → Types/Classes}/common/NavigationThruPages.d.ts +4 -4
- package/{Classes → Types/Classes}/common/Request.d.ts +1 -1
- package/Types/Interfaces/Common/index.d.ts +1 -0
- package/{Interfaces → Types/Interfaces}/Domains/DomainCredentials.d.ts +1 -1
- package/{Interfaces → Types/Interfaces}/Domains/DomainTags.d.ts +2 -2
- package/{Interfaces → Types/Interfaces}/Domains/DomainTemplates.d.ts +1 -1
- package/{Interfaces → Types/Interfaces}/Domains/DomainTracking.d.ts +1 -1
- package/{Interfaces → Types/Interfaces}/Domains/DomainsClient.d.ts +6 -6
- package/Types/Interfaces/Domains/index.d.ts +5 -0
- package/{Interfaces → Types/Interfaces}/EventClient/IEventClient.d.ts +1 -1
- package/Types/Interfaces/EventClient/index.d.ts +1 -0
- package/{Interfaces → Types/Interfaces}/IPPools/IIPPoolsClient.d.ts +1 -1
- package/Types/Interfaces/IPPools/index.d.ts +1 -0
- package/{Interfaces → Types/Interfaces}/IPs/IIPsClient.d.ts +1 -1
- package/Types/Interfaces/IPs/index.d.ts +1 -0
- package/{Interfaces → Types/Interfaces}/InboxPlacements/AttributesClient.d.ts +1 -1
- package/{Interfaces → Types/Interfaces}/InboxPlacements/FiltersClient.d.ts +1 -1
- package/{Interfaces → Types/Interfaces}/InboxPlacements/InboxPlacementsClient.d.ts +4 -4
- package/{Interfaces → Types/Interfaces}/InboxPlacements/Results/InboxPlacementsResults.d.ts +4 -4
- package/{Interfaces → Types/Interfaces}/InboxPlacements/Results/InboxPlacementsResultsSharing.d.ts +1 -1
- package/{Interfaces → Types/Interfaces}/InboxPlacements/SeedsLists/SeedsListsClient.d.ts +3 -3
- package/Types/Interfaces/InboxPlacements/index.d.ts +7 -0
- package/{Interfaces → Types/Interfaces}/InboxPlacements/providers/InboxPlacementsProviders.d.ts +1 -1
- package/Types/Interfaces/MailgunClient/IMailgunClient.d.ts +34 -0
- package/Types/Interfaces/MailgunClient/index.d.ts +1 -0
- package/{Interfaces → Types/Interfaces}/MailingLists/MailingListMembers.d.ts +1 -1
- package/{Interfaces → Types/Interfaces}/MailingLists/MailingListsClient.d.ts +2 -2
- package/Types/Interfaces/MailingLists/index.d.ts +2 -0
- package/{Interfaces → Types/Interfaces}/Messages/IMessagesClient.d.ts +1 -1
- package/Types/Interfaces/Messages/index.d.ts +1 -0
- package/{Interfaces → Types/Interfaces}/Metrics/MetricsClient.d.ts +1 -1
- package/{Interfaces → Types/Interfaces}/Routes/IRoutesClient.d.ts +1 -1
- package/Types/Interfaces/Routes/index.d.ts +1 -0
- package/{Interfaces → Types/Interfaces}/Stats/StatsClient.d.ts +2 -2
- package/{Interfaces → Types/Interfaces}/Stats/StatsContainer.d.ts +1 -1
- package/Types/Interfaces/Stats/index.d.ts +2 -0
- package/{Interfaces → Types/Interfaces}/Subaccounts/ISubaccountsClient.d.ts +1 -1
- package/Types/Interfaces/Subaccounts/index.d.ts +1 -0
- package/{Interfaces → Types/Interfaces}/Suppressions/ISuppressionsClient.d.ts +5 -5
- package/Types/Interfaces/Suppressions/index.d.ts +5 -0
- package/{Interfaces → Types/Interfaces}/Validations/MultipleValidation.d.ts +1 -1
- package/{Interfaces → Types/Interfaces}/Validations/Validation.d.ts +2 -2
- package/Types/Interfaces/Validations/index.d.ts +2 -0
- package/{Interfaces → Types/Interfaces}/Webhooks/IWebHooksClient.d.ts +2 -2
- package/Types/Interfaces/Webhooks/index.d.ts +1 -0
- package/Types/Interfaces/index.d.ts +16 -0
- package/Types/{Common → Types/Common}/FormData.d.ts +1 -1
- package/Types/{Common → Types/Common}/RequestOptions.d.ts +1 -1
- package/Types/Types/Common/index.d.ts +6 -0
- package/Types/{Domains → Types/Domains}/DomainTags.d.ts +2 -2
- package/Types/{Domains → Types/Domains}/DomainTemplates.d.ts +3 -3
- package/Types/Types/Domains/index.d.ts +5 -0
- package/Types/{Events → Types/Events}/Events.d.ts +1 -1
- package/Types/Types/Events/index.d.ts +1 -0
- package/Types/Types/IPPools/index.d.ts +1 -0
- package/Types/Types/IPs/index.d.ts +1 -0
- package/Types/{InboxPlacements → Types/InboxPlacements}/Results/InboxPlacementsResults.d.ts +1 -1
- package/Types/{InboxPlacements → Types/InboxPlacements}/SeedsLists/SeedsLists.d.ts +1 -1
- package/Types/Types/InboxPlacements/index.d.ts +7 -0
- package/Types/Types/MailgunClient/index.d.ts +1 -0
- package/Types/{MailingLists → Types/MailingLists}/MailingListMembers.d.ts +2 -2
- package/Types/{MailingLists → Types/MailingLists}/MailingLists.d.ts +1 -1
- package/Types/Types/MailingLists/index.d.ts +2 -0
- package/Types/Types/Messages/index.d.ts +1 -0
- package/Types/{Metrics → Types/Metrics}/Metrics.d.ts +1 -1
- package/Types/{Metrics → Types/Metrics}/MetricsAPI.d.ts +1 -1
- package/Types/Types/Metrics/index.d.ts +2 -0
- package/Types/Types/Routes/index.d.ts +1 -0
- package/Types/Types/Stats/index.d.ts +1 -0
- package/Types/Types/Subaccounts/index.d.ts +1 -0
- package/Types/{Suppressions → Types/Suppressions}/Suppressions.d.ts +3 -3
- package/Types/Types/Suppressions/index.d.ts +5 -0
- package/Types/{Validations → Types/Validations}/MultipleValidation.d.ts +2 -2
- package/Types/Types/Validations/index.d.ts +2 -0
- package/Types/Types/Webhooks/index.d.ts +1 -0
- package/Types/Types/index.d.ts +15 -0
- package/Types/definitions.d.ts +3 -0
- package/Types/index.d.ts +8 -14
- package/Types/index.js +6578 -0
- package/package.json +40 -6
- package/version.md +1 -1
- package/Classes/Suppressions/Complaint.d.ts +0 -8
- package/Classes/Suppressions/WhiteList.d.ts +0 -9
- package/Interfaces/Common/index.d.ts +0 -1
- package/Interfaces/Domains/index.d.ts +0 -5
- package/Interfaces/EventClient/index.d.ts +0 -1
- package/Interfaces/IPPools/index.d.ts +0 -1
- package/Interfaces/IPs/index.d.ts +0 -1
- package/Interfaces/InboxPlacements/Results/InboxPlacementsResultsClient.d.ts +0 -8
- package/Interfaces/InboxPlacements/SeedsLists/AttributesClient.d.ts +0 -5
- package/Interfaces/InboxPlacements/SeedsLists/FiltersClient.d.ts +0 -4
- package/Interfaces/InboxPlacements/index.d.ts +0 -6
- package/Interfaces/MailgunClient/IMailgunClient.d.ts +0 -32
- package/Interfaces/MailgunClient/index.d.ts +0 -1
- package/Interfaces/MailingLists/index.d.ts +0 -2
- package/Interfaces/Messages/index.d.ts +0 -1
- package/Interfaces/Routes/index.d.ts +0 -1
- package/Interfaces/Stats/index.d.ts +0 -2
- package/Interfaces/Subaccounts/index.d.ts +0 -1
- package/Interfaces/Suppressions/index.d.ts +0 -5
- package/Interfaces/Validations/index.d.ts +0 -2
- package/Interfaces/Webhooks/index.d.ts +0 -1
- package/Interfaces/index.d.ts +0 -15
- package/Types/Common/index.d.ts +0 -5
- package/Types/Domains/index.d.ts +0 -5
- package/Types/Events/index.d.ts +0 -1
- package/Types/IPPools/index.d.ts +0 -1
- package/Types/IPs/index.d.ts +0 -1
- package/Types/InboxPlacements/InboxPlacementsClient.d.ts +0 -0
- package/Types/InboxPlacements/index.d.ts +0 -7
- package/Types/MailgunClient/index.d.ts +0 -1
- package/Types/MailingLists/index.d.ts +0 -2
- package/Types/Messages/index.d.ts +0 -1
- package/Types/Metrics/index.d.ts +0 -2
- package/Types/Routes/index.d.ts +0 -1
- package/Types/SecureTracking/SecureTracking.d.ts +0 -13
- package/Types/SecureTracking/index.d.ts +0 -1
- package/Types/Stats/index.d.ts +0 -1
- package/Types/Subaccounts/index.d.ts +0 -1
- package/Types/Suppressions/index.d.ts +0 -5
- package/Types/Validations/index.d.ts +0 -2
- package/Types/Webhooks/index.d.ts +0 -1
- package/index.d.ts +0 -11
- package/mailgun.node.js +0 -3
- package/mailgun.node.js.LICENSE.txt +0 -17
- package/mailgun.web.js +0 -3
- package/mailgun.web.js.LICENSE.txt +0 -3
- /package/{Enums → Types/Enums}/index.d.ts +0 -0
- /package/{Interfaces → Types/Interfaces}/Common/Logger.d.ts +0 -0
- /package/{Interfaces → Types/Interfaces}/Suppressions/Bounce.d.ts +0 -0
- /package/{Interfaces → Types/Interfaces}/Suppressions/Complaint.d.ts +0 -0
- /package/{Interfaces → Types/Interfaces}/Suppressions/Unsubscribe.d.ts +0 -0
- /package/{Interfaces → Types/Interfaces}/Suppressions/WhiteList.d.ts +0 -0
- /package/Types/{Common → Types/Common}/ApiResponse.d.ts +0 -0
- /package/Types/{Common → Types/Common}/Attachments.d.ts +0 -0
- /package/Types/{Common → Types/Common}/Error.d.ts +0 -0
- /package/Types/{Common → Types/Common}/NavigationThruPages.d.ts +0 -0
- /package/Types/{Domains → Types/Domains}/DomainCredentials.d.ts +0 -0
- /package/Types/{Domains → Types/Domains}/DomainTracking.d.ts +0 -0
- /package/Types/{Domains → Types/Domains}/Domains.d.ts +0 -0
- /package/Types/{IPPools → Types/IPPools}/IpPools.d.ts +0 -0
- /package/Types/{IPs → Types/IPs}/IPs.d.ts +0 -0
- /package/Types/{InboxPlacements → Types/InboxPlacements}/Attributes.d.ts +0 -0
- /package/Types/{InboxPlacements → Types/InboxPlacements}/Filters.d.ts +0 -0
- /package/Types/{InboxPlacements → Types/InboxPlacements}/InboxPlacements.d.ts +0 -0
- /package/Types/{InboxPlacements → Types/InboxPlacements}/Results/InboxPlacementsResultsSharing.d.ts +0 -0
- /package/Types/{InboxPlacements → Types/InboxPlacements}/providers/InboxPlacementsProviders.d.ts +0 -0
- /package/Types/{MailgunClient → Types/MailgunClient}/MailgunClientOptions.d.ts +0 -0
- /package/Types/{Messages → Types/Messages}/Messages.d.ts +0 -0
- /package/Types/{Routes → Types/Routes}/Routes.d.ts +0 -0
- /package/Types/{Stats → Types/Stats}/Stats.d.ts +0 -0
- /package/Types/{Subaccounts → Types/Subaccounts}/Subaccounts.d.ts +0 -0
- /package/Types/{Suppressions → Types/Suppressions}/Bounce.d.ts +0 -0
- /package/Types/{Suppressions → Types/Suppressions}/Complaint.d.ts +0 -0
- /package/Types/{Suppressions → Types/Suppressions}/Unsubscribe.d.ts +0 -0
- /package/Types/{Suppressions → Types/Suppressions}/WhiteList.d.ts +0 -0
- /package/Types/{Validations → Types/Validations}/Validation.d.ts +0 -0
- /package/Types/{Webhooks → Types/Webhooks}/Webhooks.d.ts +0 -0
package/mailgun.web.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
/*! For license information please see mailgun.web.js.LICENSE.txt */
|
|
2
|
-
define((()=>(()=>{var t={8296:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(t,e,n){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=n||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 r=["dkim_host","mailfrom_host"].reduce((function(e,n){return t[n]&&(e[n]=t[n]),e}),{});Object.assign(this,r)};e.default=n},5612:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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(n(5469)),u=s(n(9538)),c=s(n(8296)),l=function(){function t(t,e,n,r,o,i){void 0===i&&(i=console),this.request=t,this.domainCredentials=e,this.domainTemplates=n,this.domainTags=r,this.logger=i,this.domainTracking=o}return t.prototype._handleBoolValues=function(t){var e=t,n=Object.keys(e).reduce((function(t,n){var r=n;if("boolean"==typeof e[r]){var o=e[r];t[r]="true"===o.toString()?"true":"false"}return t}),{});return r(r({},t),n)},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.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 n,r,o=this,i=e?{"h:extended":null!==(n=null==e?void 0:e.extended)&&void 0!==n&&n,"h:with_dns":null===(r=null==e?void 0:e.with_dns)||void 0===r||r}:{};return this.request.get("/v4/domains/".concat(t),i).then((function(t){return o._parseDomain(t)}))},t.prototype.create=function(t){var e=this,n=this._handleBoolValues(t);return this.request.postWithFD("/v4/domains",n).then((function(t){return e._parseDomain(t)}))},t.prototype.update=function(t,e){var n=this,r=this._handleBoolValues(e);return this.request.putWithFD("/v4/domains/".concat(t),r).then((function(t){return n._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.logger.warn("\n 'domains.getTracking' method is deprecated, and will be removed. Please use 'domains.domainTracking.getTracking' instead.\n "),this.domainTracking.getTracking(t)},t.prototype.updateTracking=function(t,e,n){return this.logger.warn("\n 'domains.updateTracking' method is deprecated, and will be removed. Please use 'domains.domainTracking.updateTracking' instead.\n "),this.domainTracking.updateTracking(t,e,n)},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 n="";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?n="?pool_id=".concat(e.pool_id):e.ip&&(n="?ip=".concat(e.ip)),this.request.delete((0,a.default)("/v3/domains",t,"ips","ip_pool",n))},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 n;return o(this,void 0,void 0,(function(){var r;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:(r=o.sent()).status,message:null===(n=null==r?void 0:r.body)||void 0===n?void 0:n.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,n){"use strict";var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=r(n(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 n=this;return this.request.get((0,o.default)(this.baseRoute,t,"/credentials"),e).then((function(t){return n._parseDomainCredentialsList(t)}))},t.prototype.create=function(t,e){var n=this;return this.request.postWithFD("".concat(this.baseRoute).concat(t,"/credentials"),e).then((function(t){return n._parseMessageResponse(t)}))},t.prototype.update=function(t,e,n){var r=this;return this.request.putWithFD("".concat(this.baseRoute).concat(t,"/credentials/").concat(e),n).then((function(t){return r._parseMessageResponse(t)}))},t.prototype.destroy=function(t,e){var n=this;return this.request.delete("".concat(this.baseRoute).concat(t,"/credentials/").concat(e)).then((function(t){return n._parseDeletedResponse(t)}))},t}();e.default=i},1654:function(t,e,n){"use strict";var r,o=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},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)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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(n(5469)),l=u(n(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 n=t.call(this,e)||this;return n.request=e,n.baseRoute="/v3/",n}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(n){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,n){return this.request.put((0,c.default)(this.baseRoute,t,"/tags",e),n).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,n){var r=this;return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats"),n).then((function(t){return r._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,n){"use strict";var r,o=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},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)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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(n(5469)),l=u(n(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 n=t.call(this,e)||this;return n.request=e,n.baseRoute="/v3/",n}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(n){return[2,this.requestListWithPages((0,c.default)(this.baseRoute,t,"/templates"),e)]}))}))},e.prototype.get=function(t,e,n){return this.request.get((0,c.default)(this.baseRoute,t,"/templates/",e),n).then((function(t){return new f(t.body.template)}))},e.prototype.create=function(t,e){var n=this;return this.request.postWithFD((0,c.default)(this.baseRoute,t,"/templates"),e).then((function(t){return n.parseCreationResponse(t)}))},e.prototype.update=function(t,e,n){var r=this;return this.request.putWithFD((0,c.default)(this.baseRoute,t,"/templates/",e),n).then((function(t){return r.parseMutationResponse(t)}))},e.prototype.destroy=function(t,e){var n=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates/",e)).then((function(t){return n.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,n){var r=this;return this.request.get((0,c.default)(this.baseRoute,t,"/templates",e,"/versions"),n).then((function(t){return r.parseListTemplateVersions(t)}))},e.prototype.getVersion=function(t,e,n){return this.request.get((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",n)).then((function(t){return new f(t.body.template)}))},e.prototype.createVersion=function(t,e,n){var r=this;return this.request.postWithFD((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions"),n).then((function(t){return r.parseCreationVersionResponse(t)}))},e.prototype.updateVersion=function(t,e,n,r){var o=this;return this.request.putWithFD((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",n),r).then((function(t){return o.parseMutateTemplateVersionResponse(t)}))},e.prototype.destroyVersion=function(t,e,n){var r=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",n)).then((function(t){return r.parseMutateTemplateVersionResponse(t)}))},e}(l.default);e.default=p},5698:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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(n(5469)),u=function(){function t(t){this.request=t}return 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.get=function(t){return o(this,void 0,void 0,(function(){var e;return i(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v2/x509/".concat(t,"/status"))];case 1:return e=n.sent(),[2,r(r({},e.body),{responseStatusCode:e.status})]}}))}))},t.prototype.generate=function(t){return o(this,void 0,void 0,(function(){var e;return i(this,(function(n){switch(n.label){case 0:return[4,this.request.post("/v2/x509/".concat(t))];case 1:return e=n.sent(),[2,r(r({},e.body),{status:e.status})]}}))}))},t.prototype.regenerate=function(t){return o(this,void 0,void 0,(function(){var e;return i(this,(function(n){switch(n.label){case 0:return[4,this.request.put("/v2/x509/".concat(t))];case 1:return e=n.sent(),[2,r(r({},e.body),{status:e.status})]}}))}))},t.prototype.getTracking=function(t){return o(this,void 0,void 0,(function(){var e;return i(this,(function(n){switch(n.label){case 0:return[4,this.request.get((0,a.default)("/v3/domains",t,"tracking"))];case 1:return e=n.sent(),[2,this._parseTrackingSettings(e)]}}))}))},t.prototype.updateTracking=function(t,e,n){return o(this,void 0,void 0,(function(){var o,s;return i(this,(function(i){switch(i.label){case 0:return o=r({},n),"boolean"==typeof(null==n?void 0:n.active)&&(o.active=(null==n?void 0:n.active)?"yes":"no"),this._isOpenTrackingInfoWitPlace(n)&&"boolean"==typeof(null==n?void 0:n.place_at_the_top)&&(o.place_at_the_top=(null==n?void 0:n.place_at_the_top)?"yes":"no"),[4,this.request.putWithFD((0,a.default)("/v3/domains",t,"tracking",e),o)];case 1:return s=i.sent(),[2,this._parseTrackingUpdate(s)]}}))}))},t}();e.default=u},4235:function(t,e,n){"use strict";var r,o=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},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)}),i=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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(n(5469)),c=function(t){function e(e){var n=t.call(this,e)||this;return n.request=e,n}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(n){return[2,this.requestListWithPages((0,u.default)("/v3",t,"events"),e)]}))}))},e}(a(n(4117)).default);e.default=c},9884:function(t,e){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},r=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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 r(this,void 0,void 0,(function(){var e;return o(this,(function(r){switch(r.label){case 0:return[4,this.request.postWithFD("/v1/ip_pools",t)];case 1:return e=r.sent(),[2,n({status:e.status},e.body)]}}))}))},t.prototype.update=function(t,e){return r(this,void 0,void 0,(function(){var r;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.patchWithFD("/v1/ip_pools/".concat(t),e)];case 1:return r=o.sent(),[2,n({status:r.status},r.body)]}}))}))},t.prototype.delete=function(t,e){return r(this,void 0,void 0,(function(){var r;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.delete("/v1/ip_pools/".concat(t),e)];case 1:return r=o.sent(),[2,n({status:r.status},r.body)]}}))}))},t.prototype.parseIpPoolsResponse=function(t){return n({status:t.status},t.body)},t}();e.default=i},2542:function(t,e){"use strict";var n=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},r=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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 n(this,void 0,void 0,(function(){var e;return r(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v3/ips",t)];case 1:return e=n.sent(),[2,this.parseIpsResponse(e)]}}))}))},t.prototype.get=function(t){return n(this,void 0,void 0,(function(){var e;return r(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v3/ips/".concat(t))];case 1:return e=n.sent(),[2,this.parseIpsResponse(e)]}}))}))},t.prototype.parseIpsResponse=function(t){return t.body},t}();e.default=o},7145:function(t,e){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},r=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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 r(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 r(this,void 0,void 0,(function(){var e;return o(this,(function(r){switch(r.label){case 0:return[4,this.request.get("".concat(this.path,"/").concat(t))];case 1:return e=r.sent(),[2,n(n({},e.body),{status:e.status})]}}))}))},t}();e.default=i},7439:function(t,e){"use strict";var n=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},r=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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 n(this,void 0,void 0,(function(){var t;return r(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,n){"use strict";var r,o=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},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)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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,n,r,o,i){void 0===i&&(i=console);var s=t.call(this,e)||this;return s.request=e,s.attributes=n,s.filters=r,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,n=t,r=Object.keys(n).reduce((function(r,o){var i=o;if(n[i]&&"object"==typeof n[i]){var s=t[i];r[i]=e.convertDateToUTC(i,s)}return r}),{});return i(i({},t),r)},e.prototype.prepareInboxPlacementsResult=function(t){var e={},n={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 r=i(i(i(i({},t),{Box:e}),n),{id:t.Id});return delete r.ID,r},e.prototype.parseList=function(t){var e=this,n={};return n.items=t.body.items.map((function(t){return e.prepareInboxPlacementsResult(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,n;return a(this,(function(r){switch(r.label){case 0:return e=this.prepareQueryData(t),[4,this.request.get("/v4/inbox/results",e)];case 1:return n=r.sent(),[2,this.parseList(n)]}}))}))},e.prototype.get=function(t){return s(this,void 0,void 0,(function(){var e,n;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v4/inbox/results/".concat(t))];case 1:return e=r.sent(),n=this.prepareInboxPlacementsResult(e.body.result),[2,{status:e.status,inboxPlacementResult:n}]}}))}))},e.prototype.destroy=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.delete("/v4/inbox/results/".concat(t))];case 1:return e=n.sent(),[2,i({status:e.status},e.body)]}}))}))},e.prototype.getResultByShareId=function(t){return s(this,void 0,void 0,(function(){var e,n;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v4/inbox/sharing/public/".concat(t))];case 1:return e=r.sent(),n=this.prepareInboxPlacementsResult(e.body.result),[2,{status:e.status,inboxPlacementResult:n}]}}))}))},e}(u(n(4117)).default);e.default=c},4615:function(t,e){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},r=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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 n(n({},t),e)},t.prototype.get=function(t){return r(this,void 0,void 0,(function(){var e,r;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(),r=this.prepareInboxPlacementsResultSharing(e.body.sharing),[2,n({status:e.status},r)]}}))}))},t.prototype.update=function(t,e){return r(this,void 0,void 0,(function(){var r,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 r=o.sent(),i=this.prepareInboxPlacementsResultSharing(r.body.sharing),[2,n(n({},i),{status:r.status})]}}))}))},t}();e.default=i},9915:function(t,e,n){"use strict";var r,o=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},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)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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,n,r,o){void 0===o&&(o=console);var i=t.call(this,e)||this;return i.request=e,i.attributes=n,i.filters=r,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,n=t,r=Object.keys(n).reduce((function(r,o){var i=o;if(n[i]&&"object"==typeof n[i]){var s=t[i];r[i]=e.convertDateToUTC(i,s)}return r}),{});return i(i({},t),r)},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,n={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 r=i(i(i({},t),{Seeds:e}),n);return delete r.Id,r},e.prototype.parseList=function(t){var e,n=this,r={items:[]};return r.items=null===(e=t.body.items)||void 0===e?void 0:e.map((function(t){return n.prepareSeedList(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,n;return a(this,(function(r){switch(r.label){case 0:return e=this.prepareQueryData(t),[4,this.request.get("/v4/inbox/seedlists",e)];case 1:return n=r.sent(),[2,i(i({},this.parseList(n)),{status:200})]}}))}))},e.prototype.get=function(t){return s(this,void 0,void 0,(function(){var e,n;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v4/inbox/seedlists/".concat(t))];case 1:return e=r.sent(),n=this.prepareSeedList(e.body.seedlist),[2,i(i({},n),{status:e.status})]}}))}))},e.prototype.create=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.postWithFD("/v4/inbox/seedlists",t)];case 1:return e=n.sent(),[2,this.prepareResult(e)]}}))}))},e.prototype.update=function(t,e){return s(this,void 0,void 0,(function(){var n;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.put("/v4/inbox/seedlists/".concat(t),e)];case 1:return n=r.sent(),[2,this.prepareResult(n)]}}))}))},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(n(4117)).default);e.default=c},419:function(t,e){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},r=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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,n,r){this.request=t,this.seedsLists=e,this.seedsLists=e,this.results=n,this.providers=r}return t.prototype.runTest=function(t){return r(this,void 0,void 0,(function(){var e;return o(this,(function(r){switch(r.label){case 0:return[4,this.request.post("/v4/inbox/tests",t)];case 1:return e=r.sent(),[2,n(n({},e.body),{status:e.status})]}}))}))},t}();e.default=i},4022:function(t,e){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},r=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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 n(n({},t),e)})),e.status=t.status,e},t.prototype.list=function(){return r(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,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.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(n(6685)),s=o(n(5612)),a=o(n(4235)),u=o(n(2344)),c=o(n(3218)),l=o(n(6368)),f=o(n(5510)),p=o(n(2052)),d=o(n(1045)),h=o(n(2542)),y=o(n(9884)),b=o(n(4285)),v=o(n(2185)),_=o(n(7585)),g=o(n(1948)),m=o(n(536)),w=o(n(1654)),O=o(n(5902)),j=o(n(9915)),P=o(n(419)),x=o(n(7773)),S=o(n(7145)),D=o(n(7439)),T=o(n(4615)),M=o(n(4022)),k=o(n(4428)),R=o(n(5698)),E=function(){function t(t,e){var n=r({},t);if(n.url||(n.url="https://api.mailgun.net"),!n.username)throw new Error('Parameter "username" is required');if(!n.key)throw new Error('Parameter "key" is required');this.request=new i.default(n,e);var o=new v.default(this.request),E=new _.default(this.request),q=new m.default(this.request),A=new w.default(this.request),C=new R.default(this.request),B=new g.default(this.request),F=new T.default(this.request),L=new S.default(this.request,"/v4/inbox/seedlists/a"),U=new S.default(this.request,"/v4/inbox/results/a"),N=new D.default(this.request,"/v4/inbox/seedlists/_filters"),I=new D.default(this.request,"/v4/inbox/results/_filters"),W=new j.default(this.request,L,N),H=new x.default(this.request,U,I,F),V=new M.default(this.request);this.domains=new s.default(this.request,E,q,A,C),this.webhooks=new l.default(this.request),this.events=new a.default(this.request),this.stats=new u.default(this.request),this.metrics=new k.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,B),this.subaccounts=new O.default(this.request),this.inboxPlacements=new P.default(this.request,W,H,V)}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,n){"use strict";var r,o=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},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)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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 n=t.call(this,e)||this;return n.request=e,n.baseRoute="/v3/lists",n}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(n){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 n=this.checkAndUpdateData(e);return this.request.postWithFD("".concat(this.baseRoute,"/").concat(t,"/members"),n).then((function(t){return t.body.member}))},e.prototype.createMembers=function(t,e){var n={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"),n).then((function(t){return t.body}))},e.prototype.updateMember=function(t,e,n){var r=this.checkAndUpdateData(n);return this.request.putWithFD("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e),r).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(n(4117)).default);e.default=c},4285:function(t,e,n){"use strict";var r,o=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},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)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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,n){var r=t.call(this,e)||this;return r.request=e,r.baseRoute="/v3/lists",r.members=n,r}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(n(4117)).default);e.default=c},5510:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.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(n(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(n,r){return e.has(r)&&"boolean"==typeof t[r]?n[r]=t[r]?"yes":"no":n[r]=t[r],n}),{})},t.prototype._parseResponse=function(t){return r({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 n=this.prepareBooleanValues(e);return this.request.postWithFD("/v3/".concat(t,"/messages"),n).then(this._parseResponse)},t}();e.default=s},4428:function(t,e){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},r=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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,r;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:"",r=i&&i instanceof Date?this.convertDateToUTC("end",i):null!=i?i:""}return n(n({},t),{start:e,end:r})},t.prototype.handleResponse=function(t){var e=t.body,r=Date.parse(e.start)?new Date(e.start):null,o=Date.parse(e.end)?new Date(e.end):null;return n(n({},e),{status:t.status,start:r,end:o})},t.prototype.getAccount=function(t){return r(this,void 0,void 0,(function(){var e,n;return o(this,(function(r){switch(r.label){case 0:return e=this.prepareQuery(t),[4,this.request.post("/v1/analytics/metrics",e)];case 1:return n=r.sent(),[2,this.handleResponse(n)]}}))}))},t.prototype.getAccountUsage=function(t){return r(this,void 0,void 0,(function(){var e,n;return o(this,(function(r){switch(r.label){case 0:return e=this.prepareQuery(t),[4,this.request.post("/v1/analytics/usage/metrics",e)];case 1:return n=r.sent(),[2,this.handleResponse(n)]}}))}))},t}();e.default=i},2052:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=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=n},2344:function(t,e,n){"use strict";var r=this&&this.__spreadArray||function(t,e,n){if(n||2===arguments.length)for(var r,o=0,i=e.length;o<i;o++)!r&&o in e||(r||(r=Array.prototype.slice.call(e,0,o)),r[o]=e[o]);return t.concat(r||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(n(5469)),s=o(n(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,n=[];return"object"==typeof t&&Object.keys(t).length&&(n=Object.entries(t).reduce((function(t,n){var o=n[0],i=n[1];if(Array.isArray(i)&&i.length){var s=i.map((function(t){return[o,t]}));return r(r([],t,!0),s,!0)}return i instanceof Date?(t.push(e.convertDateToUTC(o,i)),t):("string"==typeof i&&t.push([o,i]),t)}),[])),n},t.prototype.parseStats=function(t){return new s.default(t.body)},t.prototype.getDomain=function(t,e){var n=this.prepareSearchParams(e);return this.request.get((0,i.default)("/v3",t,"stats/total"),n).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 n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0});var r=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=n({},t);return e.time=new Date(t.time),e}))};e.default=r},5902:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=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=n},7897:function(t,e,n){"use strict";var r,o=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},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)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=n(9146),a=function(t){function e(e){var n=t.call(this,s.SuppressionModels.BOUNCES)||this;return n.address=e.address,n.code=+e.code,n.error=e.error,n.created_at=new Date(e.created_at),n}return o(e,t),e}(i(n(2398)).default);e.default=a},952:function(t,e,n){"use strict";var r,o=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},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)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=n(9146),a=function(t){function e(e){var n=t.call(this,s.SuppressionModels.COMPLAINTS)||this;return n.address=e.address,n.created_at=new Date(e.created_at),n}return o(e,t),e}(i(n(2398)).default);e.default=a},2398:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(t){this.type=t};e.default=n},3218:function(t,e,n){"use strict";var r,o=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},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)}),i=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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,n){if(n||2===arguments.length)for(var r,o=0,i=e.length;o<i;o++)!r&&o in e||(r||(r=Array.prototype.slice.call(e,0,o)),r[o]=e[o]);return t.concat(r||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(n(5469)),l=u(n(9538)),f=u(n(4117)),p=u(n(7897)),d=u(n(952)),h=u(n(740)),y=u(n(9520)),b={headers:{"Content-Type":"application/json"}},v=function(t){function e(e){var n=t.call(this,e)||this;return n.request=e,n.models={bounces:p.default,complaints:d.default,unsubscribes:h.default,whitelists:y.default},n}return o(e,t),e.prototype.parseList=function(t,e){var n,r={};return r.items=(null===(n=t.body.items)||void 0===n?void 0:n.map((function(t){return new e(t)})))||[],r.pages=this.parsePageLinks(t,"?","address"),r.status=t.status,r},e.prototype._parseItem=function(t,e){return new e(t)},e.prototype.createWhiteList=function(t,e,n){if(n)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,n){return i(this,void 0,void 0,(function(){var r;return s(this,(function(o){return r=this.getModel(e),[2,this.requestListWithPages((0,c.default)("v3",t,e),n,r)]}))}))},e.prototype.get=function(t,e,n){var r=this,o=this.getModel(e);return this.request.get((0,c.default)("v3",t,e,encodeURIComponent(n))).then((function(t){return r._parseItem(t.body,o)}))},e.prototype.create=function(t,e,n){var r;this.getModel(e);var o=Array.isArray(n);return"whitelists"===e?this.createWhiteList(t,n,o):"unsubscribes"===e?this.createUnsubscribe(t,n):(r=o?a([],n,!0):[n],this.request.post((0,c.default)("v3",t,e),JSON.stringify(r),b).then(this.prepareResponse))},e.prototype.destroy=function(t,e,n){return this.getModel(e),this.request.delete((0,c.default)("v3",t,e,encodeURIComponent(n))).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,n){"use strict";var r,o=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},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)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=n(9146),a=function(t){function e(e){var n=t.call(this,s.SuppressionModels.UNSUBSCRIBES)||this;return n.address=e.address,n.tags=e.tags,n.created_at=new Date(e.created_at),n}return o(e,t),e}(i(n(2398)).default);e.default=a},9520:function(t,e,n){"use strict";var r,o=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},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)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=n(9146),a=function(t){function e(e){var n=t.call(this,s.SuppressionModels.WHITELISTS)||this;return n.value=e.value,n.reason=e.reason,n.createdAt=new Date(e.createdAt),n}return o(e,t),e}(i(n(2398)).default);e.default=a},1948:function(t,e,n){"use strict";var r,o=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},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)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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(n(4117)),l=u(n(8968)),f=u(n(9538)),p=function(t,e){var n,r;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===(n=t.download_url)||void 0===n?void 0:n.csv,json:null===(r=t.download_url)||void 0===r?void 0:r.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 n=t.call(this)||this;return n.request=e,n.attachmentsHandler=new l.default,n}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(n){switch(n.label){case 0:return[4,this.request.get("/v4/address/validate/bulk/".concat(t))];case 1:return e=n.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 n,r;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 n=this.convertToExpectedShape(e),[4,this.request.postWithFD("/v4/address/validate/bulk/".concat(t),n)];case 1:return r=o.sent(),[2,this.handleResponse(r)]}}))}))},e.prototype.destroy=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.delete("/v4/address/validate/bulk/".concat(t))];case 1:return e=n.sent(),[2,this.handleResponse(e)]}}))}))},e}(c.default);e.default=d},1045:function(t,e){"use strict";var n=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},r=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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 n(this,void 0,void 0,(function(){var e;return r(this,(function(n){switch(n.label){case 0:return e={address:t},[4,this.request.get("/v4/address/validate",e)];case 1:return[2,n.sent().body]}}))}))},t}();e.default=o},6368:function(t,e,n){"use strict";var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.Webhook=void 0;var o=r(n(5469)),i=function(t,e,n){this.id=t,this.url=e,this.urls=n};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 n,r=null===(n=null==e?void 0:e.body)||void 0===n?void 0:n.webhook,o=null==r?void 0:r.url,s=null==r?void 0:r.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,n,r){return void 0===r&&(r=!1),r?this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e,"test"),{url:n}).then(this._parseWebhookTest):this.request.postWithFD((0,o.default)("/v3/domains",t,"webhooks"),{id:e,url:n}).then(this._parseWebhookWithID(e))},t.prototype.update=function(t,e,n){return this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e),{url:n}).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,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.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(n(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,n=t.contentType,o=t.knownLength;return r(r(r({},e?{filename:e}:{filename:"file"}),n&&{contentType:n}),o&&{knownLength:o})},t.prototype.getFileInfo=function(t){var e=t.name,n=t.type,r=t.size;return this.getAttachmentOptions({filename:e,contentType:n,knownLength:r})},t.prototype.getCustomFileInfo=function(t){var e=t.filename,n=t.contentType,r=t.knownLength;return this.getAttachmentOptions({filename:e,contentType:n,knownLength:r})},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),n=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(n)return this.getCustomFileInfo(t)}return{filename:"file",contentType:void 0,knownLength:void 0}},t.prototype.convertToFDexpectedShape=function(t){var e,n=this.isStream(t),r=this.isBrowserFile(t),o=this.isCustomFile(t);if(n||"string"==typeof t||r||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 n,r=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},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)});Object.defineProperty(e,"__esModule",{value:!0});var o=function(t){function e(e){var n=e.status,r=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=n,a.message=o||c||r||"",a.details=u,a.type="MailgunAPIError",a}return r(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,n){"use strict";var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=r(n(9538)),i=r(n(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(n,r){if(e.fileKeys.includes(r)){var i=t[r];if(e.isMessageAttachment(i))return e.addFilesToFD(r,i,n),n;throw o.default.getUserDataError("Unknown value ".concat(t[r]," with type ").concat(typeof t[r],' for property "').concat(r,'"'),'The key "'.concat(r,'" should have type of Buffer, Stream, File, or String '))}if("message"===r){var s=t[r];if(!s||!e.isMIME(s))throw o.default.getUserDataError('Unknown data type for "'.concat(r,'" property'),"The mime data should have type of Buffer, String or Blob");return e.addMimeDataToFD(r,s,n),n}return e.addCommonPropertyToFD(r,t[r],n),n}),new this.FormDataConstructor)},t.prototype.addMimeDataToFD=function(t,e,n){if("string"!=typeof e){if(this.isFormDataPackage(n))n.append(t,e,{filename:"MimeMessage"});else if(void 0!==typeof Blob){var r=n;if(e instanceof Blob)return void r.append(t,e,"MimeMessage");if(this.attachmentsHandler.isBuffer(e)){var o=new Blob([e]);r.append(t,o,"MimeMessage")}}}else n.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(n){return e.attachmentsHandler.isCustomFile(n)||"undefined"!=typeof File&&n instanceof File||"undefined"!=typeof Blob&&t instanceof Blob||e.attachmentsHandler.isBuffer(n)||e.attachmentsHandler.isStream(n)}))},t.prototype.addFilesToFD=function(t,e,n){var r=this,o=function(t,e,o){var i="multipleValidationFile"===t?"file":t,s=r.attachmentsHandler.convertToFDexpectedShape(e),a=r.attachmentsHandler.getAttachmentInfo(e);if(r.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=n;if("string"==typeof s||r.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(r.attachmentsHandler.isStream(s)){var p=r.attachmentsHandler.getBlobFromStream(s,a.knownLength);l.set(i,p,a.filename)}}};Array.isArray(e)?e.forEach((function(e){o(t,e,n)})):o(t,e,n)},t.prototype.addCommonPropertyToFD=function(t,e,n){var r=this,i=function(t,e){if(r.isFormDataPackage(n))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'),n.append(t,JSON.stringify(e))):n.append(t,e);if("string"==typeof e)return n.append(t,e);if(void 0!==typeof Blob&&e instanceof Blob)return n.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,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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(n(5469)),u=s(n(9538)),c=function(){function t(t){t&&(this.request=t)}return t.prototype.parsePage=function(t,e,n,r){var o=new URL(e).searchParams,i=e&&"string"==typeof e&&e.split(n).pop()||"",s=null;return r&&(s=o.has(r)?o.get(r):void 0),{id:t,page:"?"===n?"?".concat(i):i,iteratorPosition:s,url:e}},t.prototype.parsePageLinks=function(t,e,n){var r=this;return Object.entries(t.body.paging).reduce((function(t,o){var i=o[0],s=o[1];return t[i]=r.parsePage(i,s,e,n),t}),{})},t.prototype.updateUrlAndQuery=function(t,e){var n=t,o=r({},e);return o.page&&(n=(0,a.default)(t,o.page),delete o.page),{url:n,updatedQuery:o}},t.prototype.requestListWithPages=function(t,e,n){return o(this,void 0,void 0,(function(){var r,o,s,a;return i(this,(function(i){switch(i.label){case 0:return r=this.updateUrlAndQuery(t,e),o=r.url,s=r.updatedQuery,this.request?[4,this.request.get(o,s)]:[3,2];case 1:return a=i.sent(),[2,this.parseList(a,n)];case 2:throw new u.default({status:500,statusText:"Request property is empty",body:{message:""}})}}))}))},t}();e.default=c},6685:function(t,e,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),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 n in t)"default"!==n&&Object.prototype.hasOwnProperty.call(t,n)&&o(e,t,n);return i(e,t),e},a=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,a)}u((r=r.apply(t,e||[])).next())}))},u=this&&this.__generator||function(t,e){var n,r,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(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=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++,r=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],r=0}finally{n=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(n(5914)),f=c(n(5469)),p=s(n(6425)),d=c(n(9538)),h=c(n(917)),y=c(n(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,n){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=r({},n))||delete a.headers,c=this.joinAndTransformHeaders(n),l=r({},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(r(r({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(n){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,n=l.encode("".concat(this.username,":").concat(this.key));e.setAuthorization("Basic ".concat(n)),e.set(this.headers);var r=t&&t.headers,o=this.makeHeadersFromObject(r);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 n=e[0],r=e[1];return t.set(n,r),t}),e)},t.prototype.setSubaccountHeader=function(t){var e,n=this.makeHeadersFromObject(r(r({},this.headers),((e={})[y.default.SUBACCOUNT_HEADER]=t,e)));this.headers.set(n)},t.prototype.resetSubaccountHeader=function(){this.headers.delete(y.default.SUBACCOUNT_HEADER)},t.prototype.query=function(t,e,n,o){return this.request(t,e,r({query:n},o))},t.prototype.command=function(t,e,n,o,i){void 0===i&&(i=!0);var s={};i&&(s={"Content-Type":"application/x-www-form-urlencoded"});var a=r(r(r({},s),{body:n}),o);return this.request(t,e,a)},t.prototype.get=function(t,e,n){return this.query("get",t,e,n)},t.prototype.post=function(t,e,n){return this.command("post",t,e,n)},t.prototype.postWithFD=function(t,e){var n=this.formDataBuilder.createFormData(e);return this.command("post",t,n,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.putWithFD=function(t,e){var n=this.formDataBuilder.createFormData(e);return this.command("put",t,n,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.patchWithFD=function(t,e){var n=this.formDataBuilder.createFormData(e);return this.command("patch",t,n,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.put=function(t,e,n){return this.command("put",t,e,n)},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,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(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})},7821:(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,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(7992),e),o(n(5969),e),o(n(4425),e),o(n(424),e),o(n(7821),e)},4404:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1628:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(4404),e)},1593:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9783:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(1593),e)},4737:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},473:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(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,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(8236),e),o(n(8373),e),o(n(6907),e),o(n(4223),e),o(n(142),e),o(n(1824),e)},4130:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5883:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(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,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(4903),e),o(n(2078),e)},777:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7497:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(777),e)},1557:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7951:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(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,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(148),e),o(n(4804),e)},4233:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4913:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(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,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(1381),e),o(n(5428),e),o(n(8920),e),o(n(2556),e),o(n(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,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(1728),e),o(n(6708),e)},5681:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8987:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(5681),e)},8608:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(7684),e),o(n(3078),e),o(n(5883),e),o(n(1147),e),o(n(8864),e),o(n(8297),e),o(n(1163),e),o(n(1628),e),o(n(8987),e),o(n(7497),e),o(n(7951),e),o(n(473),e),o(n(9783),e),o(n(4913),e),o(n(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,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(3545),e),o(n(5364),e),o(n(9825),e),o(n(6858),e),o(n(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,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(8625),e),o(n(7110),e),o(n(3286),e),o(n(1240),e),o(n(6930),e)},7850:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2691:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(7850),e)},8610:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9402:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(8610),e)},2014:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7364:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(2014),e)},4470:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8066:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(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,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(1766),e),o(n(2284),e)},8980:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7290:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(8980),e)},2992:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},6608:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(2992),e)},906:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5085:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(906),e)},1930:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8832:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(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,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(7676),e),o(n(8715),e),o(n(4704),e),o(n(8855),e),o(n(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,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(4115),e),o(n(4887),e)},584:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8444:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(584),e)},9025:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)};Object.defineProperty(e,"__esModule",{value:!0}),o(n(4267),e),o(n(3919),e),o(n(2691),e),o(n(9402),e),o(n(7364),e),o(n(8066),e),o(n(7296),e),o(n(7290),e),o(n(6608),e),o(n(5085),e),o(n(8832),e),o(n(8458),e),o(n(9974),e),o(n(8444),e)},9711:function(t,e,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),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 n in t)"default"!==n&&Object.prototype.hasOwnProperty.call(t,n)&&r(e,t,n);return o(e,t),e},s=this&&this.__exportStar||function(t,e){for(var n in t)"default"===n||Object.prototype.hasOwnProperty.call(e,n)||r(e,t,n)},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(n(5488));e.Enums=i(n(9146)),s(n(9025),e),e.Interfaces=i(n(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,n){var r;t=n.nmd(t),function(){var o=e,i=(t&&t.exports,"object"==typeof n.g&&n.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,n,r,o,i=t.length%3,s="",c=-1,l=t.length-i;++c<l;)e=t.charCodeAt(c)<<16,n=t.charCodeAt(++c)<<8,r=t.charCodeAt(++c),s+=u.charAt((o=e+n+r)>>18&63)+u.charAt(o>>12&63)+u.charAt(o>>6&63)+u.charAt(63&o);return 2==i?(e=t.charCodeAt(c)<<8,n=t.charCodeAt(++c),s+=u.charAt((o=e+n)>>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 n,r,o=0,i="",s=-1;++s<e;)r=u.indexOf(t.charAt(s)),n=o%4?64*n+r:r,o++%4&&(i+=String.fromCharCode(255&n>>(-2*o&6)));return i},version:"1.0.0"};void 0===(r=function(){return l}.call(e,n,e,t))||(t.exports=r)}()},5469:function(t,e,n){var r,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 n=t.shift();t[0]=n+t[0]}t[0].match(/^file:\/\/\//)?t[0]=t[0].replace(/^([^/:]+):\/*/,"$1:///"):t[0]=t[0].replace(/^([^/:]+):\/*/,"$1://");for(var r=0;r<t.length;r++){var o=t[r];if("string"!=typeof o)throw new TypeError("Url must be a string. Received "+o);""!==o&&(r>0&&(o=o.replace(/^[\/]+/,"")),o=r<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(r=i)?r.call(e,n,e,t):r)||(t.exports=o)},6425:(t,e,n)=>{"use strict";function r(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:n=!1}={}){if(null==t)return;let r,o;if("object"!=typeof t&&(t=[t]),l(t))for(r=0,o=t.length;r<o;r++)e.call(null,t[r],r,t);else{const o=n?Object.getOwnPropertyNames(t):Object.keys(t),i=o.length;let s;for(r=0;r<i;r++)s=o[r],e.call(null,t[s],s,t)}}function T(t,e){e=e.toLowerCase();const n=Object.keys(t);let r,o=n.length;for(;o-- >0;)if(r=n[o],e===r.toLowerCase())return r;return null}const M="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:n.g,k=t=>!f(t)&&t!==M;const R=(E="undefined"!=typeof Uint8Array&&i(Uint8Array),t=>E&&t instanceof E);var E;const q=u("HTMLFormElement"),A=(({hasOwnProperty:t})=>(e,n)=>t.call(e,n))(Object.prototype),C=u("RegExp"),B=(t,e)=>{const n=Object.getOwnPropertyDescriptors(t),r={};D(n,((n,o)=>{let i;!1!==(i=e(n,o,t))&&(r[o]=i||n)})),Object.defineProperties(t,r)},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(M.postMessage),W?setImmediate:H?(V=`axios@${Math.random()}`,z=[],M.addEventListener("message",(({source:t,data:e})=>{t===M&&e===V&&z.length&&z.shift()()}),!1),t=>{z.push(t),M.postMessage(V,"*")}):t=>setTimeout(t));var W,H,V,z;const G="undefined"!=typeof queueMicrotask?queueMicrotask.bind(M):"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:R,isFileList:w,forEach:D,merge:function t(){const{caseless:e}=k(this)&&this||{},n={},r=(r,o)=>{const i=e&&T(n,o)||o;v(n[i])&&v(r)?n[i]=t(n[i],r):v(r)?n[i]=t({},r):l(r)?n[i]=r.slice():n[i]=r};for(let t=0,e=arguments.length;t<e;t++)arguments[t]&&D(arguments[t],r);return n},extend:(t,e,n,{allOwnKeys:o}={})=>(D(e,((e,o)=>{n&&h(e)?t[o]=r(e,n):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,n,r)=>{t.prototype=Object.create(e.prototype,r),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),n&&Object.assign(t.prototype,n)},toFlatObject:(t,e,n,r)=>{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],r&&!r(a,t,e)||u[a]||(e[a]=t[a],u[a]=!0);t=!1!==n&&i(t)}while(t&&(!n||n(t,e))&&t!==Object.prototype);return e},kindOf:s,kindOfTest:u,endsWith:(t,e,n)=>{t=String(t),(void 0===n||n>t.length)&&(n=t.length),n-=e.length;const r=t.indexOf(e,n);return-1!==r&&r===n},toArray:t=>{if(!t)return null;if(l(t))return t;let e=t.length;if(!y(e))return null;const n=new Array(e);for(;e-- >0;)n[e]=t[e];return n},forEachEntry:(t,e)=>{const n=(t&&t[Symbol.iterator]).call(t);let r;for(;(r=n.next())&&!r.done;){const n=r.value;e.call(t,n[0],n[1])}},matchAll:(t,e)=>{let n;const r=[];for(;null!==(n=t.exec(e));)r.push(n);return r},isHTMLForm:q,hasOwnProperty:A,hasOwnProp:A,reduceDescriptors:B,freezeMethods:t=>{B(t,((e,n)=>{if(h(t)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=t[n];h(r)&&(e.enumerable=!1,"writable"in e?e.writable=!1:e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(t,e)=>{const n={},r=t=>{t.forEach((t=>{n[t]=!0}))};return l(t)?r(t):r(String(t).split(e)),n},toCamelCase:t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(t,e,n){return e.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(t,e)=>null!=t&&Number.isFinite(t=+t)?t:e,findKey:T,global:M,isContextDefined:k,ALPHABET:U,generateString:(t=16,e=U.ALPHA_DIGIT)=>{let n="";const{length:r}=e;for(;t--;)n+=e[Math.random()*r|0];return n},isSpecCompliantForm:function(t){return!!(t&&h(t.append)&&"FormData"===t[Symbol.toStringTag]&&t[Symbol.iterator])},toJSONObject:t=>{const e=new Array(10),n=(t,r)=>{if(b(t)){if(e.indexOf(t)>=0)return;if(!("toJSON"in t)){e[r]=t;const o=l(t)?[]:{};return D(t,((t,e)=>{const i=n(t,r+1);!f(i)&&(o[e]=i)})),e[r]=void 0,o}}return t};return n(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,n,r,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),n&&(this.config=n),r&&(this.request=r),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,n,r,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,n,r,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,n){return t?t.concat(e).map((function(t,e){return t=Y(t),!n&&e?"["+t+"]":t})).join(n?".":""):e}const tt=J.toFlatObject(J,{},null,(function(t){return/^is[A-Z]/.test(t)}));function et(t,e,n){if(!J.isObject(t))throw new TypeError("target must be an object");e=e||new FormData;const r=(n=J.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(t,e){return!J.isUndefined(e[t])}))).metaTokens,o=n.visitor||c,i=n.dots,s=n.indexes,a=(n.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,n,o){let a=t;if(t&&!o&&"object"==typeof t)if(J.endsWith(n,"{}"))n=r?n:n.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(n,"[]"))&&(a=J.toArray(t)))return n=Y(n),a.forEach((function(t,r){!J.isUndefined(t)&&null!==t&&e.append(!0===s?Z([n],r,i):null===s?n:n+"[]",u(t))})),!1;return!!X(t)||(e.append(Z(o,n,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(n,r){if(!J.isUndefined(n)){if(-1!==l.indexOf(n))throw Error("Circular reference detected in "+r.join("."));l.push(n),J.forEach(n,(function(n,i){!0===(!(J.isUndefined(n)||null===n)&&o.call(e,n,J.isString(i)?i.trim():i,r,f))&&t(n,r?r.concat(i):[i])})),l.pop()}}(t),e}function nt(t){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,(function(t){return e[t]}))}function rt(t,e){this._pairs=[],t&&et(t,this,e)}const ot=rt.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,n){if(!e)return t;const r=n&&n.encode||it,o=n&&n.serialize;let i;if(i=o?o(e,n):J.isURLSearchParams(e)?e.toString():new rt(e,n).toString(r),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,nt)}:nt;return this._pairs.map((function(t){return e(t[0])+"="+e(t[1])}),"").join("&")};var at=class InterceptorManager{constructor(){this.handlers=[]}use(t,e,n){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!n&&n.synchronous,runWhen:n?n.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:rt,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,n,r,o){let i=t[o++];if("__proto__"===i)return!0;const s=Number.isFinite(+i),a=o>=t.length;if(i=!i&&J.isArray(r)?r.length:i,a)return J.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!s;r[i]&&J.isObject(r[i])||(r[i]=[]);return e(t,n,r[i],o)&&J.isArray(r[i])&&(r[i]=function(t){const e={},n=Object.keys(t);let r;const o=n.length;let i;for(r=0;r<o;r++)i=n[r],e[i]=t[i];return e}(r[i])),!s}if(J.isFormData(t)&&J.isFunction(t.entries)){const n={};return J.forEachEntry(t,((t,r)=>{e(function(t){return J.matchAll(/\w+|\[(\w*)]/g,t).map((t=>"[]"===t[0]?"":t[1]||t[0]))}(t),r,n,0)})),n}return null}const vt={transitional:ut,adapter:["xhr","http","fetch"],transformRequest:[function(t,e){const n=e.getContentType()||"",r=n.indexOf("application/json")>-1,o=J.isObject(t);o&&J.isHTMLForm(t)&&(t=new FormData(t));if(J.isFormData(t))return r?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(n.indexOf("application/x-www-form-urlencoded")>-1)return function(t,e){return et(t,new yt.classes.URLSearchParams,Object.assign({visitor:function(t,e,n,r){return yt.isNode&&J.isBuffer(t)?(this.append(e,t.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},e))}(t,this.formSerializer).toString();if((i=J.isFileList(t))||n.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||r?(e.setContentType("application/json",!1),function(t,e,n){if(J.isString(t))try{return(e||JSON.parse)(t),J.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(n||JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){const e=this.transitional||vt.transitional,n=e&&e.forcedJSONParsing,r="json"===this.responseType;if(J.isResponse(t)||J.isReadableStream(t))return t;if(t&&J.isString(t)&&(n&&!this.responseType||r)){const n=!(e&&e.silentJSONParsing)&&r;try{return JSON.parse(t)}catch(t){if(n){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,n,r,o){return J.isFunction(r)?r.call(this,e,n):(o&&(e=n),J.isString(e)?J.isString(r)?-1!==e.indexOf(r):J.isRegExp(r)?r.test(e):void 0:void 0)}class AxiosHeaders{constructor(t){t&&this.set(t)}set(t,e,n){const r=this;function o(t,e,n){const o=wt(e);if(!o)throw new Error("header name must be a non-empty string");const i=J.findKey(r,o);(!i||void 0===r[i]||!0===n||void 0===n&&!1!==r[i])&&(r[i||e]=Ot(t))}const i=(t,e)=>J.forEach(t,((t,n)=>o(t,n,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 n,r,o;return t&&t.split("\n").forEach((function(t){o=t.indexOf(":"),n=t.substring(0,o).trim().toLowerCase(),r=t.substring(o+1).trim(),!n||e[n]&>[n]||("set-cookie"===n?e[n]?e[n].push(r):e[n]=[r]:e[n]=e[n]?e[n]+", "+r:r)})),e})(t),e);else if(J.isHeaders(t))for(const[e,r]of t.entries())o(r,e,n);else null!=t&&o(e,t,n);return this}get(t,e){if(t=wt(t)){const n=J.findKey(this,t);if(n){const t=this[n];if(!e)return t;if(!0===e)return function(t){const e=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(t);)e[r[1]]=r[2];return e}(t);if(J.isFunction(e))return e.call(this,t,n);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 n=J.findKey(this,t);return!(!n||void 0===this[n]||e&&!jt(0,this[n],n,e))}return!1}delete(t,e){const n=this;let r=!1;function o(t){if(t=wt(t)){const o=J.findKey(n,t);!o||e&&!jt(0,n[o],o,e)||(delete n[o],r=!0)}}return J.isArray(t)?t.forEach(o):o(t),r}clear(t){const e=Object.keys(this);let n=e.length,r=!1;for(;n--;){const o=e[n];t&&!jt(0,this[o],o,t,!0)||(delete this[o],r=!0)}return r}normalize(t){const e=this,n={};return J.forEach(this,((r,o)=>{const i=J.findKey(n,o);if(i)return e[i]=Ot(r),void delete e[o];const s=t?function(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((t,e,n)=>e.toUpperCase()+n))}(o):String(o).trim();s!==o&&delete e[o],e[s]=Ot(r),n[s]=!0})),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const e=Object.create(null);return J.forEach(this,((n,r)=>{null!=n&&!1!==n&&(e[r]=t&&J.isArray(n)?n.join(", "):n)})),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 n=new this(t);return e.forEach((t=>n.set(t))),n}static accessor(t){const e=(this[mt]=this[mt]={accessors:{}}).accessors,n=this.prototype;function r(t){const r=wt(t);e[r]||(!function(t,e){const n=J.toCamelCase(" "+e);["get","set","has"].forEach((r=>{Object.defineProperty(t,r+n,{value:function(t,n,o){return this[r].call(this,e,t,n,o)},configurable:!0})}))}(n,t),e[r]=!0)}return J.isArray(t)?t.forEach(r):r(t),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),J.reduceDescriptors(AxiosHeaders.prototype,(({value:t},e)=>{let n=e[0].toUpperCase()+e.slice(1);return{get:()=>t,set(t){this[n]=t}}})),J.freezeMethods(AxiosHeaders);var Pt=AxiosHeaders;function xt(t,e){const n=this||_t,r=e||n,o=Pt.from(r.headers);let i=r.data;return J.forEach(t,(function(t){i=t.call(n,i,o.normalize(),e?e.status:void 0)})),o.normalize(),i}function St(t){return!(!t||!t.__CANCEL__)}function Dt(t,e,n){K.call(this,null==t?"canceled":t,K.ERR_CANCELED,e,n),this.name="CanceledError"}function Tt(t,e,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?e(new K("Request failed with status code "+n.status,[K.ERR_BAD_REQUEST,K.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):t(n)}J.inherits(Dt,K,{__CANCEL__:!0});const Mt=(t,e,n=3)=>{let r=0;const o=function(t,e){t=t||10;const n=new Array(t),r=new Array(t);let o,i=0,s=0;return e=void 0!==e?e:1e3,function(a){const u=Date.now(),c=r[s];o||(o=u),n[i]=a,r[i]=u;let l=s,f=0;for(;l!==i;)f+=n[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 n,r,o=0,i=1e3/e;const s=(e,i=Date.now())=>{o=i,n=null,r&&(clearTimeout(r),r=null),t.apply(null,e)};return[(...t)=>{const e=Date.now(),a=e-o;a>=i?s(t,e):(n=t,r||(r=setTimeout((()=>{r=null,s(n)}),i-a)))},()=>n&&s(n)]}((n=>{const i=n.loaded,s=n.lengthComputable?n.total:void 0,a=i-r,u=o(a);r=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:n,lengthComputable:null!=s,[e?"download":"upload"]:!0})}),n)},kt=(t,e)=>{const n=null!=t;return[r=>e[0]({lengthComputable:n,total:t,loaded:r}),e[1]]},Rt=t=>(...e)=>J.asap((()=>t(...e)));var Et=yt.hasStandardBrowserEnv?function(){const t=/(msie|trident)/i.test(navigator.userAgent),e=document.createElement("a");let n;function r(n){let r=n;return t&&(e.setAttribute("href",r),r=e.href),e.setAttribute("href",r),{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 n=r(window.location.href),function(t){const e=J.isString(t)?r(t):t;return e.protocol===n.protocol&&e.host===n.host}}():function(){return!0},qt=yt.hasStandardBrowserEnv?{write(t,e,n,r,o,i){const s=[t+"="+encodeURIComponent(e)];J.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),J.isString(r)&&s.push("path="+r),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 n={};function r(t,e,n){return J.isPlainObject(t)&&J.isPlainObject(e)?J.merge.call({caseless:n},t,e):J.isPlainObject(e)?J.merge({},e):J.isArray(e)?e.slice():e}function o(t,e,n){return J.isUndefined(e)?J.isUndefined(t)?void 0:r(void 0,t,n):r(t,e,n)}function i(t,e){if(!J.isUndefined(e))return r(void 0,e)}function s(t,e){return J.isUndefined(e)?J.isUndefined(t)?void 0:r(void 0,t):r(void 0,e)}function a(n,o,i){return i in e?r(n,o):i in t?r(void 0,n):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(r){const i=u[r]||o,s=i(t[r],e[r],r);J.isUndefined(s)&&i!==a||(n[r]=s)})),n}var Ft=t=>{const e=Bt({},t);let n,{data:r,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(r))if(yt.hasStandardBrowserEnv||yt.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if(!1!==(n=a.getContentType())){const[t,...e]=n?n.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&&Et(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,n){const r=Ft(t);let o=r.data;const i=Pt.from(r.headers).normalize();let s,a,u,c,l,{responseType:f,onUploadProgress:p,onDownloadProgress:d}=r;function h(){c&&c(),l&&l(),r.cancelToken&&r.cancelToken.unsubscribe(s),r.signal&&r.signal.removeEventListener("abort",s)}let y=new XMLHttpRequest;function b(){if(!y)return;const r=Pt.from("getAllResponseHeaders"in y&&y.getAllResponseHeaders());Tt((function(t){e(t),h()}),(function(t){n(t),h()}),{data:f&&"text"!==f&&"json"!==f?y.response:y.responseText,status:y.status,statusText:y.statusText,headers:r,config:t,request:y}),y=null}y.open(r.method.toUpperCase(),r.url,!0),y.timeout=r.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&&(n(new K("Request aborted",K.ECONNABORTED,t,y)),y=null)},y.onerror=function(){n(new K("Network Error",K.ERR_NETWORK,t,y)),y=null},y.ontimeout=function(){let e=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||ut;r.timeoutErrorMessage&&(e=r.timeoutErrorMessage),n(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(r.withCredentials)||(y.withCredentials=!!r.withCredentials),f&&"json"!==f&&(y.responseType=r.responseType),d&&([u,l]=Mt(d,!0),y.addEventListener("progress",u)),p&&y.upload&&([a,c]=Mt(p),y.upload.addEventListener("progress",a),y.upload.addEventListener("loadend",c)),(r.cancelToken||r.signal)&&(s=e=>{y&&(n(!e||e.type?new Dt(null,t,y):e),y.abort(),y=null)},r.cancelToken&&r.cancelToken.subscribe(s),r.signal&&(r.signal.aborted?s():r.signal.addEventListener("abort",s)));const v=function(t){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}(r.url);v&&-1===yt.protocols.indexOf(v)?n(new K("Unsupported protocol "+v+":",K.ERR_BAD_REQUEST,t)):y.send(o||null)}))};var Ut=(t,e)=>{let n,r=new AbortController;const o=function(t){if(!n){n=!0,s();const e=t instanceof Error?t:this.reason;r.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}=r;return a.unsubscribe=s,[a,()=>{i&&clearTimeout(i),i=null}]};const Nt=function*(t,e){let n=t.byteLength;if(!e||n<e)return void(yield t);let r,o=0;for(;o<n;)r=o+e,yield t.slice(o,r),o=r},It=(t,e,n,r,o)=>{const i=async function*(t,e,n){for await(const r of t)yield*Nt(ArrayBuffer.isView(r)?r:await n(String(r)),e)}(t,e,o);let s,a=0,u=t=>{s||(s=!0,r&&r(t))};return new ReadableStream({async pull(t){try{const{done:e,value:r}=await i.next();if(e)return u(),void t.close();let o=r.byteLength;if(n){let t=a+=o;n(t)}t.enqueue(new Uint8Array(r))}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,n)=>{throw new K(`Response type '${t}' is not supported`,K.ERR_NOT_SUPPORT,n)})})));const Xt=async(t,e)=>{const n=J.toFiniteNumber(t.getContentLength());return null==n?(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):n};const Yt={http:null,xhr:Lt,fetch:Wt&&(async t=>{let{url:e,method:n,data:r,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"!==n&&"head"!==n&&0!==(_=await Xt(l,r))){let t,n=new Request(e,{method:"POST",body:r,duplex:"half"});if(J.isFormData(r)&&(t=n.headers.get("content-type"))&&l.setContentType(t),n.body){const[t,e]=kt(_,Mt(Rt(u)));r=It(n.body,65536,t,e,Vt)}}J.isString(f)||(f=f?"include":"omit"),h=new Request(e,{...p,signal:y,method:n.toUpperCase(),headers:l.normalize().toJSON(),body:r,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")),[n,r]=a&&kt(e,Mt(Rt(a),!0))||[];o=new Response(It(o.body,65536,n,(()=>{r&&r(),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,n)=>{Tt(e,n,{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 n,r;const o={};for(let i=0;i<e;i++){let e;if(n=t[i],r=n,!te(n)&&(r=Yt[(e=String(n)).toLowerCase()],void 0===r))throw new K(`Unknown adapter '${e}'`);if(r)break;o[e||"#"+i]=r}if(!r){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 r};function ne(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new Dt(null,t)}function re(t){ne(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 ne(t),e.data=xt.call(t,t.transformResponse,e),e.headers=Pt.from(e.headers),e}),(function(e){return St(e)||(ne(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(n){return typeof n===t||"a"+(e<1?"n ":" ")+t}}));const se={};ie.transitional=function(t,e,n){function r(t,e){return"[Axios v1.7.4] Transitional option '"+t+"'"+e+(n?". "+n:"")}return(n,o,i)=>{if(!1===t)throw new K(r(o," has been removed"+(e?" in "+e:"")),K.ERR_DEPRECATED);return e&&!se[o]&&(se[o]=!0,console.warn(r(o," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(n,o,i)}};var ae={assertOptions:function(t,e,n){if("object"!=typeof t)throw new K("options must be an object",K.ERR_BAD_OPTION_VALUE);const r=Object.keys(t);let o=r.length;for(;o-- >0;){const i=r[o],s=e[i];if(s){const e=t[i],n=void 0===e||s(e,i,t);if(!0!==n)throw new K("option "+i+" must be "+n,K.ERR_BAD_OPTION_VALUE)}else if(!0!==n)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 n=e.stack?e.stack.replace(/^.+\n/,""):"";try{t.stack?n&&!String(t.stack).endsWith(n.replace(/^.+\n.+\n/,""))&&(t.stack+="\n"+n):t.stack=n}catch(t){}}throw t}}_request(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},e=Bt(this.defaults,e);const{transitional:n,paramsSerializer:r,headers:o}=e;void 0!==n&&ae.assertOptions(n,{silentJSONParsing:ue.transitional(ue.boolean),forcedJSONParsing:ue.transitional(ue.boolean),clarifyTimeoutError:ue.transitional(ue.boolean)},!1),null!=r&&(J.isFunction(r)?e.paramsSerializer={serialize:r}:ae.assertOptions(r,{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=[re.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=re.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,n){return this.request(Bt(n||{},{method:t,url:e,data:(n||{}).data}))}})),J.forEach(["post","put","patch"],(function(t){function e(e){return function(n,r,o){return this.request(Bt(o||{},{method:t,headers:e?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}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 n=this;this.promise.then((t=>{if(!n._listeners)return;let e=n._listeners.length;for(;e-- >0;)n._listeners[e](t);n._listeners=null})),this.promise.then=t=>{let e;const r=new Promise((t=>{n.subscribe(t),e=t})).then(t);return r.cancel=function(){n.unsubscribe(e)},r},t((function(t,r,o){n.reason||(n.reason=new Dt(t,r,o),e(n.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 n=new ce(e),o=r(ce.prototype.request,n);return J.extend(o,ce.prototype,n,{allOwnKeys:!0}),J.extend(o,n,null,{allOwnKeys:!0}),o.create=function(n){return t(Bt(e,n))},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 n(r){var o=e[r];if(void 0!==o)return o.exports;var i=e[r]={id:r,loaded:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),n(9711)})()));
|
|
3
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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K0YsR0FDQWdjLEVBQUEvaEIsRUFBQSxNQUFBK0Ysc2xCQ0RBZ2MsRUFBQS9oQixFQUFBLEtBQUErRix1bEJDQUFnYyxFQUFBL2hCLEVBQUEsTUFBQStGLGtxQkNBQWdjLEVBQUEvaEIsRUFBQSxLQUFBK0YsR0FDQWdjLEVBQUEvaEIsRUFBQSxNQUFBK0YsdWxCQ0RBZ2MsRUFBQS9oQixFQUFBLE1BQUErRix1NEJDQUFnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLG1xQkNKQWdjLEVBQUEvaEIsRUFBQSxNQUFBK0YsR0FDQWdjLEVBQUEvaEIsRUFBQSxNQUFBK0YsdWxCQ0RBZ2MsRUFBQS9oQixFQUFBLE1BQUErRiwyZ0JDQUFnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsS0FBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLHU0QkNkQWdjLEVBQUEvaEIsRUFBQSxNQUFBK0YsR0FDQWdjLEVBQUEvaEIsRUFBQSxNQUFBK0YsR0FDQWdjLEVBQUEvaEIsRUFBQSxNQUFBK0YsR0FDQWdjLEVBQUEvaEIsRUFBQSxNQUFBK0YsR0FDQWdjLEVBQUEvaEIsRUFBQSxNQUFBK0YsdTRCQ0pBZ2MsRUFBQS9oQixFQUFBLE1BQUErRixHQUNBZ2MsRUFBQS9oQixFQUFBLE1BQUErRixHQUNBZ2MsRUFBQS9oQixFQUFBLE1BQUErRixHQUNBZ2MsRUFBQS9oQixFQUFBLE1BQUErRixHQUNBZ2MsRUFBQS9oQixFQUFBLE1BQUErRix1bEJDSkFnYyxFQUFBL2hCLEVBQUEsTUFBQStGLHVsQkNBQWdjLEVBQUEvaEIsRUFBQSxNQUFBK0YsdWxCQ0FBZ2MsRUFBQS9oQixFQUFBLE1BQUErRix1bEJDQUFnYyxFQUFBL2hCLEVBQUEsTUFBQStGLG1xQkNBQWdjLEVBQUEvaEIsRUFBQSxNQUFBK0YsR0FDQWdjLEVBQUEvaEIsRUFBQSxNQUFBK0YsdWxCQ0RBZ2MsRUFBQS9oQixFQUFBLE1BQUErRix1bEJDQUFnYyxFQUFBL2hCLEVBQUEsTUFBQStGLHNsQkNBQWdjLEVBQUEvaEIsRUFBQSxLQUFBK0YsdWxCQ0FBZ2MsRUFBQS9oQixFQUFBLE1BQUErRix1NEJDQUFnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLG1xQkNKQWdjLEVBQUEvaEIsRUFBQSxNQUFBK0YsR0FDQWdjLEVBQUEvaEIsRUFBQSxNQUFBK0Ysc2xCQ0RBZ2MsRUFBQS9oQixFQUFBLEtBQUErRiwyZ0JDQUFnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFBQStGLEdBQ0FnYyxFQUFBL2hCLEVBQUEsTUFB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SUFDMUJBLEVBQU9pMUIsTUFBUSxHQUNWajFCLEVBQU9rMUIsV0FBVWwxQixFQUFPazFCLFNBQVcsSUFDakNsMUIsR0NBa0IyMEIsRUFBb0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvRG9tYWlucy9kb21haW4udHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0RvbWFpbnMvZG9tYWluc0NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvRG9tYWlucy9kb21haW5zQ3JlZGVudGlhbHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0RvbWFpbnMvZG9tYWluc1RhZ3MudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0RvbWFpbnMvZG9tYWluc1RlbXBsYXRlcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvRG9tYWlucy9kb21haW5zVHJhY2tpbmcudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0V2ZW50cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvSVBQb29scy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvSVBzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvQXR0cmlidXRlc0NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvSW5ib3hQbGFjZW1lbnRzL0ZpbHRlcnNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0luYm94UGxhY2VtZW50cy9SZXN1bHRzL0luYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0luYm94UGxhY2VtZW50cy9SZXN1bHRzL0luYm94UGxhY2VtZW50c1Jlc3VsdHNTaGFyaW5nQ2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvU2VlZHNMaXN0cy9TZWVkc0xpc3RzQ2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvaW5ib3hQbGFjZW1lbnRzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvcHJvdmlkZXJzL0luYm94UGxhY2VtZW50c1Byb3ZpZGVycy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvTWFpbGd1bkNsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvTWFpbGluZ0xpc3RzL21haWxMaXN0TWVtYmVycy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvTWFpbGluZ0xpc3RzL21haWxpbmdMaXN0cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvTWVzc2FnZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL01ldHJpY3MvTWV0cmljc0NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvUm91dGVzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdGF0cy9TdGF0c0NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvU3RhdHMvU3RhdHNDb250YWluZXIudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1N1YmFjY291bnRzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdXBwcmVzc2lvbnMvQm91bmNlLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdXBwcmVzc2lvbnMvQ29tcGxhaW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdXBwcmVzc2lvbnMvU3VwcHJlc3Npb24udHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1N1cHByZXNzaW9ucy9TdXBwcmVzc2lvbnNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1N1cHByZXNzaW9ucy9VbnN1YnNjcmliZS50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvU3VwcHJlc3Npb25zL1doaXRlTGlzdC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvVmFsaWRhdGlvbnMvbXVsdGlwbGVWYWxpZGF0aW9uLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9WYWxpZGF0aW9ucy92YWxpZGF0ZS50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvV2ViaG9va3MudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL2NvbW1vbi9BdHRhY2htZW50c0hhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL2NvbW1vbi9FcnJvci50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvY29tbW9uL0Zvcm1EYXRhQnVpbGRlci50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL2NvbW1vbi9SZXF1ZXN0LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvRW51bXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL0NvbW1vbi9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvRG9tYWlucy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvRXZlbnRDbGllbnQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL0lQUG9vbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL0lQcy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvSW5ib3hQbGFjZW1lbnRzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9NYWlsZ3VuQ2xpZW50L2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9NYWlsaW5nTGlzdHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL01lc3NhZ2VzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9Sb3V0ZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL1N0YXRzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9TdWJhY2NvdW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvU3VwcHJlc3Npb25zL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9WYWxpZGF0aW9ucy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvV2ViaG9va3MvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvQ29tbW9uL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvRG9tYWlucy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL0V2ZW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL0lQUG9vbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9JUHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9NYWlsZ3VuQ2xpZW50L2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvTWFpbGluZ0xpc3RzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvTWVzc2FnZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9Sb3V0ZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9TdGF0cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL1N1YmFjY291bnRzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvU3VwcHJlc3Npb25zL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvVmFsaWRhdGlvbnMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9XZWJob29rcy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9iYXNlLTY0L2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL3VybC1qb2luL2xpYi91cmwtam9pbi5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2Rpc3QvYnJvd3Nlci9heGlvcy5janMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy93ZWJwYWNrL3J1bnRpbWUvbm9kZSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL21haWxndW4uanMvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEROU1JlY29yZCxcbiAgRG9tYWluRGF0YSxcbiAgRG9tYWluRHluYW1pY1Byb3BzVHlwZSxcbiAgVERvbWFpblxufSBmcm9tICcuLi8uLi9UeXBlcy9Eb21haW5zJztcblxuLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW4gaW1wbGVtZW50cyBURG9tYWluIHtcbiAgbmFtZTogc3RyaW5nO1xuICByZXF1aXJlX3RsczogYm9vbGVhbjtcbiAgc2tpcF92ZXJpZmljYXRpb246IGJvb2xlYW47XG4gIHN0YXRlOiBzdHJpbmc7XG4gIHdpbGRjYXJkOiBib29sZWFuO1xuICBzcGFtX2FjdGlvbjogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBEYXRlO1xuICBzbXRwX3Bhc3N3b3JkOiBzdHJpbmc7XG4gIHNtdHBfbG9naW46IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICByZWNlaXZpbmdfZG5zX3JlY29yZHM6IEROU1JlY29yZFtdIHwgbnVsbDtcbiAgc2VuZGluZ19kbnNfcmVjb3JkczogRE5TUmVjb3JkW10gfCBudWxsO1xuICBpZDogc3RyaW5nO1xuICBpc19kaXNhYmxlZDogYm9vbGVhbjtcbiAgd2ViX3ByZWZpeDogc3RyaW5nO1xuICB3ZWJfc2NoZW1lOiBzdHJpbmc7XG4gIHVzZV9hdXRvbWF0aWNfc2VuZGVyX3NlY3VyaXR5OiBib29sZWFuO1xuICBka2ltX2hvc3Q/OiBzdHJpbmc7XG4gIG1haWxmcm9tX2hvc3Q/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZGF0YTogRG9tYWluRGF0YSxcbiAgICByZWNlaXZpbmc/OiBETlNSZWNvcmRbXSB8IG51bGwsXG4gICAgc2VuZGluZz86IEROU1JlY29yZFtdIHwgbnVsbFxuICApIHtcbiAgICB0aGlzLm5hbWUgPSBkYXRhLm5hbWU7XG4gICAgdGhpcy5yZXF1aXJlX3RscyA9IGRhdGEucmVxdWlyZV90bHM7XG4gICAgdGhpcy5za2lwX3ZlcmlmaWNhdGlvbiA9IGRhdGEuc2tpcF92ZXJpZmljYXRpb247XG4gICAgdGhpcy5zdGF0ZSA9IGRhdGEuc3RhdGU7XG4gICAgdGhpcy53aWxkY2FyZCA9IGRhdGEud2lsZGNhcmQ7XG4gICAgdGhpcy5zcGFtX2FjdGlvbiA9IGRhdGEuc3BhbV9hY3Rpb247XG4gICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgICB0aGlzLnNtdHBfcGFzc3dvcmQgPSBkYXRhLnNtdHBfcGFzc3dvcmQ7XG4gICAgdGhpcy5zbXRwX2xvZ2luID0gZGF0YS5zbXRwX2xvZ2luO1xuICAgIHRoaXMudHlwZSA9IGRhdGEudHlwZTtcbiAgICB0aGlzLnJlY2VpdmluZ19kbnNfcmVjb3JkcyA9IHJlY2VpdmluZyB8fCBudWxsO1xuICAgIHRoaXMuc2VuZGluZ19kbnNfcmVjb3JkcyA9IHNlbmRpbmcgfHwgbnVsbDtcbiAgICB0aGlzLmlkID0gZGF0YS5pZDtcbiAgICB0aGlzLmlzX2Rpc2FibGVkID0gZGF0YS5pc19kaXNhYmxlZDtcbiAgICB0aGlzLndlYl9wcmVmaXggPSBkYXRhLndlYl9wcmVmaXg7XG4gICAgdGhpcy53ZWJfc2NoZW1lID0gZGF0YS53ZWJfc2NoZW1lO1xuICAgIHRoaXMudXNlX2F1dG9tYXRpY19zZW5kZXJfc2VjdXJpdHkgPSBkYXRhLnVzZV9hdXRvbWF0aWNfc2VuZGVyX3NlY3VyaXR5O1xuXG4gICAgLypcbiAgICAgIGRvbWFpbiBnZXQgYW5kIHVwZGF0ZSBtZXRob2RzIG1heSBoYXZlIHJpY2hlciByZXNwb25zZSB0aGFuIGNyZWF0ZSBtZXRob2QuXG4gICAgKi9cbiAgICBjb25zdCBkeW5hbWljS2V5czogKGtleW9mIERvbWFpbkR5bmFtaWNQcm9wc1R5cGUpW10gPSBbJ2RraW1faG9zdCcsICdtYWlsZnJvbV9ob3N0J107XG5cbiAgICBjb25zdCBkeW5hbWljUHJvcGVydGllcyA9IGR5bmFtaWNLZXlzLnJlZHVjZSgoYWNjLCBwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgIGlmIChkYXRhW3Byb3BlcnR5TmFtZV0pIHtcbiAgICAgICAgY29uc3QgcHJvcCA9IHByb3BlcnR5TmFtZSBhcyBrZXlvZiBEb21haW5EeW5hbWljUHJvcHNUeXBlO1xuICAgICAgICBhY2NbcHJvcF0gPSBkYXRhW3Byb3BlcnR5TmFtZV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIERvbWFpbkR5bmFtaWNQcm9wc1R5cGUpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgZHluYW1pY1Byb3BlcnRpZXMpO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQge1xuICBJRG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICBJRG9tYWluVGFnc0NsaWVudCxcbiAgSURvbWFpbkNyZWRlbnRpYWxzLFxuICBJRG9tYWluc0NsaWVudFxufSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL0RvbWFpbnMnO1xuXG5pbXBvcnQgeyBBUElSZXNwb25zZSB9IGZyb20gJy4uLy4uL1R5cGVzL0NvbW1vbi9BcGlSZXNwb25zZSc7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi4vY29tbW9uL0Vycm9yJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuaW1wb3J0IHtcbiAgRGVzdHJveWVkRG9tYWluUmVzcG9uc2UsXG4gIE1lc3NhZ2VSZXNwb25zZSxcbiAgRG9tYWluTGlzdFJlc3BvbnNlRGF0YSxcbiAgRG9tYWluUmVzcG9uc2VEYXRhLFxuICBEb21haW5UcmFja2luZ0RhdGEsXG4gIFVwZGF0ZWRPcGVuVHJhY2tpbmcsXG4gIERvbWFpbnNRdWVyeSxcbiAgRG9tYWluSW5mbyxcbiAgQ29ubmVjdGlvblNldHRpbmdzLFxuICBDb25uZWN0aW9uU2V0dGluZ3NSZXNwb25zZSxcbiAgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5ncyxcbiAgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5nc1JlcyxcbiAgT3BlblRyYWNraW5nSW5mbyxcbiAgQ2xpY2tUcmFja2luZ0luZm8sXG4gIFVuc3Vic2NyaWJlVHJhY2tpbmdJbmZvLFxuICBSZXBsYWNlbWVudEZvclBvb2wsXG4gIERLSU1BdXRob3JpdHlJbmZvLFxuICBVcGRhdGVkREtJTUF1dGhvcml0eSxcbiAgVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSxcbiAgREtJTVNlbGVjdG9ySW5mbyxcbiAgVXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlLFxuICBXZWJQcmVmaXhJbmZvLFxuICBVcGRhdGVkV2ViUHJlZml4UmVzcG9uc2UsXG4gIFREb21haW4sXG4gIERvbWFpblVwZGF0ZUluZm8sXG4gIERvbWFpblVwZGF0ZUluZm9SZXEsXG4gIERvbWFpbkluZm9SZXEsXG4gIEJvb2xUb1N0cmluZyxcbiAgRG9tYWluR2V0UXVlcnksXG4gIFVwZGF0ZWRES0lNU2VsZWN0b3JSZXN1bHQsXG59IGZyb20gJy4uLy4uL1R5cGVzL0RvbWFpbnMnO1xuaW1wb3J0IERvbWFpbiBmcm9tICcuL2RvbWFpbic7XG5pbXBvcnQgeyBJTG9nZ2VyLCBJRG9tYWluVHJhY2tpbmdDbGllbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluc0NsaWVudCBpbXBsZW1lbnRzIElEb21haW5zQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcHVibGljIGRvbWFpbkNyZWRlbnRpYWxzOiBJRG9tYWluQ3JlZGVudGlhbHM7XG4gIHB1YmxpYyBkb21haW5UZW1wbGF0ZXM6IElEb21haW5UZW1wbGF0ZXNDbGllbnQ7XG4gIHB1YmxpYyBkb21haW5UYWdzOiBJRG9tYWluVGFnc0NsaWVudDtcbiAgcHVibGljIGRvbWFpblRyYWNraW5nOiBJRG9tYWluVHJhY2tpbmdDbGllbnQ7XG4gIHByaXZhdGUgbG9nZ2VyOiBJTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQ6IElEb21haW5DcmVkZW50aWFscyxcbiAgICBkb21haW5UZW1wbGF0ZXNDbGllbnQ6IElEb21haW5UZW1wbGF0ZXNDbGllbnQsXG4gICAgZG9tYWluVGFnc0NsaWVudDogSURvbWFpblRhZ3NDbGllbnQsXG4gICAgZG9tYWluVHJhY2tpbmc6IElEb21haW5UcmFja2luZ0NsaWVudCxcbiAgICBsb2dnZXI6IElMb2dnZXIgPSBjb25zb2xlXG4gICkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5kb21haW5DcmVkZW50aWFscyA9IGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50O1xuICAgIHRoaXMuZG9tYWluVGVtcGxhdGVzID0gZG9tYWluVGVtcGxhdGVzQ2xpZW50O1xuICAgIHRoaXMuZG9tYWluVGFncyA9IGRvbWFpblRhZ3NDbGllbnQ7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gICAgdGhpcy5kb21haW5UcmFja2luZyA9IGRvbWFpblRyYWNraW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlQm9vbFZhbHVlcyhcbiAgICBkYXRhOiBEb21haW5JbmZvIHwgRG9tYWluVXBkYXRlSW5mb1xuICApOiBEb21haW5JbmZvUmVxIHwgRG9tYWluVXBkYXRlSW5mb1JlcSB7XG4gICAgY29uc3QgcHJvcHNGb3JSZXBsYWNlbWVudCA9IGRhdGEgYXMgQm9vbFRvU3RyaW5nO1xuICAgIGNvbnN0IHJlcGxhY2VkUHJvcHMgPSBPYmplY3Qua2V5cyhwcm9wc0ZvclJlcGxhY2VtZW50KS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBjb25zdCBwcm9wID0ga2V5IGFzIGtleW9mIEJvb2xUb1N0cmluZztcbiAgICAgIGlmICh0eXBlb2YgcHJvcHNGb3JSZXBsYWNlbWVudFtwcm9wXSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJvcHNGb3JSZXBsYWNlbWVudFtwcm9wXSBhcyBib29sZWFuO1xuICAgICAgICBhY2NbcHJvcF0gPSAodmFsdWUudG9TdHJpbmcoKSA9PT0gJ3RydWUnKSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxrZXlvZiBCb29sVG9TdHJpbmcsICd0cnVlJ3wgJ2ZhbHNlJz4pO1xuICAgIHJldHVybiB7IC4uLmRhdGEsIC4uLnJlcGxhY2VkUHJvcHMgfSBhcyBEb21haW5VcGRhdGVJbmZvUmVxIHwgRG9tYWluSW5mb1JlcTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlTWVzc2FnZShyZXNwb25zZTogRGVzdHJveWVkRG9tYWluUmVzcG9uc2UpIDogTWVzc2FnZVJlc3BvbnNlIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VEb21haW5MaXN0KHJlc3BvbnNlOiBEb21haW5MaXN0UmVzcG9uc2VEYXRhKTogVERvbWFpbltdIHtcbiAgICBpZiAocmVzcG9uc2UuYm9keSAmJiByZXNwb25zZS5ib2R5Lml0ZW1zKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEb21haW4oaXRlbSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEb21haW4ocmVzcG9uc2U6IERvbWFpblJlc3BvbnNlRGF0YSk6IFREb21haW4ge1xuICAgIHJldHVybiBuZXcgRG9tYWluKFxuICAgICAgcmVzcG9uc2UuYm9keS5kb21haW4sXG4gICAgICByZXNwb25zZS5ib2R5LnJlY2VpdmluZ19kbnNfcmVjb3JkcyxcbiAgICAgIHJlc3BvbnNlLmJvZHkuc2VuZGluZ19kbnNfcmVjb3Jkc1xuICAgICk7XG4gIH1cblxuICBsaXN0KHF1ZXJ5PzogRG9tYWluc1F1ZXJ5KTogUHJvbWlzZTxURG9tYWluW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3Y0L2RvbWFpbnMnLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZURvbWFpbkxpc3QocmVzIGFzIERvbWFpbkxpc3RSZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZywgcXVlcnk/OiBEb21haW5HZXRRdWVyeSkgOiBQcm9taXNlPFREb21haW4+IHtcbiAgICBjb25zdCBwcmVwYXJlZFF1ZXJ5ID0gcXVlcnkgPyB7XG4gICAgICAnaDpleHRlbmRlZCc6IHF1ZXJ5Py5leHRlbmRlZCA/PyBmYWxzZSxcbiAgICAgICdoOndpdGhfZG5zJzogcXVlcnk/LndpdGhfZG5zID8/IHRydWUsXG4gICAgfSA6IHt9O1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAvdjQvZG9tYWlucy8ke2RvbWFpbn1gLCBwcmVwYXJlZFF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbihyZXMgYXMgRG9tYWluUmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICBjcmVhdGUoZGF0YTogRG9tYWluSW5mbykgOiBQcm9taXNlPFREb21haW4+IHtcbiAgICBjb25zdCBwb3N0T2JqID0gdGhpcy5faGFuZGxlQm9vbFZhbHVlcyhkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92NC9kb21haW5zJywgcG9zdE9iailcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW4ocmVzIGFzIERvbWFpblJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgdXBkYXRlKGRvbWFpbjogc3RyaW5nLCBkYXRhOiBEb21haW5VcGRhdGVJbmZvKSA6IFByb21pc2U8VERvbWFpbj4ge1xuICAgIGNvbnN0IHB1dERhdGEgPSB0aGlzLl9oYW5kbGVCb29sVmFsdWVzKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAvdjQvZG9tYWlucy8ke2RvbWFpbn1gLCBwdXREYXRhKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbihyZXMgYXMgRG9tYWluUmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICB2ZXJpZnkoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPFREb21haW4+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dChgL3Y0L2RvbWFpbnMvJHtkb21haW59L3ZlcmlmeWApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIGRlc3Ryb3koZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2VSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjMvZG9tYWlucy8ke2RvbWFpbn1gKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZU1lc3NhZ2UocmVzIGFzIERlc3Ryb3llZERvbWFpblJlc3BvbnNlKSk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uKGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxDb25uZWN0aW9uU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3YzL2RvbWFpbnMvJHtkb21haW59L2Nvbm5lY3Rpb25gKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgQ29ubmVjdGlvblNldHRpbmdzUmVzcG9uc2UpXG4gICAgICAudGhlbigocmVzOkNvbm5lY3Rpb25TZXR0aW5nc1Jlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBDb25uZWN0aW9uU2V0dGluZ3MpO1xuICB9XG5cbiAgdXBkYXRlQ29ubmVjdGlvbihkb21haW46IHN0cmluZywgZGF0YTogQ29ubmVjdGlvblNldHRpbmdzKTogUHJvbWlzZTxVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS9jb25uZWN0aW9uYCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3NSZXMpXG4gICAgICAudGhlbigocmVzOlVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3NSZXMpID0+IHJlcy5ib2R5IGFzIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3MpO1xuICB9XG5cbiAgLy8gVHJhY2tpbmdcbiAgLyoqXG4gICogQGRlcHJlY2F0ZWQgJ2RvbWFpbnMuZ2V0VHJhY2tpbmcnIG1ldGhvZCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkLlxuICAqIFBsZWFzZSB1c2UgJ2RvbWFpbnMuZG9tYWluVHJhY2tpbmcuZ2V0VHJhY2tpbmcnIGluc3RlYWQuXG4gICovXG5cbiAgZ2V0VHJhY2tpbmcoZG9tYWluOiBzdHJpbmcpIDogUHJvbWlzZTxEb21haW5UcmFja2luZ0RhdGE+IHtcbiAgICB0aGlzLmxvZ2dlci53YXJuKGBcbiAgICAgICdkb21haW5zLmdldFRyYWNraW5nJyBtZXRob2QgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIHVzZSAnZG9tYWlucy5kb21haW5UcmFja2luZy5nZXRUcmFja2luZycgaW5zdGVhZC5cbiAgICBgKTtcbiAgICByZXR1cm4gdGhpcy5kb21haW5UcmFja2luZy5nZXRUcmFja2luZyhkb21haW4pO1xuICB9XG5cbiAgLyoqXG4gICogQGRlcHJlY2F0ZWQgJ2RvbWFpbnMudXBkYXRlVHJhY2tpbmcnIG1ldGhvZCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkLlxuICAqIFBsZWFzZSB1c2UgJ2RvbWFpbnMuZG9tYWluVHJhY2tpbmcudXBkYXRlVHJhY2tpbmcnIGluc3RlYWQuXG4gICovXG4gIHVwZGF0ZVRyYWNraW5nKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBkYXRhOiBPcGVuVHJhY2tpbmdJbmZvIHwgQ2xpY2tUcmFja2luZ0luZm8gfCBVbnN1YnNjcmliZVRyYWNraW5nSW5mb1xuICApOiBQcm9taXNlPFVwZGF0ZWRPcGVuVHJhY2tpbmc+IHtcbiAgICB0aGlzLmxvZ2dlci53YXJuKGBcbiAgICAgICdkb21haW5zLnVwZGF0ZVRyYWNraW5nJyBtZXRob2QgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIHVzZSAnZG9tYWlucy5kb21haW5UcmFja2luZy51cGRhdGVUcmFja2luZycgaW5zdGVhZC5cbiAgICBgKTtcbiAgICByZXR1cm4gdGhpcy5kb21haW5UcmFja2luZy51cGRhdGVUcmFja2luZyhkb21haW4sIHR5cGUsIGRhdGEpO1xuICB9XG5cbiAgLy8gSVBzXG4gIC8qKlxuICAqIEBkZXByZWNhdGVkIFwiZG9tYWlucy5nZXRJcHNcIiBtZXRob2QgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHJlbGVhc2VzLlxuICAqL1xuICBnZXRJcHMoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgdGhpcy5sb2dnZXIud2FybignXCJkb21haW5zLmdldElwc1wiIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSByZWxlYXNlcy4nKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBBUElSZXNwb25zZSkgPT4gcmVzcG9uc2U/LmJvZHk/Lml0ZW1zKTtcbiAgfVxuXG4gIC8qKlxuICAqIEBkZXByZWNhdGVkIFwiZG9tYWlucy5hc3NpZ25JcFwiIG1ldGhvZCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgcmVsZWFzZXMuXG4gICovXG4gIGFzc2lnbklwKGRvbWFpbjogc3RyaW5nLCBpcDogc3RyaW5nKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHRoaXMubG9nZ2VyLndhcm4oJ1wiZG9tYWlucy5hc3NpZ25JcFwiIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSByZWxlYXNlcy4nKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnKSwgeyBpcCB9KTtcbiAgfVxuXG4gIC8qKlxuICAqIEBkZXByZWNhdGVkIFwiZG9tYWlucy5kZWxldGVJcFwiIG1ldGhvZCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSBtb3ZlZCB0byB0aGUgSXBzQ2xpZW50LlxuICAqL1xuICBkZWxldGVJcChkb21haW46IHN0cmluZywgaXA6IHN0cmluZyk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICB0aGlzLmxvZ2dlci53YXJuKCdcImRvbWFpbnMuZGVsZXRlSXBcIiBtZXRob2QgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSBtb3ZlZCBpbnRvIHRoZSBJcHNDbGllbnQgaW4gdGhlIGZ1dHVyZSByZWxlYXNlcy4nKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycsIGlwKSk7XG4gIH1cblxuICAvKipcbiAgKiBAZGVwcmVjYXRlZCBcImRvbWFpbnMubGlua0lwUG9vbFwiIG1ldGhvZCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkXG4gICogaW4gdGhlIGZ1dHVyZSByZWxlYXNlcy5cbiAgKi9cbiAgbGlua0lwUG9vbChkb21haW46IHN0cmluZywgcG9vbElkOiBzdHJpbmcpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgdGhpcy5sb2dnZXIud2FybignXCJkb21haW5zLmxpbmtJcFBvb2xcIiBtZXRob2QgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHJlbGVhc2VzLicpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpLCB7IHBvb2xfaWQ6IHBvb2xJZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAqIEBkZXByZWNhdGVkIFwiZG9tYWlucy51bmxpbmtJcFBvbGxcIiBtZXRob2QgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgbW92ZWQgaW50byB0aGUgSXBzQ2xpZW50XG4gICogaW4gdGhlIGZ1dHVyZSByZWxlYXNlcy5cbiAgKi9cbiAgdW5saW5rSXBQb2xsKGRvbWFpbjogc3RyaW5nLCByZXBsYWNlbWVudDogUmVwbGFjZW1lbnRGb3JQb29sKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHRoaXMubG9nZ2VyLndhcm4oJ1wiZG9tYWlucy51bmxpbmtJcFBvbGxcIiBtZXRob2QgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgbW92ZWQgaW50byB0aGUgSXBzQ2xpZW50IGluIHRoZSBmdXR1cmUgcmVsZWFzZXMuJyk7XG4gICAgbGV0IHNlYXJjaFBhcmFtcyA9ICcnO1xuICAgIGlmIChyZXBsYWNlbWVudC5wb29sX2lkICYmIHJlcGxhY2VtZW50LmlwKSB7XG4gICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKCdUb28gbXVjaCBkYXRhIGZvciByZXBsYWNlbWVudCcsICdQbGVhc2Ugc3BlY2lmeSBlaXRoZXIgcG9vbF9pZCBvciBpcCAobm90IGJvdGgpJyk7XG4gICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudC5wb29sX2lkKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBgP3Bvb2xfaWQ9JHtyZXBsYWNlbWVudC5wb29sX2lkfWA7XG4gICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudC5pcCkge1xuICAgICAgc2VhcmNoUGFyYW1zID0gYD9pcD0ke3JlcGxhY2VtZW50LmlwfWA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJywgJ2lwX3Bvb2wnLCBzZWFyY2hQYXJhbXMpKTtcbiAgfVxuXG4gIHVwZGF0ZURLSU1BdXRob3JpdHkoZG9tYWluOiBzdHJpbmcsIGRhdGE6IERLSU1BdXRob3JpdHlJbmZvKTogUHJvbWlzZTxVcGRhdGVkREtJTUF1dGhvcml0eT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vZGtpbV9hdXRob3JpdHlgLCB7fSwgeyBxdWVyeTogYHNlbGY9JHtkYXRhLnNlbGZ9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSlcbiAgICAgIC50aGVuKChyZXMgOiBVcGRhdGVkREtJTUF1dGhvcml0eVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBVcGRhdGVkREtJTUF1dGhvcml0eSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVES0lNU2VsZWN0b3IoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgZGF0YTogREtJTVNlbGVjdG9ySW5mb1xuICApOiBQcm9taXNlPFVwZGF0ZWRES0lNU2VsZWN0b3JSZXN1bHQ+IHtcbiAgICBjb25zdCByZXM6IFVwZGF0ZWRES0lNU2VsZWN0b3JSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS9ka2ltX3NlbGVjdG9yYCwge30sIHsgcXVlcnk6IGBka2ltX3NlbGVjdG9yPSR7ZGF0YS5ka2ltU2VsZWN0b3J9YCB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlcy5zdGF0dXMsXG4gICAgICBtZXNzYWdlOiByZXM/LmJvZHk/Lm1lc3NhZ2VcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICogQGRlcHJlY2F0ZWQgXCJkb21haW5zLnVwZGF0ZVdlYlByZWZpeFwiIG1ldGhvZCBpcyBkZXByZWNhdGVkLlxuICAqIFBsZWFzZSB1c2UgZG9tYWlucy51cGRhdGUgdG8gc2V0IG5ldyBcIndlYl9wcmVmaXhcIi5cbiAgKiBDdXJyZW50IG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSByZWxlYXNlcy5cbiAgKi9cbiAgdXBkYXRlV2ViUHJlZml4KGRvbWFpbjogc3RyaW5nLCBkYXRhOiBXZWJQcmVmaXhJbmZvKTogUHJvbWlzZTxVcGRhdGVkV2ViUHJlZml4UmVzcG9uc2U+IHtcbiAgICB0aGlzLmxvZ2dlci53YXJuKCdcImRvbWFpbnMudXBkYXRlV2ViUHJlZml4XCIgbWV0aG9kIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgZG9tYWlucy51cGRhdGUgdG8gc2V0IG5ldyBcIndlYl9wcmVmaXhcIi4gQ3VycmVudCBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgcmVsZWFzZXMuJyk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS93ZWJfcHJlZml4YCwge30sIHsgcXVlcnk6IGB3ZWJfcHJlZml4PSR7ZGF0YS53ZWJQcmVmaXh9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZFdlYlByZWZpeFJlc3BvbnNlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24vQXBpUmVzcG9uc2UnO1xuaW1wb3J0IHsgSURvbWFpbkNyZWRlbnRpYWxzIH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9Eb21haW5zJztcbmltcG9ydCB7XG4gIERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VEYXRhLFxuICBEb21haW5DcmVkZW50aWFsc0xpc3QsXG4gIENyZWF0ZWRVcGRhdGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZSxcbiAgRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQsXG4gIERlbGV0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlLFxuICBEb21haW5DcmVkZW50aWFsc1F1ZXJ5LFxuICBEb21haW5DcmVkZW50aWFscyxcbiAgVXBkYXRlRG9tYWluQ3JlZGVudGlhbHNEYXRhXG59IGZyb20gJy4uLy4uL1R5cGVzL0RvbWFpbnMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5DcmVkZW50aWFsc0NsaWVudCBpbXBsZW1lbnRzIElEb21haW5DcmVkZW50aWFscyB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9kb21haW5zLyc7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURvbWFpbkNyZWRlbnRpYWxzTGlzdChcbiAgICByZXNwb25zZTogRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZURhdGFcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNMaXN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHJlc3BvbnNlLmJvZHkuaXRlbXMsXG4gICAgICB0b3RhbENvdW50OiByZXNwb25zZS5ib2R5LnRvdGFsX2NvdW50XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlTWVzc2FnZVJlc3BvbnNlKFxuICAgIHJlc3BvbnNlOiBDcmVhdGVkVXBkYXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlXG4gICAgfSBhcyBEb21haW5DcmVkZW50aWFsc1Jlc3VsdDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEZWxldGVkUmVzcG9uc2UoXG4gICAgcmVzcG9uc2U6RGVsZXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlLFxuICAgICAgc3BlYzogcmVzcG9uc2UuYm9keS5zcGVjXG4gICAgfSBhcyBEb21haW5DcmVkZW50aWFsc1Jlc3VsdDtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IERvbWFpbkNyZWRlbnRpYWxzUXVlcnkpOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy9jcmVkZW50aWFscycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QocmVzIGFzIERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VEYXRhKVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5DcmVkZW50aWFsc1xuICApOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS9jcmVkZW50aWFsc2AsIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VNZXNzYWdlUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICB1cGRhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbHNMb2dpbjogc3RyaW5nLFxuICAgIGRhdGE6IFVwZGF0ZURvbWFpbkNyZWRlbnRpYWxzRGF0YVxuICApOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L2NyZWRlbnRpYWxzLyR7Y3JlZGVudGlhbHNMb2dpbn1gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlTWVzc2FnZVJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgZGVzdHJveShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBjcmVkZW50aWFsc0xvZ2luOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS9jcmVkZW50aWFscy8ke2NyZWRlbnRpYWxzTG9naW59YClcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURlbGV0ZWRSZXNwb25zZShyZXMpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24vQXBpUmVzcG9uc2UnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5pbXBvcnQge1xuICBJRG9tYWluVGFnU3RhdGlzdGljUmVzdWx0LFxuICBJRG9tYWluVGFnc0NsaWVudFxufSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL0RvbWFpbnMnO1xuaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IHsgUmVzb2x1dGlvbiB9IGZyb20gJy4uLy4uL0VudW1zJztcbmltcG9ydCB7XG4gIERvbWFpblRhZ3NJdGVtLFxuICBEb21haW5UYWdzSXRlbUluZm8sXG4gIERvbWFpblRhZ1N0YXRpc3RpY0l0ZW0sXG4gIERvbWFpblRhZ1N0YXRBUElSZXNwb25zZSxcbiAgRG9tYWluVGFnQVBJUmVzcG9uc2VTdGF0c0l0ZW0sXG4gIERvbWFpblRhZ3NMaXN0LFxuICBEb21haW5UYWdzUmVzcG9uc2VEYXRhLFxuICBEb21haW5UYWdzUXVlcnksXG4gIERvbWFpblRhZ3NNZXNzYWdlUmVzLFxuICBEb21haW5UYWdzU3RhdGlzdGljUXVlcnksXG4gIERvbWFpblRhZ0NvdW50cmllc0FnZ3JlZ2F0aW9uLFxuICBEb21haW5UYWdDb3VudHJpZXNBUElSZXNwb25zZSxcbiAgRG9tYWluVGFnUHJvdmlkZXJzQWdncmVnYXRpb24sXG4gIERvbWFpblRhZ1Byb3ZpZGVyc0FQSVJlc3BvbnNlLFxuICBEb21haW5UYWdEZXZpY2VzQWdncmVnYXRpb24sXG4gIERvbWFpblRhZ0RldmljZXNBUElSZXNwb25zZVxufSBmcm9tICcuLi8uLi9UeXBlcy9Eb21haW5zJztcblxuZXhwb3J0IGNsYXNzIERvbWFpblRhZyBpbXBsZW1lbnRzIERvbWFpblRhZ3NJdGVtIHtcbiAgdGFnOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICdmaXJzdC1zZWVuJzogRGF0ZTtcbiAgJ2xhc3Qtc2Vlbic6IERhdGU7XG5cbiAgY29uc3RydWN0b3IodGFnSW5mbzogRG9tYWluVGFnc0l0ZW1JbmZvKSB7XG4gICAgdGhpcy50YWcgPSB0YWdJbmZvLnRhZztcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGFnSW5mby5kZXNjcmlwdGlvbjtcbiAgICB0aGlzWydmaXJzdC1zZWVuJ10gPSBuZXcgRGF0ZSh0YWdJbmZvWydmaXJzdC1zZWVuJ10pO1xuICAgIHRoaXNbJ2xhc3Qtc2VlbiddID0gbmV3IERhdGUodGFnSW5mb1snbGFzdC1zZWVuJ10pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEb21haW5UYWdTdGF0aXN0aWMgaW1wbGVtZW50cyBJRG9tYWluVGFnU3RhdGlzdGljUmVzdWx0IHtcbiAgdGFnOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YXJ0OiBEYXRlO1xuICBlbmQ6IERhdGU7XG4gIHJlc29sdXRpb246IFJlc29sdXRpb247XG4gIHN0YXRzOiBEb21haW5UYWdTdGF0aXN0aWNJdGVtW107XG5cbiAgY29uc3RydWN0b3IodGFnU3RhdGlzdGljSW5mbzogRG9tYWluVGFnU3RhdEFQSVJlc3BvbnNlKSB7XG4gICAgdGhpcy50YWcgPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkudGFnO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkuZGVzY3JpcHRpb247XG4gICAgdGhpcy5zdGFydCA9IG5ldyBEYXRlKHRhZ1N0YXRpc3RpY0luZm8uYm9keS5zdGFydCk7XG4gICAgdGhpcy5lbmQgPSBuZXcgRGF0ZSh0YWdTdGF0aXN0aWNJbmZvLmJvZHkuZW5kKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkucmVzb2x1dGlvbjtcbiAgICB0aGlzLnN0YXRzID0gdGFnU3RhdGlzdGljSW5mby5ib2R5LnN0YXRzLm1hcChmdW5jdGlvbiAoc3RhdDogRG9tYWluVGFnQVBJUmVzcG9uc2VTdGF0c0l0ZW0pIHtcbiAgICAgIGNvbnN0IHJlcyA9IHsgLi4uc3RhdCwgdGltZTogbmV3IERhdGUoc3RhdC50aW1lKSB9O1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5UYWdzQ2xpZW50XG4gIGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxEb21haW5UYWdzTGlzdD5cbiAgaW1wbGVtZW50cyBJRG9tYWluVGFnc0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My8nO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChcbiAgICByZXNwb25zZTogRG9tYWluVGFnc1Jlc3BvbnNlRGF0YSxcbiAgKTogRG9tYWluVGFnc0xpc3Qge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBEb21haW5UYWdzTGlzdDtcbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoKHRhZ0luZm86IERvbWFpblRhZ3NJdGVtSW5mbykgPT4gbmV3IERvbWFpblRhZyh0YWdJbmZvKSk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAndGFnJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVRhZ1N0YXRpc3RpYyhcbiAgICByZXNwb25zZTogRG9tYWluVGFnU3RhdEFQSVJlc3BvbnNlXG4gICk6IElEb21haW5UYWdTdGF0aXN0aWNSZXN1bHQge1xuICAgIHJldHVybiBuZXcgRG9tYWluVGFnU3RhdGlzdGljKHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3QoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogRG9tYWluVGFnc1F1ZXJ5KTogUHJvbWlzZTxEb21haW5UYWdzTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJyksIHF1ZXJ5KTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ3NJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiBuZXcgRG9tYWluVGFnKHJlcy5ib2R5KVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZShkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ3NNZXNzYWdlUmVzPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcpLCBkZXNjcmlwdGlvbilcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgRG9tYWluVGFnc01lc3NhZ2VSZXNcbiAgICAgICk7XG4gIH1cblxuICBkZXN0cm95KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHRhZzogc3RyaW5nXG4gICk6IFByb21pc2U8RG9tYWluVGFnc01lc3NhZ2VSZXM+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0ke2RvbWFpbn0vdGFncy8ke3RhZ31gKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IChcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6IHJlcy5ib2R5Lm1lc3NhZ2UsXG4gICAgICAgICAgc3RhdHVzOiByZXMuc3RhdHVzXG4gICAgICAgIH0gYXMgRG9tYWluVGFnc01lc3NhZ2VSZXMpKTtcbiAgfVxuXG4gIHN0YXRpc3RpYyhkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcsIHF1ZXJ5OiBEb21haW5UYWdzU3RhdGlzdGljUXVlcnkpXG4gICAgOiBQcm9taXNlPERvbWFpblRhZ1N0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnLCAnc3RhdHMnKSwgcXVlcnkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlVGFnU3RhdGlzdGljKHJlcylcbiAgICAgICk7XG4gIH1cblxuICBjb3VudHJpZXMoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdDb3VudHJpZXNBZ2dyZWdhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnLCAnc3RhdHMvYWdncmVnYXRlcy9jb3VudHJpZXMnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBEb21haW5UYWdDb3VudHJpZXNBUElSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgRG9tYWluVGFnQ291bnRyaWVzQWdncmVnYXRpb25cbiAgICAgICk7XG4gIH1cblxuICBwcm92aWRlcnMoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdQcm92aWRlcnNBZ2dyZWdhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnLCAnc3RhdHMvYWdncmVnYXRlcy9wcm92aWRlcnMnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBEb21haW5UYWdQcm92aWRlcnNBUElSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgRG9tYWluVGFnUHJvdmlkZXJzQWdncmVnYXRpb25cbiAgICAgICk7XG4gIH1cblxuICBkZXZpY2VzKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnRGV2aWNlc0FnZ3JlZ2F0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcsICdzdGF0cy9hZ2dyZWdhdGVzL2RldmljZXMnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBEb21haW5UYWdEZXZpY2VzQVBJUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIERvbWFpblRhZ0RldmljZXNBZ2dyZWdhdGlvblxuICAgICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5pbXBvcnQge1xuICBDcmVhdGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlLFxuICBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSxcbiAgQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0LFxuICBEb21haW5UZW1wbGF0ZURhdGEsXG4gIERvbWFpblRlbXBsYXRlc1F1ZXJ5LFxuICBEb21haW5UZW1wbGF0ZVVwZGF0ZURhdGEsXG4gIERvbWFpblRlbXBsYXRlVXBkYXRlVmVyc2lvbkRhdGEsXG4gIERvbWFpblRlbXBsYXRlVmVyc2lvbkRhdGEsXG4gIEdldERvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UsXG4gIExpc3REb21haW5UZW1wbGF0ZXNBUElSZXNwb25zZSxcbiAgTGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdCxcbiAgTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNBUElSZXNwb25zZSxcbiAgTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQsXG4gIE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlLFxuICBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQsXG4gIE5vdGlmaWNhdGlvbkFQSVJlc3BvbnNlLFxuICBOb3RpZmljYXRpb25SZXN1bHQsXG4gIFNob3J0VGVtcGxhdGVWZXJzaW9uLFxuICBUZW1wbGF0ZVF1ZXJ5LFxuICBUZW1wbGF0ZVZlcnNpb24sXG4gIFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSxcbiAgVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdFxufSBmcm9tICcuLi8uLi9UeXBlcy9Eb21haW5zJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4uL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCB7IElEb21haW5UZW1wbGF0ZSwgSURvbWFpblRlbXBsYXRlc0NsaWVudCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvRG9tYWlucyc7XG5cbmV4cG9ydCBjbGFzcyBEb21haW5UZW1wbGF0ZUl0ZW0gaW1wbGVtZW50cyBJRG9tYWluVGVtcGxhdGUge1xuICBuYW1lIDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbiA6IHN0cmluZztcbiAgY3JlYXRlZEF0IDogRGF0ZSB8ICcnO1xuICBjcmVhdGVkQnkgOiBzdHJpbmc7XG4gIGlkIDogc3RyaW5nO1xuICB2ZXJzaW9uPzogVGVtcGxhdGVWZXJzaW9uO1xuICB2ZXJzaW9ucz86IFNob3J0VGVtcGxhdGVWZXJzaW9uW107XG5cbiAgY29uc3RydWN0b3IoZG9tYWluVGVtcGxhdGVGcm9tQVBJOiBJRG9tYWluVGVtcGxhdGUpIHtcbiAgICB0aGlzLm5hbWUgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmNyZWF0ZWRBdCA/IG5ldyBEYXRlKGRvbWFpblRlbXBsYXRlRnJvbUFQSS5jcmVhdGVkQXQpIDogJyc7XG4gICAgdGhpcy5jcmVhdGVkQnkgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuY3JlYXRlZEJ5O1xuICAgIHRoaXMuaWQgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuaWQ7XG5cbiAgICBpZiAoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb24pIHtcbiAgICAgIHRoaXMudmVyc2lvbiA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uO1xuICAgICAgaWYgKGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uLmNyZWF0ZWRBdCkge1xuICAgICAgICB0aGlzLnZlcnNpb24uY3JlYXRlZEF0ID0gbmV3IERhdGUoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb24uY3JlYXRlZEF0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb25zICYmIGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmVyc2lvbnMgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbnMubWFwKCh2ZXJzaW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHsgLi4udmVyc2lvbiB9O1xuICAgICAgICByZXN1bHQuY3JlYXRlZEF0ID0gbmV3IERhdGUodmVyc2lvbi5jcmVhdGVkQXQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpblRlbXBsYXRlc0NsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8TGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdD5cbiAgaW1wbGVtZW50cyBJRG9tYWluVGVtcGxhdGVzQ2xpZW50IHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHN1cGVyKHJlcXVlc3QpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5iYXNlUm91dGUgPSAnL3YzLyc7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQ3JlYXRpb25SZXNwb25zZShkYXRhOiBDcmVhdGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKTogSURvbWFpblRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IERvbWFpblRlbXBsYXRlSXRlbShkYXRhLmJvZHkudGVtcGxhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUNyZWF0aW9uVmVyc2lvblJlc3BvbnNlKFxuICAgIGRhdGE6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlXG4gICk6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0OiBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQgPSB7fSBhcyBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ7XG4gICAgcmVzdWx0LnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHJlc3VsdC5tZXNzYWdlID0gZGF0YS5ib2R5Lm1lc3NhZ2U7XG4gICAgaWYgKGRhdGEuYm9keSAmJiBkYXRhLmJvZHkudGVtcGxhdGUpIHtcbiAgICAgIHJlc3VsdC50ZW1wbGF0ZSA9IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0oZGF0YS5ib2R5LnRlbXBsYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VNdXRhdGlvblJlc3BvbnNlKFxuICAgIGRhdGE6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZVxuICApOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQgPSB7fSBhcyBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIGlmIChkYXRhLmJvZHkgJiYgZGF0YS5ib2R5LnRlbXBsYXRlKSB7XG4gICAgICByZXN1bHQudGVtcGxhdGVOYW1lID0gZGF0YS5ib2R5LnRlbXBsYXRlLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTm90aWZpY2F0aW9uUmVzcG9uc2UoZGF0YTogTm90aWZpY2F0aW9uQVBJUmVzcG9uc2UpOiBOb3RpZmljYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdDogTm90aWZpY2F0aW9uUmVzdWx0ID0ge30gYXMgTm90aWZpY2F0aW9uUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UoXG4gICAgZGF0YTogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2VcbiAgKTogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCA9IHt9IGFzIE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdDtcbiAgICByZXN1bHQuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBkYXRhLmJvZHkubWVzc2FnZTtcbiAgICBpZiAoZGF0YS5ib2R5LnRlbXBsYXRlKSB7XG4gICAgICByZXN1bHQudGVtcGxhdGVOYW1lID0gZGF0YS5ib2R5LnRlbXBsYXRlLm5hbWU7XG4gICAgICByZXN1bHQudGVtcGxhdGVWZXJzaW9uID0geyB0YWc6IGRhdGEuYm9keS50ZW1wbGF0ZS52ZXJzaW9uLnRhZyB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChyZXNwb25zZTogTGlzdERvbWFpblRlbXBsYXRlc0FQSVJlc3BvbnNlKTogTGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQ7XG5cbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoKGQ6IElEb21haW5UZW1wbGF0ZSkgPT4gbmV3IERvbWFpblRlbXBsYXRlSXRlbShkKSk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAncCcpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTGlzdFRlbXBsYXRlVmVyc2lvbnMoXG4gICAgcmVzcG9uc2U6IExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zQVBJUmVzcG9uc2VcbiAgKTogTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc1Jlc3VsdDtcblxuICAgIGRhdGEudGVtcGxhdGUgPSBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKHJlc3BvbnNlLmJvZHkudGVtcGxhdGUpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ3AnKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdChkb21haW46IHN0cmluZywgcXVlcnk/OiBEb21haW5UZW1wbGF0ZXNRdWVyeSk6IFByb21pc2U8TGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMnKSwgcXVlcnkpO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nLCB0ZW1wbGF0ZU5hbWU6IHN0cmluZywgcXVlcnk/OiBUZW1wbGF0ZVF1ZXJ5KTogUHJvbWlzZTxJRG9tYWluVGVtcGxhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEdldERvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0ocmVzLmJvZHkudGVtcGxhdGUpXG4gICAgICApO1xuICB9XG5cbiAgY3JlYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IERvbWFpblRlbXBsYXRlRGF0YVxuICApOiBQcm9taXNlPElEb21haW5UZW1wbGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzJyksIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBDcmVhdGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlQ3JlYXRpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIHVwZGF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZVVwZGF0ZURhdGFcbiAgKTogUHJvbWlzZTxVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUpLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTXV0YXRpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGRlc3Ryb3koZG9tYWluOiBzdHJpbmcsIHRlbXBsYXRlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUpKVxuICAgICAgLnRoZW4oKHJlczogVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTXV0YXRpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGRlc3Ryb3lBbGwoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPE5vdGlmaWNhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMnKSlcbiAgICAgIC50aGVuKChyZXM6IE5vdGlmaWNhdGlvbkFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTm90aWZpY2F0aW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBsaXN0VmVyc2lvbnMoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBEb21haW5UZW1wbGF0ZXNRdWVyeVxuICApOiBQcm9taXNlPExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc0FQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTGlzdFRlbXBsYXRlVmVyc2lvbnMocmVzKVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFZlcnNpb24oZG9tYWluOiBzdHJpbmcsIHRlbXBsYXRlTmFtZTogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8SURvbWFpblRlbXBsYXRlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUsICcvdmVyc2lvbnMvJywgdGFnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBHZXREb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKHJlcy5ib2R5LnRlbXBsYXRlKVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVZlcnNpb24oXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVWZXJzaW9uRGF0YVxuICApOiBQcm9taXNlPENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucycpLCBkYXRhKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlQ3JlYXRpb25WZXJzaW9uUmVzcG9uc2UocmVzKVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVZlcnNpb24oXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgdGFnOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVVcGRhdGVWZXJzaW9uRGF0YVxuICApOiBQcm9taXNlPE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zLycsIHRhZyksIGRhdGEpXG4gICAgICAudGhlbihcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgKHJlczogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZShyZXMpXG4gICAgICApO1xuICB9XG5cbiAgZGVzdHJveVZlcnNpb24oXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgdGFnOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucy8nLCB0YWcpKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgIC50aGVuKChyZXM6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCB7IElEb21haW5UcmFja2luZ0NsaWVudCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgQ2xpY2tUcmFja2luZ0luZm8sXG4gIERvbWFpblRyYWNraW5nRGF0YSxcbiAgRG9tYWluVHJhY2tpbmdSZXNwb25zZSxcbiAgR2VuZXJhdGVEb21haW5UcmFja2luZ0NlcnRpZmljYXRlUmVzcG9uc2UsXG4gIEdldERvbWFpblRyYWNraW5nQ2VydGlmaWNhdGVSZXNwb25zZSxcbiAgT3BlblRyYWNraW5nSW5mbyxcbiAgUmVnZW5lcmF0ZURvbWFpblRyYWNraW5nQ2VydGlmaWNhdGVSZXNwb25zZSxcbiAgVW5zdWJzY3JpYmVUcmFja2luZ0luZm8sXG4gIFVwZGF0ZURvbWFpblRyYWNraW5nUmVzcG9uc2UsXG4gIFVwZGF0ZWRPcGVuVHJhY2tpbmcsXG59IGZyb20gJy4uLy4uL1R5cGVzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluVHJhY2tpbmdDbGllbnQgaW1wbGVtZW50cyBJRG9tYWluVHJhY2tpbmdDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VUcmFja2luZ1NldHRpbmdzKHJlc3BvbnNlOiBEb21haW5UcmFja2luZ1Jlc3BvbnNlKTogRG9tYWluVHJhY2tpbmdEYXRhIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keS50cmFja2luZztcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlVHJhY2tpbmdVcGRhdGUocmVzcG9uc2U6IFVwZGF0ZURvbWFpblRyYWNraW5nUmVzcG9uc2UpOiBVcGRhdGVkT3BlblRyYWNraW5nIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzT3BlblRyYWNraW5nSW5mb1dpdFBsYWNlKG9iajogdW5rbm93bik6IG9iaiBpcyBPcGVuVHJhY2tpbmdJbmZvIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgJ3BsYWNlX2F0X3RoZV90b3AnIGluIChvYmogYXMgT3BlblRyYWNraW5nSW5mbyk7XG4gIH1cblxuICBhc3luYyBnZXQoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPEdldERvbWFpblRyYWNraW5nQ2VydGlmaWNhdGVSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldChgL3YyL3g1MDkvJHtkb21haW59L3N0YXR1c2ApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHksXG4gICAgICByZXNwb25zZVN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1c1xuICAgIH07XG4gIH1cblxuICBhc3luYyBnZW5lcmF0ZShkb21haW46IHN0cmluZyk6IFByb21pc2U8R2VuZXJhdGVEb21haW5UcmFja2luZ0NlcnRpZmljYXRlUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0KGAvdjIveDUwOS8ke2RvbWFpbn1gKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzcG9uc2UuYm9keSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2VuZXJhdGUoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPFJlZ2VuZXJhdGVEb21haW5UcmFja2luZ0NlcnRpZmljYXRlUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wdXQoYC92Mi94NTA5LyR7ZG9tYWlufWApO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNwb25zZS5ib2R5LFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0VHJhY2tpbmcoZG9tYWluOiBzdHJpbmcpIDogUHJvbWlzZTxEb21haW5UcmFja2luZ0RhdGE+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd0cmFja2luZycpKTtcbiAgICByZXR1cm4gdGhpcy5fcGFyc2VUcmFja2luZ1NldHRpbmdzKHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVRyYWNraW5nKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBkYXRhOiBPcGVuVHJhY2tpbmdJbmZvIHwgQ2xpY2tUcmFja2luZ0luZm8gfCBVbnN1YnNjcmliZVRyYWNraW5nSW5mb1xuICApOiBQcm9taXNlPFVwZGF0ZWRPcGVuVHJhY2tpbmc+IHtcbiAgICBjb25zdCBwcmVwYXJlZERhdGE6IE9wZW5UcmFja2luZ0luZm8gfCBDbGlja1RyYWNraW5nSW5mbyB8IFVuc3Vic2NyaWJlVHJhY2tpbmdJbmZvID0ge1xuICAgICAgLi4uZGF0YVxuICAgIH07XG4gICAgaWYgKHR5cGVvZiBkYXRhPy5hY3RpdmUgPT09ICdib29sZWFuJykge1xuICAgICAgcHJlcGFyZWREYXRhLmFjdGl2ZSA9IChkYXRhPy5hY3RpdmUpID8gJ3llcycgOiAnbm8nO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc09wZW5UcmFja2luZ0luZm9XaXRQbGFjZShkYXRhKSkge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhPy5wbGFjZV9hdF90aGVfdG9wID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgKHByZXBhcmVkRGF0YSBhcyBPcGVuVHJhY2tpbmdJbmZvKS5wbGFjZV9hdF90aGVfdG9wID0gKGRhdGE/LnBsYWNlX2F0X3RoZV90b3ApID8gJ3llcycgOiAnbm8nO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd0cmFja2luZycsIHR5cGUpLCBwcmVwYXJlZERhdGEpO1xuICAgIHJldHVybiB0aGlzLl9wYXJzZVRyYWNraW5nVXBkYXRlKHJlc3BvbnNlIGFzIFVwZGF0ZURvbWFpblRyYWNraW5nUmVzcG9uc2UpO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCB7XG4gIEV2ZW50c0xpc3QsXG4gIEV2ZW50c1F1ZXJ5LFxuICBFdmVudHNSZXNwb25zZSxcbn0gZnJvbSAnLi4vVHlwZXMvRXZlbnRzJztcblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQgeyBJRXZlbnRDbGllbnQgfSBmcm9tICcuLi9JbnRlcmZhY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRDbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPEV2ZW50c0xpc3Q+XG4gIGltcGxlbWVudHMgSUV2ZW50Q2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QoXG4gICAgcmVzcG9uc2U6IEV2ZW50c1Jlc3BvbnNlLFxuICApOiBFdmVudHNMaXN0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgRXZlbnRzTGlzdDtcbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcztcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnLycpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgZ2V0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IEV2ZW50c1F1ZXJ5KSA6IFByb21pc2U8RXZlbnRzTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKHVybGpvaW4oJy92MycsIGRvbWFpbiwgJ2V2ZW50cycpLCBxdWVyeSk7XG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9jb21tb24vUmVxdWVzdCc7XG5cbmltcG9ydCB7XG4gIElwUG9vbENyZWF0ZURhdGEsXG4gIElwUG9vbENyZWF0ZVJlc3BvbnNlLFxuICBJcFBvb2xDcmVhdGVSZXN1bHQsXG4gIElwUG9vbERlbGV0ZURhdGEsXG4gIElwUG9vbExpc3RSZXNwb25zZSxcbiAgSXBQb29sTGlzdFJlc3VsdCxcbiAgSXBQb29sTWVzc2FnZVJlc3BvbnNlLFxuICBJcFBvb2xNZXNzYWdlUmVzdWx0LFxuICBJcFBvb2xVcGRhdGVEYXRhLFxufSBmcm9tICcuLi9UeXBlcy9JUFBvb2xzJztcbmltcG9ydCB7IElJUFBvb2xzQ2xpZW50IH0gZnJvbSAnLi4vSW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwUG9vbHNDbGllbnQgaW1wbGVtZW50cyBJSVBQb29sc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBsaXN0KCk6IFByb21pc2U8SXBQb29sTGlzdFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjEvaXBfcG9vbHMnKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBJcFBvb2xMaXN0UmVzcG9uc2UpID0+IHRoaXMucGFyc2VJcFBvb2xzUmVzcG9uc2UocmVzcG9uc2UpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShkYXRhOiBJcFBvb2xDcmVhdGVEYXRhKTogUHJvbWlzZTxJcFBvb2xDcmVhdGVSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZTogSXBQb29sQ3JlYXRlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3YxL2lwX3Bvb2xzJywgZGF0YSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBhc3luYyB1cGRhdGUocG9vbElkOiBzdHJpbmcsIGRhdGE6IElwUG9vbFVwZGF0ZURhdGEpOiBQcm9taXNlPElwUG9vbE1lc3NhZ2VSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZTogSXBQb29sTWVzc2FnZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBhdGNoV2l0aEZEKGAvdjEvaXBfcG9vbHMvJHtwb29sSWR9YCwgZGF0YSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWxldGUocG9vbElkOiBzdHJpbmcsIGRhdGE6IElwUG9vbERlbGV0ZURhdGEpOiBQcm9taXNlPElwUG9vbE1lc3NhZ2VSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZTpJcFBvb2xNZXNzYWdlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjEvaXBfcG9vbHMvJHtwb29sSWR9YCwgZGF0YSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSXBQb29sc1Jlc3BvbnNlKHJlc3BvbnNlOiBJcFBvb2xMaXN0UmVzcG9uc2UpOiBJcFBvb2xMaXN0UmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IE1nUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IElwRGF0YSwgSVBzTGlzdFF1ZXJ5LCBJcHNMaXN0UmVzcG9uc2VCb2R5IH0gZnJvbSAnLi4vVHlwZXMvSVBzJztcbmltcG9ydCB7IElJUHNDbGllbnQgfSBmcm9tICcuLi9JbnRlcmZhY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBzQ2xpZW50IGltcGxlbWVudHMgSUlQc0NsaWVudCB7XG4gIHJlcXVlc3Q6IE1nUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBNZ1JlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgYXN5bmMgbGlzdChxdWVyeT86IElQc0xpc3RRdWVyeSk6IFByb21pc2U8SXBzTGlzdFJlc3BvbnNlQm9keT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCgnL3YzL2lwcycsIHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUlwc1Jlc3BvbnNlPElwc0xpc3RSZXNwb25zZUJvZHk+KHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGdldChpcDogc3RyaW5nKTogUHJvbWlzZTxJcERhdGE+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92My9pcHMvJHtpcH1gKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUlwc1Jlc3BvbnNlPElwRGF0YT4ocmVzcG9uc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlwc1Jlc3BvbnNlPFQ+KHJlc3BvbnNlOiB7IGJvZHk6IFQgfSk6IFQge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG59XG4iLCJpbXBvcnQgeyBJSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0FwaVJlc3BvbnNlLFxuICBJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzUmVzdWx0LFxuICBJbmJveFBsYWNlbWVudHNWYWx1ZXNBcGlSZXNwb25zZSxcbiAgSW5ib3hQbGFjZW1lbnRzVmFsdWVzUmVzdWx0XG59IGZyb20gJy4uLy4uL1R5cGVzL0luYm94UGxhY2VtZW50cyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQgaW1wbGVtZW50cyBJSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHBhdGg6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXF1ZXN0OiBSZXF1ZXN0LFxuICAgIHBhdGg6IHN0cmluZ1xuICApIHtcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBhc3luYyBsaXN0KCk6IFByb21pc2U8SW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc1Jlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCh0aGlzLnBhdGgpIGFzIEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNBcGlSZXNwb25zZTtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHJlc3BvbnNlLmJvZHkuaXRlbXMsXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICB9IGFzIEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNSZXN1bHQ7XG4gIH1cblxuICBhc3luYyBnZXQoYXR0cmlidXRlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxJbmJveFBsYWNlbWVudHNWYWx1ZXNSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYCR7dGhpcy5wYXRofS8ke2F0dHJpYnV0ZU5hbWV9YCkgYXMgSW5ib3hQbGFjZW1lbnRzVmFsdWVzQXBpUmVzcG9uc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHksXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c1xuICAgIH07XG4gIH1cbn1cbiIsImltcG9ydCB7IEluYm94UGxhY2VtZW50c0ZpbHRlcnNBcGlSZXNwb25zZSwgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc1Jlc3VsdCB9IGZyb20gJy4uLy4uL1R5cGVzL0luYm94UGxhY2VtZW50cyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQgeyBJSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50IGltcGxlbWVudHMgSUluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwYXRoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVxdWVzdDogUmVxdWVzdCxcbiAgICBwYXRoOiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICB9XG5cbiAgYXN5bmMgbGlzdCgpOiBQcm9taXNlPEluYm94UGxhY2VtZW50c0ZpbHRlcnNSZXN1bHQ+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KHRoaXMucGF0aCkgYXMgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0FwaVJlc3BvbnNlO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICBzdXBwb3J0ZWRfZmlsdGVyczogcmVzdWx0LmJvZHkuc3VwcG9ydGVkX2ZpbHRlcnNcbiAgICB9O1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBJSVBSU2hhcmluZ0NsaWVudCxcbiAgSUluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQsXG4gIElJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50LFxuICBJSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudCxcbiAgSUxvZ2dlclxufSBmcm9tICcuLi8uLi8uLi9JbnRlcmZhY2VzJztcblxuaW1wb3J0IHtcbiAgSW5ib3hQbGFjZW1lbnRzQm94LFxuICBJbmJveFBsYWNlbWVudHNEZXN0cm95QVBJUmVzcG9uc2UsXG4gIEluYm94UGxhY2VtZW50c0Rlc3Ryb3lSZXN1bHQsXG4gIEluYm94UGxhY2VtZW50c1Jlc3VsdCxcbiAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0QVBJUmVzcG9uc2UsXG4gIEluYm94UGxhY2VtZW50c1Jlc3VsdEFQSVNoYXBlLFxuICBJbmJveFBsYWNlbWVudHNSZXN1bHRXaXRoU3RhdHVzLFxuICBJbmJveFBsYWNlbWVudHNSZXN1bHRzQXBpUXVlcnksXG4gIEluYm94UGxhY2VtZW50c1Jlc3VsdHNEYXRlcyxcbiAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0xpc3QsXG4gIEluYm94UGxhY2VtZW50c1Jlc3VsdHNMaXN0QVBJUmVzcG9uc2UsXG4gIEluYm94UGxhY2VtZW50c1Jlc3VsdHNRdWVyeVxufSBmcm9tICcuLi8uLi8uLi9UeXBlcy9JbmJveFBsYWNlbWVudHMnO1xuXG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuLi8uLi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi8uLi9jb21tb24vUmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPEluYm94UGxhY2VtZW50c1Jlc3VsdHNMaXN0PlxuICBpbXBsZW1lbnRzIElJbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcHVibGljIGF0dHJpYnV0ZXM6IElJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50O1xuICBwdWJsaWMgZmlsdGVyczogSUluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQ7XG4gIHB1YmxpYyBzaGFyaW5nOiBJSVBSU2hhcmluZ0NsaWVudDtcbiAgcHJpdmF0ZSBsb2dnZXI6IElMb2dnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVxdWVzdDogUmVxdWVzdCxcbiAgICBhdHRyaWJ1dGVzOiBJSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudCxcbiAgICBmaWx0ZXJzOiBJSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCxcbiAgICBzaGFyaW5nOiBJSVBSU2hhcmluZ0NsaWVudCxcbiAgICBsb2dnZXI6IElMb2dnZXIgPSBjb25zb2xlXG4gICkge1xuICAgIHN1cGVyKHJlcXVlc3QpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcztcbiAgICB0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzO1xuICAgIHRoaXMuc2hhcmluZyA9IHNoYXJpbmc7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnREYXRlVG9VVEMoa2V5OnN0cmluZywgaW5wdXREYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAvKlxuICAgICAgQmVjYXVzZSBcIm5ldyBEYXRlKCcyMDIyLTEyLTI1VDAwOjAwOjAwLjAwMFonKVwiIGJlY29tZXMgXCJTdW4gRGVjIDI1IDIwMjIgMDI6MDA6MDAgR01UKzAyMDBcIlxuICAgICAgKHBsdXMgMiBob3VycyBmcm9tIHRoZSB0aW1lem9uZSlcbiAgICAgIGFuZCBiZWNhdXNlIGZvciBBUEksIHdlIG5lZWQgdG8gcHJvdmlkZSB0aGUgZGF0ZSBpbiB0aGUgZXhwZWN0ZWQgZm9ybWF0XG4gICAgICBleDogJ1RodSwgMTMgT2N0IDIwMTEgMTg6MDI6MDAgKzAwMDAnLlxuICAgICAgSGVyZSB3ZSB0cnkgYXV0by1jb252ZXJ0IHRoZW0gdG8gVVRDXG4gICAgKi9cbiAgICB0aGlzLmxvZ2dlci53YXJuKGBEYXRlOiBcIiR7aW5wdXREYXRlfVwiIHdhcyBhdXRvLWNvbnZlcnRlZCB0byBVVEMgdGltZSB6b25lLlxuVmFsdWUgXCIke2lucHV0RGF0ZS50b0lTT1N0cmluZygpfVwiIHdpbGwgYmUgdXNlZCBmb3IgcmVxdWVzdC5cbkNvbnNpZGVyIHVzaW5nIHN0cmluZyB0eXBlIGZvciBwcm9wZXJ0eSBcIiR7a2V5fVwiIHRvIGF2b2lkIGF1dG8tY29udmVydGluZ2ApO1xuICAgIHJldHVybiBpbnB1dERhdGUudG9JU09TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVF1ZXJ5RGF0YShcbiAgICBxdWVyeURhdGE6IEluYm94UGxhY2VtZW50c1Jlc3VsdHNRdWVyeVxuICApOiBJbmJveFBsYWNlbWVudHNSZXN1bHRzQXBpUXVlcnkge1xuICAgIGNvbnN0IHByb3BzRm9yUmVwbGFjZW1lbnQgPSBxdWVyeURhdGEgYXMgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0RhdGVzO1xuICAgIGNvbnN0IHJlcGxhY2VkUHJvcHMgPSBPYmplY3Qua2V5cyhwcm9wc0ZvclJlcGxhY2VtZW50KS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBjb25zdCBwcm9wID0ga2V5IGFzIGtleW9mIEluYm94UGxhY2VtZW50c1Jlc3VsdHNEYXRlcztcbiAgICAgIGlmICghIXByb3BzRm9yUmVwbGFjZW1lbnRbcHJvcF0gJiYgdHlwZW9mIHByb3BzRm9yUmVwbGFjZW1lbnRbcHJvcF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlEYXRhW3Byb3BdIGFzIERhdGU7XG4gICAgICAgIGFjY1twcm9wXSA9IHRoaXMuY29udmVydERhdGVUb1VUQyhwcm9wLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxrZXlvZiBJbmJveFBsYWNlbWVudHNSZXN1bHRzRGF0ZXMsIHN0cmluZz4pO1xuXG4gICAgY29uc3QgcmVzdWx0OiBJbmJveFBsYWNlbWVudHNSZXN1bHRzQXBpUXVlcnkgPSB7XG4gICAgICAuLi5xdWVyeURhdGEsXG4gICAgICAuLi5yZXBsYWNlZFByb3BzXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlSW5ib3hQbGFjZW1lbnRzUmVzdWx0KGRhdGE6IEluYm94UGxhY2VtZW50c1Jlc3VsdEFQSVNoYXBlKTogSW5ib3hQbGFjZW1lbnRzUmVzdWx0IHtcbiAgICBsZXQgYm94ID0ge30gYXMgSW5ib3hQbGFjZW1lbnRzQm94O1xuXG4gICAgY29uc3QgaGFuZGxlZFNlZWRMaXN0RGF0ZXMgPSB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpLFxuICAgICAgdXBkYXRlZF9hdDogbmV3IERhdGUoZGF0YS51cGRhdGVkX2F0KSxcbiAgICAgIHNoYXJpbmdfZXhwaXJlc19hdDogbmV3IERhdGUoZGF0YS5zaGFyaW5nX2V4cGlyZXNfYXQpLFxuICAgIH07XG5cbiAgICBpZiAoZGF0YS5Cb3gpIHtcbiAgICAgIGJveCA9IHtcbiAgICAgICAgLi4uZGF0YS5Cb3gsXG4gICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKGRhdGEuQm94LmNyZWF0ZWRfYXQpLFxuICAgICAgICB1cGRhdGVkX2F0OiBuZXcgRGF0ZShkYXRhLkJveC51cGRhdGVkX2F0KSxcbiAgICAgICAgbGFzdF9yZXN1bHRfYXQ6IG5ldyBEYXRlKGRhdGEuQm94Lmxhc3RfcmVzdWx0X2F0KSxcbiAgICAgIH07XG4gICAgICBkZWxldGUgKGJveCBhcyB7SUQ/OiBzdHJpbmd9KS5JRDtcbiAgICB9XG5cbiAgICBjb25zdCBpbmJveFBsYWNlbWVudHNSZXN1bHQ6IEluYm94UGxhY2VtZW50c1Jlc3VsdCA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICBCb3g6IGJveCxcbiAgICAgIC4uLmhhbmRsZWRTZWVkTGlzdERhdGVzLFxuICAgICAgaWQ6IGRhdGEuSWQsXG4gICAgfTtcblxuICAgIGRlbGV0ZSAoaW5ib3hQbGFjZW1lbnRzUmVzdWx0IGFzIHtJRD86IHN0cmluZ30pLklEO1xuXG4gICAgcmV0dXJuIGluYm94UGxhY2VtZW50c1Jlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QocmVzcG9uc2U6IEluYm94UGxhY2VtZW50c1Jlc3VsdHNMaXN0QVBJUmVzcG9uc2UpOiBJbmJveFBsYWNlbWVudHNSZXN1bHRzTGlzdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIEluYm94UGxhY2VtZW50c1Jlc3VsdHNMaXN0O1xuXG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXMubWFwKFxuICAgICAgKGl0ZW06IEluYm94UGxhY2VtZW50c1Jlc3VsdEFQSVNoYXBlKVxuICAgICAgICA6IEluYm94UGxhY2VtZW50c1Jlc3VsdCA9PiB0aGlzLnByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHQoaXRlbSlcbiAgICApO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ2FkZHJlc3MnKTtcbiAgICBkYXRhLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdChxdWVyeTogSW5ib3hQbGFjZW1lbnRzUmVzdWx0c1F1ZXJ5KTogUHJvbWlzZTxJbmJveFBsYWNlbWVudHNSZXN1bHRzTGlzdD4ge1xuICAgIGNvbnN0IHF1ZXJ5RGF0YSA9IHRoaXMucHJlcGFyZVF1ZXJ5RGF0YShxdWVyeSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KCcvdjQvaW5ib3gvcmVzdWx0cycsIHF1ZXJ5RGF0YSkgYXMgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0xpc3RBUElSZXNwb25zZTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUxpc3QocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPEluYm94UGxhY2VtZW50c1Jlc3VsdFdpdGhTdGF0dXM+IHtcbiAgICBjb25zdCByZXNwb25zZTogSW5ib3hQbGFjZW1lbnRzUmVzdWx0QVBJUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KGAvdjQvaW5ib3gvcmVzdWx0cy8ke2lkfWApIGFzIEluYm94UGxhY2VtZW50c1Jlc3VsdEFQSVJlc3BvbnNlO1xuICAgIGNvbnN0IGluYm94UGxhY2VtZW50UmVzdWx0OiBJbmJveFBsYWNlbWVudHNSZXN1bHQgPSB0aGlzLnByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHQoXG4gICAgICByZXNwb25zZS5ib2R5LnJlc3VsdFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgaW5ib3hQbGFjZW1lbnRSZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveShpZDogc3RyaW5nKSA6IFByb21pc2U8SW5ib3hQbGFjZW1lbnRzRGVzdHJveVJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3Y0L2luYm94L3Jlc3VsdHMvJHtpZH1gKSBhcyBJbmJveFBsYWNlbWVudHNEZXN0cm95QVBJUmVzcG9uc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRSZXN1bHRCeVNoYXJlSWQoc2hhcmVJZDogc3RyaW5nKTogUHJvbWlzZTxJbmJveFBsYWNlbWVudHNSZXN1bHRXaXRoU3RhdHVzPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KGAvdjQvaW5ib3gvc2hhcmluZy9wdWJsaWMvJHtzaGFyZUlkfWApIGFzIEluYm94UGxhY2VtZW50c1Jlc3VsdEFQSVJlc3BvbnNlO1xuICAgIGNvbnN0IGluYm94UGxhY2VtZW50UmVzdWx0OiBJbmJveFBsYWNlbWVudHNSZXN1bHQgPSB0aGlzLnByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHQoXG4gICAgICByZXNwb25zZS5ib2R5LnJlc3VsdFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgaW5ib3hQbGFjZW1lbnRSZXN1bHRcbiAgICB9O1xuICB9XG59XG4iLCJpbXBvcnQgeyBJSVBSU2hhcmluZ0NsaWVudCB9IGZyb20gJy4uLy4uLy4uL0ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgSVBSU2hhcmluZ0FQSVJlc3BvbnNlLFxuICBJUFJTaGFyaW5nQXBpU2hhcGUsXG4gIElQUlNoYXJpbmdSZXN1bHQsXG4gIElQUlNoYXJpbmdVcGRhdGVBUElSZXNwb25zZSxcbiAgSVBSU2hhcmluZ1VwZGF0ZURhdGEsXG4gIElQUlNoYXJpbmdVcGRhdGVSZXN1bHRcbn0gZnJvbSAnLi4vLi4vLi4vVHlwZXMvSW5ib3hQbGFjZW1lbnRzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uLy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSVBSU2hhcmluZ0NsaWVudCBpbXBsZW1lbnRzIElJUFJTaGFyaW5nQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXF1ZXN0OiBSZXF1ZXN0LFxuICApIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlSW5ib3hQbGFjZW1lbnRzUmVzdWx0U2hhcmluZyhkYXRhOiBJUFJTaGFyaW5nQXBpU2hhcGUpOiBJUFJTaGFyaW5nUmVzdWx0IHtcbiAgICBjb25zdCBoYW5kbGVkU2VlZExpc3REYXRlcyA9IHtcbiAgICAgIGV4cGlyZXNfYXQ6IG5ldyBEYXRlKGRhdGEuZXhwaXJlc19hdCksXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdDogSVBSU2hhcmluZ1Jlc3VsdCA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICAuLi5oYW5kbGVkU2VlZExpc3REYXRlc1xuICAgIH07XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPElQUlNoYXJpbmdSZXN1bHQgJiB7c3RhdHVzOiBudW1iZXJ9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KGAvdjQvaW5ib3gvc2hhcmluZy8ke2lkfWApIGFzIElQUlNoYXJpbmdBUElSZXNwb25zZTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHRTaGFyaW5nKHJlc3BvbnNlLmJvZHkuc2hhcmluZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShcbiAgICBpZDogc3RyaW5nLFxuICAgIGRhdGE6IElQUlNoYXJpbmdVcGRhdGVEYXRhXG4gICk6IFByb21pc2U8SVBSU2hhcmluZ1VwZGF0ZVJlc3VsdCAmIHsgc3RhdHVzOiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnB1dChgL3Y0L2luYm94L3NoYXJpbmcvJHtpZH1gLCB7fSwgeyBxdWVyeTogYGVuYWJsZWQ9JHtkYXRhLmVuYWJsZWR9YCB9KSBhcyBJUFJTaGFyaW5nVXBkYXRlQVBJUmVzcG9uc2U7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wcmVwYXJlSW5ib3hQbGFjZW1lbnRzUmVzdWx0U2hhcmluZyhyZXNwb25zZS5ib2R5LnNoYXJpbmcpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXN1bHQsXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c1xuICAgIH07XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIElMb2dnZXIsXG4gIElJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50LFxuICBJU2VlZHNMaXN0c0NsaWVudCxcbiAgSUluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnRcbn0gZnJvbSAnLi4vLi4vLi4vSW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICBTZWVkTGlzdCxcbiAgU2VlZExpc3RBUElTaGFwZSxcbiAgU2VlZHNMaXN0c0FQSVF1ZXJ5LFxuICBTZWVkc0xpc3RzQVBJUXVlcnlEYXRlcyxcbiAgU2VlZHNMaXN0c0FQSVJlc3BvbnNlLFxuICBTZWVkc0xpc3RzQ3JlYXRpbmdEYXRhLFxuICBTZWVkc0xpc3RzUXVlcnksXG4gIFNlZWRzTGlzdHNSZXN1bHQsXG4gIFNlZWQsXG4gIFNlZWRBUElTaGFwZSxcbiAgU2VlZHNMaXN0c0Rlc3Ryb3lBcGlSZXNwb25zZSxcbiAgU2VlZHNMaXN0c1VwZGF0aW5nRGF0YSxcbiAgU2VlZExpc3RSZXN1bHQsXG4gIFNlZWRMaXN0R2V0QVBJUmVzcG9uc2UsXG4gIFNlZWRMaXN0QVBJUmVzcG9uc2Vcbn0gZnJvbSAnLi4vLi4vLi4vVHlwZXMvSW5ib3hQbGFjZW1lbnRzJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4uLy4uL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uLy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VlZHNMaXN0c0NsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8U2VlZHNMaXN0c1Jlc3VsdD5cbiAgaW1wbGVtZW50cyBJU2VlZHNMaXN0c0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHB1YmxpYyBhdHRyaWJ1dGVzOiBJSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudDtcbiAgcHVibGljIGZpbHRlcnM6IElJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50O1xuICBwcml2YXRlIGxvZ2dlcjogSUxvZ2dlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXF1ZXN0OiBSZXF1ZXN0LFxuICAgIGF0dHJpYnV0ZXM6IElJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50LFxuICAgIGZpbHRlcnM6IElJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50LFxuICAgIGxvZ2dlcjogSUxvZ2dlciA9IGNvbnNvbGVcbiAgKSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xuICAgIHRoaXMuZmlsdGVycyA9IGZpbHRlcnM7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnREYXRlVG9VVEMoa2V5OnN0cmluZywgaW5wdXREYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAvKlxuICAgICAgQmVjYXVzZSBcIm5ldyBEYXRlKCcyMDIyLTEyLTI1VDAwOjAwOjAwLjAwMFonKVwiIGJlY29tZXMgXCJTdW4gRGVjIDI1IDIwMjIgMDI6MDA6MDAgR01UKzAyMDBcIlxuICAgICAgKHBsdXMgMiBob3VycyBmcm9tIHRoZSB0aW1lem9uZSlcbiAgICAgIGFuZCBiZWNhdXNlIGZvciBBUEksIHdlIG5lZWQgdG8gcHJvdmlkZSB0aGUgZGF0ZSBpbiB0aGUgZXhwZWN0ZWQgZm9ybWF0XG4gICAgICBleDogJ1RodSwgMTMgT2N0IDIwMTEgMTg6MDI6MDAgKzAwMDAnLlxuICAgICAgSGVyZSB3ZSB0cnkgYXV0by1jb252ZXJ0IHRoZW0gdG8gVVRDXG4gICAgKi9cbiAgICB0aGlzLmxvZ2dlci53YXJuKGBEYXRlOiBcIiR7aW5wdXREYXRlfVwiIHdhcyBhdXRvLWNvbnZlcnRlZCB0byBVVEMgdGltZSB6b25lLlxuVmFsdWUgXCIke2lucHV0RGF0ZS50b0lTT1N0cmluZygpfVwiIHdpbGwgYmUgdXNlZCBmb3IgcmVxdWVzdC5cbkNvbnNpZGVyIHVzaW5nIHN0cmluZyB0eXBlIGZvciBwcm9wZXJ0eSBcIiR7a2V5fVwiIHRvIGF2b2lkIGF1dG8tY29udmVydGluZ2ApO1xuICAgIHJldHVybiBpbnB1dERhdGUudG9JU09TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVF1ZXJ5RGF0YShxdWVyeURhdGE6IFNlZWRzTGlzdHNRdWVyeSkgOiBTZWVkc0xpc3RzQVBJUXVlcnkge1xuICAgIGNvbnN0IHByb3BzRm9yUmVwbGFjZW1lbnQgPSBxdWVyeURhdGEgYXMgU2VlZHNMaXN0c0FQSVF1ZXJ5RGF0ZXM7XG4gICAgY29uc3QgcmVwbGFjZWRQcm9wcyA9IE9iamVjdC5rZXlzKHByb3BzRm9yUmVwbGFjZW1lbnQpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHByb3AgPSBrZXkgYXMga2V5b2YgU2VlZHNMaXN0c0FQSVF1ZXJ5RGF0ZXM7XG4gICAgICBpZiAoISFwcm9wc0ZvclJlcGxhY2VtZW50W3Byb3BdICYmIHR5cGVvZiBwcm9wc0ZvclJlcGxhY2VtZW50W3Byb3BdID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5RGF0YVtwcm9wXSBhcyBEYXRlO1xuICAgICAgICBhY2NbcHJvcF0gPSB0aGlzLmNvbnZlcnREYXRlVG9VVEMocHJvcCwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8a2V5b2YgU2VlZHNMaXN0c0FQSVF1ZXJ5RGF0ZXMsIHN0cmluZz4pO1xuXG4gICAgY29uc3QgcmVzdWx0OiBTZWVkc0xpc3RzQVBJUXVlcnkgPSB7XG4gICAgICAuLi5xdWVyeURhdGEsXG4gICAgICAuLi5yZXBsYWNlZFByb3BzXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlUmVzdWx0KGRhdGE6IFNlZWRMaXN0QVBJUmVzcG9uc2UpOiBTZWVkTGlzdFJlc3VsdCB7XG4gICAgbGV0IHJlc3VsdCA9IHt9IGFzIFNlZWRMaXN0UmVzdWx0O1xuICAgIGNvbnN0IHNlZWRMaXN0ID0gdGhpcy5wcmVwYXJlU2VlZExpc3QoZGF0YS5ib2R5KTtcbiAgICByZXN1bHQgPSB7XG4gICAgICAuLi5zZWVkTGlzdCxcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXNcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVTZWVkTGlzdChkYXRhOiBTZWVkTGlzdEFQSVNoYXBlKTogU2VlZExpc3Qge1xuICAgIGxldCBzZWVkczogU2VlZFtdIHwgbnVsbDtcblxuICAgIGNvbnN0IGhhbmRsZWRTZWVkTGlzdERhdGVzID0ge1xuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KSxcbiAgICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKGRhdGEudXBkYXRlZF9hdCksXG4gICAgICBsYXN0X3Jlc3VsdF9hdDogbmV3IERhdGUoZGF0YS5sYXN0X3Jlc3VsdF9hdCksXG4gICAgfTtcblxuICAgIGlmIChkYXRhLlNlZWRzKSB7XG4gICAgICBzZWVkcyA9IGRhdGEuU2VlZHMubWFwKChzZWVkSXRlbTogU2VlZEFQSVNoYXBlKTogU2VlZCA9PiB7XG4gICAgICAgIGxldCBzZWVkID0ge30gYXMgU2VlZDtcbiAgICAgICAgY29uc3QgaGFuZGxlZFNlZWREYXRlcyA9IHtcbiAgICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShzZWVkSXRlbS5jcmVhdGVkX2F0KSxcbiAgICAgICAgICB1cGRhdGVkX2F0OiBuZXcgRGF0ZShzZWVkSXRlbS51cGRhdGVkX2F0KSxcbiAgICAgICAgICBtYXhfZW1haWxfY291bnRfaGl0X2F0OiBuZXcgRGF0ZShzZWVkSXRlbS5tYXhfZW1haWxfY291bnRfaGl0X2F0KSxcbiAgICAgICAgICBsYXN0X3NlbnRfdG9fYXQ6IG5ldyBEYXRlKHNlZWRJdGVtLmxhc3Rfc2VudF90b19hdCksXG4gICAgICAgICAgbGFzdF9kZWxpdmVyZWRfYXQ6IG5ldyBEYXRlKHNlZWRJdGVtLmxhc3RfZGVsaXZlcmVkX2F0KSxcbiAgICAgICAgfTtcbiAgICAgICAgc2VlZCA9IHtcbiAgICAgICAgICAuLi5zZWVkSXRlbSxcbiAgICAgICAgICAuLi5oYW5kbGVkU2VlZERhdGVzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzZWVkO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZWRzID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzZWVkTGlzdDogU2VlZExpc3QgPSB7XG4gICAgICAuLi5kYXRhLFxuICAgICAgU2VlZHM6IHNlZWRzLFxuICAgICAgLi4uaGFuZGxlZFNlZWRMaXN0RGF0ZXNcbiAgICB9O1xuXG4gICAgZGVsZXRlIChzZWVkTGlzdCBhcyB7SWQ/OiBzdHJpbmd9KS5JZDtcblxuICAgIHJldHVybiBzZWVkTGlzdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QocmVzcG9uc2U6IFNlZWRzTGlzdHNBUElSZXNwb25zZSk6IFNlZWRzTGlzdHNSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBpdGVtczogW11cbiAgICB9IGFzIFNlZWRzTGlzdHNSZXN1bHQ7XG5cbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcz8ubWFwKFxuICAgICAgKGl0ZW06IFNlZWRMaXN0QVBJU2hhcGUpOiBTZWVkTGlzdCA9PiB0aGlzLnByZXBhcmVTZWVkTGlzdChpdGVtKVxuICAgICk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAnYWRkcmVzcycpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0KHF1ZXJ5OiBTZWVkc0xpc3RzUXVlcnkpOiBQcm9taXNlPFNlZWRzTGlzdHNSZXN1bHQ+IHtcbiAgICBjb25zdCBxdWVyeURhdGEgPSB0aGlzLnByZXBhcmVRdWVyeURhdGEocXVlcnkpO1xuICAgIGNvbnN0IHJlc3BvbnNlOiBTZWVkc0xpc3RzQVBJUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KCcvdjQvaW5ib3gvc2VlZGxpc3RzJywgcXVlcnlEYXRhKSBhcyBTZWVkc0xpc3RzQVBJUmVzcG9uc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMucGFyc2VMaXN0KHJlc3BvbnNlKSxcbiAgICAgIHN0YXR1czogMjAwXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldChpZDogc3RyaW5nKTogUHJvbWlzZTxTZWVkTGlzdFJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBTZWVkTGlzdEdldEFQSVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldChgL3Y0L2luYm94L3NlZWRsaXN0cy8ke2lkfWApIGFzIFNlZWRMaXN0R2V0QVBJUmVzcG9uc2U7XG4gICAgY29uc3QgdXBkYXRlZFNlZWRzTGlzdCA9IHRoaXMucHJlcGFyZVNlZWRMaXN0KHJlc3BvbnNlLmJvZHkuc2VlZGxpc3QpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi51cGRhdGVkU2VlZHNMaXN0LFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKGRhdGE6IFNlZWRzTGlzdHNDcmVhdGluZ0RhdGEpOiBQcm9taXNlPFNlZWRMaXN0UmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3Y0L2luYm94L3NlZWRsaXN0cycsIGRhdGEpIGFzIFNlZWRMaXN0QVBJUmVzcG9uc2U7XG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZVJlc3VsdChyZXNwb25zZSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGUoaWQ6IHN0cmluZywgZGF0YTogU2VlZHNMaXN0c1VwZGF0aW5nRGF0YSk6IFByb21pc2U8U2VlZExpc3RSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wdXQoYC92NC9pbmJveC9zZWVkbGlzdHMvJHtpZH1gLCBkYXRhKSBhcyBTZWVkTGlzdEFQSVJlc3BvbnNlO1xuICAgIHJldHVybiB0aGlzLnByZXBhcmVSZXN1bHQocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveShpZDogc3RyaW5nKTogUHJvbWlzZTxTZWVkc0xpc3RzRGVzdHJveUFwaVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYC92NC9pbmJveC9zZWVkbGlzdHMvJHtpZH1gKSBhcyB1bmtub3duIGFzIFNlZWRzTGlzdHNEZXN0cm95QXBpUmVzcG9uc2U7XG4gIH1cbn1cbiIsImltcG9ydCB7IElJbmJveFBsYWNlbWVudHNDbGllbnQsIElJbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJU2VlZHNMaXN0c0NsaWVudCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvSW5ib3hQbGFjZW1lbnRzL1NlZWRzTGlzdHMvU2VlZHNMaXN0c0NsaWVudCc7XG5pbXBvcnQgeyBJSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9JbmJveFBsYWNlbWVudHMvcHJvdmlkZXJzL0luYm94UGxhY2VtZW50c1Byb3ZpZGVycyc7XG5pbXBvcnQgeyBJbmJveFBsYWNlbWVudHNEYXRhLCBJbmJveFBsYWNlbWVudHNUZXN0UmVzdWx0LCBJbmJveFBsYWNlbWVudHNUZXN0UmVzdWx0QVBJUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9UeXBlcy9JbmJveFBsYWNlbWVudHMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmJveFBsYWNlbWVudHNDbGllbnQgaW1wbGVtZW50cyBJSW5ib3hQbGFjZW1lbnRzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcHVibGljIHNlZWRzTGlzdHM6IElTZWVkc0xpc3RzQ2xpZW50O1xuICBwdWJsaWMgcmVzdWx0czogSUluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQ7XG4gIHB1YmxpYyBwcm92aWRlcnM6IElJbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVxdWVzdDogUmVxdWVzdCxcbiAgICBzZWVkc0xpc3RzQ2xpZW50OiBJU2VlZHNMaXN0c0NsaWVudCxcbiAgICByZXN1bHRzOiBJSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudCxcbiAgICBwcm92aWRlcnM6IElJbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnRcbiAgKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLnNlZWRzTGlzdHMgPSBzZWVkc0xpc3RzQ2xpZW50O1xuICAgIHRoaXMuc2VlZHNMaXN0cyA9IHNlZWRzTGlzdHNDbGllbnQ7XG4gICAgdGhpcy5yZXN1bHRzID0gcmVzdWx0cztcbiAgICB0aGlzLnByb3ZpZGVycyA9IHByb3ZpZGVycztcbiAgfVxuXG4gIGFzeW5jIHJ1blRlc3QoZGF0YTogSW5ib3hQbGFjZW1lbnRzRGF0YSk6IFByb21pc2U8SW5ib3hQbGFjZW1lbnRzVGVzdFJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3QoJy92NC9pbmJveC90ZXN0cycsIGRhdGEpIGFzIEluYm94UGxhY2VtZW50c1Rlc3RSZXN1bHRBUElSZXNwb25zZTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzcG9uc2UuYm9keSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSUluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudCB9IGZyb20gJy4uLy4uLy4uL0ludGVyZmFjZXMvSW5ib3hQbGFjZW1lbnRzL3Byb3ZpZGVycy9JbmJveFBsYWNlbWVudHNQcm92aWRlcnMnO1xuaW1wb3J0IHtcbiAgSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXIsXG4gIEluYm94UGxhY2VtZW50c1Byb3ZpZGVyQVBJU2hhcGUsXG4gIEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0xpc3QsXG4gIEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0xpc3RBUElSZXNwb25zZVxufSBmcm9tICcuLi8uLi8uLi9UeXBlcy9JbmJveFBsYWNlbWVudHMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnQgaW1wbGVtZW50cyBJSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcGF0aDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICkge1xuICAgIHRoaXMucGF0aCA9ICcvdjQvaW5ib3gvcHJvdmlkZXJzJztcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUxpc3QoXG4gICAgcmVzcG9uc2U6IEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0xpc3RBUElSZXNwb25zZVxuICApOiBJbmJveFBsYWNlbWVudHNQcm92aWRlcnNMaXN0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzTGlzdDtcblxuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcChcbiAgICAgIChpdGVtOiBJbmJveFBsYWNlbWVudHNQcm92aWRlckFQSVNoYXBlKTogSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXIgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVkUHJvdmlkZXJEYXRlcyA9IHtcbiAgICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShpdGVtLmNyZWF0ZWRfYXQpLFxuICAgICAgICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKGl0ZW0udXBkYXRlZF9hdCksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdDogSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXIgPSB7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAuLi5oYW5kbGVkUHJvdmlkZXJEYXRlc1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICk7XG5cbiAgICBkYXRhLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdCgpOiBQcm9taXNlPEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0xpc3Q+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQodGhpcy5wYXRoKSBhcyBJbmJveFBsYWNlbWVudHNQcm92aWRlcnNMaXN0QVBJUmVzcG9uc2U7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VMaXN0KHJlc3BvbnNlKTtcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IE1haWxndW5DbGllbnRPcHRpb25zLCBJbnB1dEZvcm1EYXRhLCBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4uL1R5cGVzJztcblxuaW1wb3J0IERvbWFpbnNDbGllbnQgZnJvbSAnLi9Eb21haW5zL2RvbWFpbnNDbGllbnQnO1xuaW1wb3J0IEV2ZW50Q2xpZW50IGZyb20gJy4vRXZlbnRzJztcbmltcG9ydCBTdGF0c0NsaWVudCBmcm9tICcuL1N0YXRzL1N0YXRzQ2xpZW50JztcbmltcG9ydCBTdXBwcmVzc2lvbkNsaWVudCBmcm9tICcuL1N1cHByZXNzaW9ucy9TdXBwcmVzc2lvbnNDbGllbnQnO1xuaW1wb3J0IFdlYmhvb2tzQ2xpZW50IGZyb20gJy4vV2ViaG9va3MnO1xuaW1wb3J0IE1lc3NhZ2VzQ2xpZW50IGZyb20gJy4vTWVzc2FnZXMnO1xuaW1wb3J0IFJvdXRlc0NsaWVudCBmcm9tICcuL1JvdXRlcyc7XG5pbXBvcnQgVmFsaWRhdGVDbGllbnQgZnJvbSAnLi9WYWxpZGF0aW9ucy92YWxpZGF0ZSc7XG5pbXBvcnQgSXBzQ2xpZW50IGZyb20gJy4vSVBzJztcbmltcG9ydCBJcFBvb2xzQ2xpZW50IGZyb20gJy4vSVBQb29scyc7XG5pbXBvcnQgTWFpbGluZ0xpc3RzQ2xpZW50IGZyb20gJy4vTWFpbGluZ0xpc3RzL21haWxpbmdMaXN0cyc7XG5pbXBvcnQgTWFpbExpc3RzTWVtYmVycyBmcm9tICcuL01haWxpbmdMaXN0cy9tYWlsTGlzdE1lbWJlcnMnO1xuaW1wb3J0IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGZyb20gJy4vRG9tYWlucy9kb21haW5zQ3JlZGVudGlhbHMnO1xuaW1wb3J0IE11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCBmcm9tICcuL1ZhbGlkYXRpb25zL211bHRpcGxlVmFsaWRhdGlvbic7XG5pbXBvcnQgRG9tYWluVGVtcGxhdGVzQ2xpZW50IGZyb20gJy4vRG9tYWlucy9kb21haW5zVGVtcGxhdGVzJztcbmltcG9ydCBEb21haW5UYWdzQ2xpZW50IGZyb20gJy4vRG9tYWlucy9kb21haW5zVGFncyc7XG5pbXBvcnQgU3ViYWNjb3VudHNDbGllbnQgZnJvbSAnLi9TdWJhY2NvdW50cyc7XG5cbmltcG9ydCB7XG4gIElEb21haW5zQ2xpZW50LFxuICBJV2ViSG9va3NDbGllbnQsXG4gIElNYWlsZ3VuQ2xpZW50LFxuICBJTWFpbGluZ0xpc3RzQ2xpZW50LFxuICBJRXZlbnRDbGllbnQsXG4gIElTdGF0c0NsaWVudCxcbiAgSVN1cHByZXNzaW9uQ2xpZW50LFxuICBJTWVzc2FnZXNDbGllbnQsXG4gIElSb3V0ZXNDbGllbnQsXG4gIElWYWxpZGF0aW9uQ2xpZW50LFxuICBJSVBzQ2xpZW50LFxuICBJSVBQb29sc0NsaWVudCxcbiAgSVN1YmFjY291bnRzQ2xpZW50LFxuICBJSW5ib3hQbGFjZW1lbnRzQ2xpZW50LFxufSBmcm9tICcuLi9JbnRlcmZhY2VzJztcbmltcG9ydCBTZWVkc0xpc3RzQ2xpZW50IGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzL1NlZWRzTGlzdHMvU2VlZHNMaXN0c0NsaWVudCc7XG5pbXBvcnQgSW5ib3hQbGFjZW1lbnRzQ2xpZW50IGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzL2luYm94UGxhY2VtZW50cyc7XG5pbXBvcnQgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudCBmcm9tICcuL0luYm94UGxhY2VtZW50cy9SZXN1bHRzL0luYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQnO1xuaW1wb3J0IEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQgZnJvbSAnLi9JbmJveFBsYWNlbWVudHMvQXR0cmlidXRlc0NsaWVudCc7XG5pbXBvcnQgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCBmcm9tICcuL0luYm94UGxhY2VtZW50cy9GaWx0ZXJzQ2xpZW50JztcbmltcG9ydCBJUFJTaGFyaW5nQ2xpZW50IGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzL1Jlc3VsdHMvSW5ib3hQbGFjZW1lbnRzUmVzdWx0c1NoYXJpbmdDbGllbnQnO1xuaW1wb3J0IEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudCBmcm9tICcuL0luYm94UGxhY2VtZW50cy9wcm92aWRlcnMvSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzJztcbmltcG9ydCBNZXRyaWNzQ2xpZW50IGZyb20gJy4vTWV0cmljcy9NZXRyaWNzQ2xpZW50JztcbmltcG9ydCB7IElNZXRyaWNzQ2xpZW50IH0gZnJvbSAnLi4vSW50ZXJmYWNlcy9NZXRyaWNzL01ldHJpY3NDbGllbnQnO1xuaW1wb3J0IERvbWFpblRyYWNraW5nQ2xpZW50IGZyb20gJy4vRG9tYWlucy9kb21haW5zVHJhY2tpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYWlsZ3VuQ2xpZW50IGltcGxlbWVudHMgSU1haWxndW5DbGllbnQge1xuICBwcml2YXRlIHJlcXVlc3Q7XG5cbiAgcHVibGljIGRvbWFpbnM6IElEb21haW5zQ2xpZW50O1xuICBwdWJsaWMgd2ViaG9va3M6IElXZWJIb29rc0NsaWVudDtcbiAgcHVibGljIGV2ZW50czogSUV2ZW50Q2xpZW50O1xuICBwdWJsaWMgc3RhdHM6IElTdGF0c0NsaWVudDtcbiAgcHVibGljIG1ldHJpY3M6IElNZXRyaWNzQ2xpZW50O1xuICBwdWJsaWMgc3VwcHJlc3Npb25zOiBJU3VwcHJlc3Npb25DbGllbnQ7XG4gIHB1YmxpYyBtZXNzYWdlczogSU1lc3NhZ2VzQ2xpZW50O1xuICBwdWJsaWMgcm91dGVzOiBJUm91dGVzQ2xpZW50O1xuICBwdWJsaWMgdmFsaWRhdGU6IElWYWxpZGF0aW9uQ2xpZW50O1xuICBwdWJsaWMgaXBzOiBJSVBzQ2xpZW50O1xuICBwdWJsaWMgaXBfcG9vbHM6IElJUFBvb2xzQ2xpZW50O1xuICBwdWJsaWMgbGlzdHM6IElNYWlsaW5nTGlzdHNDbGllbnQ7XG4gIHB1YmxpYyBzdWJhY2NvdW50czogSVN1YmFjY291bnRzQ2xpZW50O1xuICBwdWJsaWMgaW5ib3hQbGFjZW1lbnRzOiBJSW5ib3hQbGFjZW1lbnRzQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE1haWxndW5DbGllbnRPcHRpb25zLCBmb3JtRGF0YTogSW5wdXRGb3JtRGF0YSkge1xuICAgIGNvbnN0IGNvbmZpZzogUmVxdWVzdE9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfSBhcyBSZXF1ZXN0T3B0aW9ucztcblxuICAgIGlmICghY29uZmlnLnVybCkge1xuICAgICAgY29uZmlnLnVybCA9ICdodHRwczovL2FwaS5tYWlsZ3VuLm5ldCc7XG4gICAgfVxuXG4gICAgaWYgKCFjb25maWcudXNlcm5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIFwidXNlcm5hbWVcIiBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnLmtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgXCJrZXlcIiBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICB0aGlzLnJlcXVlc3QgPSBuZXcgUmVxdWVzdChjb25maWcsIGZvcm1EYXRhKTtcbiAgICBjb25zdCBtYWlsTGlzdHNNZW1iZXJzID0gbmV3IE1haWxMaXN0c01lbWJlcnModGhpcy5yZXF1ZXN0KTtcbiAgICBjb25zdCBkb21haW5DcmVkZW50aWFsc0NsaWVudCA9IG5ldyBEb21haW5DcmVkZW50aWFsc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IGRvbWFpblRlbXBsYXRlc0NsaWVudCA9IG5ldyBEb21haW5UZW1wbGF0ZXNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICBjb25zdCBkb21haW5UYWdzQ2xpZW50ID0gbmV3IERvbWFpblRhZ3NDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICBjb25zdCBkb21haW5UcmFja2luZ0NsaWVudCA9IG5ldyBEb21haW5UcmFja2luZ0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IG11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCA9IG5ldyBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICBjb25zdCBJbmJveFBsYWNlbWVudHNSZXN1bHRzU2hhcmluZ0NsaWVudCA9IG5ldyBJUFJTaGFyaW5nQ2xpZW50KHRoaXMucmVxdWVzdCk7XG5cbiAgICBjb25zdCBzZWVkc0xpc3RzQXR0cmlidXRlcyA9IG5ldyBJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50KHRoaXMucmVxdWVzdCwgJy92NC9pbmJveC9zZWVkbGlzdHMvYScpO1xuICAgIGNvbnN0IHJlc3VsdHNBdHRyaWJ1dGVzQ2xpZW50ID0gbmV3IEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQodGhpcy5yZXF1ZXN0LCAnL3Y0L2luYm94L3Jlc3VsdHMvYScpO1xuXG4gICAgY29uc3Qgc2VlZHNMaXN0c0ZpbHRlcnNDbGllbnQgPSBuZXcgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCh0aGlzLnJlcXVlc3QsICcvdjQvaW5ib3gvc2VlZGxpc3RzL19maWx0ZXJzJyk7XG4gICAgY29uc3QgcmVzdWx0c0ZpbHRlcnNDbGllbnQgPSBuZXcgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCh0aGlzLnJlcXVlc3QsICcvdjQvaW5ib3gvcmVzdWx0cy9fZmlsdGVycycpO1xuXG4gICAgY29uc3Qgc2VlZHNMaXN0c0NsaWVudCA9IG5ldyBTZWVkc0xpc3RzQ2xpZW50KFxuICAgICAgdGhpcy5yZXF1ZXN0LFxuICAgICAgc2VlZHNMaXN0c0F0dHJpYnV0ZXMsXG4gICAgICBzZWVkc0xpc3RzRmlsdGVyc0NsaWVudFxuICAgICk7XG5cbiAgICBjb25zdCBpbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50ID0gbmV3IEluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQoXG4gICAgICB0aGlzLnJlcXVlc3QsXG4gICAgICByZXN1bHRzQXR0cmlidXRlc0NsaWVudCxcbiAgICAgIHJlc3VsdHNGaWx0ZXJzQ2xpZW50LFxuICAgICAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c1NoYXJpbmdDbGllbnRcbiAgICApO1xuXG4gICAgY29uc3QgaW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50ID0gbmV3IEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudChcbiAgICAgIHRoaXMucmVxdWVzdFxuICAgICk7XG5cbiAgICB0aGlzLmRvbWFpbnMgPSBuZXcgRG9tYWluc0NsaWVudChcbiAgICAgIHRoaXMucmVxdWVzdCxcbiAgICAgIGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50LFxuICAgICAgZG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICAgICAgZG9tYWluVGFnc0NsaWVudCxcbiAgICAgIGRvbWFpblRyYWNraW5nQ2xpZW50XG4gICAgKTtcbiAgICB0aGlzLndlYmhvb2tzID0gbmV3IFdlYmhvb2tzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5ldmVudHMgPSBuZXcgRXZlbnRDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLnN0YXRzID0gbmV3IFN0YXRzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5tZXRyaWNzID0gbmV3IE1ldHJpY3NDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLnN1cHByZXNzaW9ucyA9IG5ldyBTdXBwcmVzc2lvbkNsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMubWVzc2FnZXMgPSBuZXcgTWVzc2FnZXNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLnJvdXRlcyA9IG5ldyBSb3V0ZXNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmlwcyA9IG5ldyBJcHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmlwX3Bvb2xzID0gbmV3IElwUG9vbHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmxpc3RzID0gbmV3IE1haWxpbmdMaXN0c0NsaWVudCh0aGlzLnJlcXVlc3QsIG1haWxMaXN0c01lbWJlcnMpO1xuICAgIHRoaXMudmFsaWRhdGUgPSBuZXcgVmFsaWRhdGVDbGllbnQodGhpcy5yZXF1ZXN0LCBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQpO1xuICAgIHRoaXMuc3ViYWNjb3VudHMgPSBuZXcgU3ViYWNjb3VudHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmluYm94UGxhY2VtZW50cyA9IG5ldyBJbmJveFBsYWNlbWVudHNDbGllbnQoXG4gICAgICB0aGlzLnJlcXVlc3QsXG4gICAgICBzZWVkc0xpc3RzQ2xpZW50LFxuICAgICAgaW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudCxcbiAgICAgIGluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudCxcbiAgICApO1xuICB9XG5cbiAgc2V0U3ViYWNjb3VudChzdWJhY2NvdW50SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdD8uc2V0U3ViYWNjb3VudEhlYWRlcihzdWJhY2NvdW50SWQpO1xuICB9XG5cbiAgcmVzZXRTdWJhY2NvdW50KCk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdD8ucmVzZXRTdWJhY2NvdW50SGVhZGVyKCk7XG4gIH1cbn1cbiIsImltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7XG4gIE1haWxMaXN0TWVtYmVyc1F1ZXJ5LFxuICBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnMsXG4gIE1haWxMaXN0TWVtYmVyLFxuICBNdWx0aXBsZU1lbWJlcnNEYXRhLFxuICBNdWx0aXBsZU1lbWJlcnNSZXFEYXRhLFxuICBEZWxldGVkTWVtYmVyLFxuICBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnNSZXEsXG4gIE5ld011bHRpcGxlTWVtYmVyc1Jlc3BvbnNlLFxuICBNYWlsTGlzdE1lbWJlcnNSZXN1bHQsXG4gIE1haWxMaXN0TWVtYmVyc1Jlc3BvbnNlXG59IGZyb20gJy4uLy4uL1R5cGVzL01haWxpbmdMaXN0cyc7XG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuLi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5pbXBvcnQgeyBJTWFpbExpc3RzTWVtYmVycyB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvTWFpbGluZ0xpc3RzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFpbExpc3RzTWVtYmVyc1xuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8TWFpbExpc3RNZW1iZXJzUmVzdWx0PlxuICBpbXBsZW1lbnRzIElNYWlsTGlzdHNNZW1iZXJzIHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHN1cGVyKHJlcXVlc3QpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5iYXNlUm91dGUgPSAnL3YzL2xpc3RzJztcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tBbmRVcGRhdGVEYXRhKGRhdGE6IENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVycykge1xuICAgIGNvbnN0IG5ld0RhdGEgPSB7IC4uLmRhdGEgfTtcblxuICAgIGlmICh0eXBlb2YgZGF0YS52YXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgbmV3RGF0YS52YXJzID0gSlNPTi5zdHJpbmdpZnkobmV3RGF0YS52YXJzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEuc3Vic2NyaWJlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBuZXdEYXRhLnN1YnNjcmliZWQgPSBkYXRhLnN1YnNjcmliZWQgPyAneWVzJyA6ICdubyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0RhdGEgYXMgQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzUmVxO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChcbiAgICByZXNwb25zZTogTWFpbExpc3RNZW1iZXJzUmVzcG9uc2UsXG4gICk6IE1haWxMaXN0TWVtYmVyc1Jlc3VsdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIE1haWxMaXN0TWVtYmVyc1Jlc3VsdDtcbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcztcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdhZGRyZXNzJyk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0TWVtYmVycyhcbiAgICBtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyxcbiAgICBxdWVyeT86IE1haWxMaXN0TWVtYmVyc1F1ZXJ5XG4gICk6IFByb21pc2U8TWFpbExpc3RNZW1iZXJzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXMoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzL3BhZ2VzYCwgcXVlcnkpO1xuICB9XG5cbiAgZ2V0TWVtYmVyKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBtYWlsTGlzdE1lbWJlckFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8TWFpbExpc3RNZW1iZXI+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/OiBJcFBvb2xEZWxldGVEYXRhKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ2RlbGV0ZScsIHVybCwgZGF0YSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVxdWVzdDtcbiIsImV4cG9ydCBlbnVtIFJlc29sdXRpb24ge1xuICAgIEhPVVIgPSAnaG91cicsXG4gICAgREFZID0gJ2RheScsXG4gICAgTU9OVEggPSAnbW9udGgnXG59XG5cbmV4cG9ydCBlbnVtIFN1cHByZXNzaW9uTW9kZWxzIHtcbiAgICBCT1VOQ0VTID0gJ2JvdW5jZXMnLFxuICAgIENPTVBMQUlOVFMgPSAnY29tcGxhaW50cycsXG4gICAgVU5TVUJTQ1JJQkVTID0gJ3Vuc3Vic2NyaWJlcycsXG4gICAgV0hJVEVMSVNUUyA9ICd3aGl0ZWxpc3RzJ1xufVxuXG5leHBvcnQgZW51bSBXZWJob29rc0lkcyB7XG4gICAgQ0xJQ0tFRCA9ICdjbGlja2VkJyxcbiAgICBDT01QTEFJTkVEID0gJ2NvbXBsYWluZWQnLFxuICAgIERFTElWRVJFRCA9ICdkZWxpdmVyZWQnLFxuICAgIE9QRU5FRCA9ICdvcGVuZWQnLFxuICAgIFBFUk1BTkVOVF9GQUlMID0gJ3Blcm1hbmVudF9mYWlsJyxcbiAgICBURU1QT1JBUllfRkFJTCA9ICd0ZW1wb3JhcnlfZmFpbCcsXG4gICAgVU5TVUJTQ1JJQkVEID0gJ3Vuc3Vic2NyaWJlJyxcbn1cblxuZXhwb3J0IGVudW0gWWVzTm8ge1xuICAgIFlFUyA9ICd5ZXMnLFxuICAgIE5PID0gJ25vJ1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9Mb2dnZXInO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Eb21haW5DcmVkZW50aWFscyc7XG5leHBvcnQgKiBmcm9tICcuL0RvbWFpblRhZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5UZW1wbGF0ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5zQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWluVHJhY2tpbmcnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JRXZlbnRDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JSVBQb29sc0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lJUHNDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JbmJveFBsYWNlbWVudHNDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9BdHRyaWJ1dGVzQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vRmlsdGVyc0NsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL1NlZWRzTGlzdHMvU2VlZHNMaXN0c0NsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL1Jlc3VsdHMvSW5ib3hQbGFjZW1lbnRzUmVzdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL1Jlc3VsdHMvSW5ib3hQbGFjZW1lbnRzUmVzdWx0c1NoYXJpbmcnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JTWFpbGd1bkNsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL01haWxpbmdMaXN0TWVtYmVycyc7XG5leHBvcnQgKiBmcm9tICcuL01haWxpbmdMaXN0c0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lNZXNzYWdlc0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lSb3V0ZXNDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9TdGF0c0NsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL1N0YXRzQ29udGFpbmVyJztcbiIsImV4cG9ydCAqIGZyb20gJy4vSVN1YmFjY291bnRzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vQm91bmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29tcGxhaW50JztcbmV4cG9ydCAqIGZyb20gJy4vVW5zdWJzY3JpYmUnO1xuZXhwb3J0ICogZnJvbSAnLi9XaGl0ZUxpc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9JU3VwcHJlc3Npb25zQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vTXVsdGlwbGVWYWxpZGF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vVmFsaWRhdGlvbic7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lXZWJIb29rc0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0NvbW1vbic7XG5leHBvcnQgKiBmcm9tICcuL0RvbWFpbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9NYWlsZ3VuQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vTWFpbGluZ0xpc3RzJztcbmV4cG9ydCAqIGZyb20gJy4vU3RhdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9TdXBwcmVzc2lvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9WYWxpZGF0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL0V2ZW50Q2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vV2ViaG9va3MnO1xuZXhwb3J0ICogZnJvbSAnLi9NZXNzYWdlcyc7XG5leHBvcnQgKiBmcm9tICcuL1JvdXRlcyc7XG5leHBvcnQgKiBmcm9tICcuL0lQcyc7XG5leHBvcnQgKiBmcm9tICcuL0lQUG9vbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9TdWJhY2NvdW50cyc7XG5leHBvcnQgKiBmcm9tICcuL0luYm94UGxhY2VtZW50cyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0Vycm9yJztcbmV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Gb3JtRGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9SZXF1ZXN0T3B0aW9ucyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0RvbWFpbkNyZWRlbnRpYWxzJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWlucyc7XG5leHBvcnQgKiBmcm9tICcuL0RvbWFpblRhZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5UZW1wbGF0ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5UcmFja2luZyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0V2ZW50cyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lwUG9vbHMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JUHMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9NYWlsZ3VuQ2xpZW50T3B0aW9ucyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL01haWxpbmdMaXN0TWVtYmVycyc7XG5leHBvcnQgKiBmcm9tICcuL01haWxpbmdMaXN0cyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL01lc3NhZ2VzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vUm91dGVzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vU3RhdHMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9TdWJhY2NvdW50cyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0JvdW5jZSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbXBsYWludCc7XG5leHBvcnQgKiBmcm9tICcuL1N1cHByZXNzaW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL1Vuc3Vic2NyaWJlJztcbmV4cG9ydCAqIGZyb20gJy4vV2hpdGVMaXN0JztcbiIsImV4cG9ydCAqIGZyb20gJy4vTXVsdGlwbGVWYWxpZGF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vVmFsaWRhdGlvbic7XG4iLCJleHBvcnQgKiBmcm9tICcuL1dlYmhvb2tzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vQ29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWlucyc7XG5leHBvcnQgKiBmcm9tICcuL0V2ZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL0lQUG9vbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9JUHMnO1xuZXhwb3J0ICogZnJvbSAnLi9NYWlsZ3VuQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vTWFpbGluZ0xpc3RzJztcbmV4cG9ydCAqIGZyb20gJy4vTWVzc2FnZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9Sb3V0ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9TdGF0cyc7XG5leHBvcnQgKiBmcm9tICcuL1N1YmFjY291bnRzJztcbmV4cG9ydCAqIGZyb20gJy4vU3VwcHJlc3Npb25zJztcbmV4cG9ydCAqIGZyb20gJy4vVmFsaWRhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9XZWJob29rcyc7XG4iLCJpbXBvcnQgTWFpbGd1bkNsaWVudCBmcm9tICcuL0NsYXNzZXMvTWFpbGd1bkNsaWVudCc7XG5pbXBvcnQgeyBJTWFpbGd1bkNsaWVudCB9IGZyb20gJy4vSW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJbnB1dEZvcm1EYXRhLCBNYWlsZ3VuQ2xpZW50T3B0aW9ucyB9IGZyb20gJy4vVHlwZXMnO1xuXG5leHBvcnQgKiBhcyBFbnVtcyBmcm9tICcuL0VudW1zJztcbmV4cG9ydCAqIGZyb20gJy4vVHlwZXMnO1xuZXhwb3J0ICogYXMgSW50ZXJmYWNlcyBmcm9tICcuL0ludGVyZmFjZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYWlsZ3VuIHtcbiAgc3RhdGljIGdldCBkZWZhdWx0KCk6IHR5cGVvZiBNYWlsZ3VuIHsgcmV0dXJuIHRoaXM7IH1cbiAgcHJpdmF0ZSBmb3JtRGF0YTogSW5wdXRGb3JtRGF0YVxuXG4gIGNvbnN0cnVjdG9yKEZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IEZvcm1EYXRhO1xuICB9XG5cbiAgY2xpZW50KG9wdGlvbnM6IE1haWxndW5DbGllbnRPcHRpb25zKSA6IElNYWlsZ3VuQ2xpZW50IHtcbiAgICByZXR1cm4gbmV3IE1haWxndW5DbGllbnQob3B0aW9ucywgdGhpcy5mb3JtRGF0YSk7XG4gIH1cbn1cbiIsIi8qISBodHRwczovL210aHMuYmUvYmFzZTY0IHYxLjAuMCBieSBAbWF0aGlhcyB8IE1JVCBsaWNlbnNlICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZXMgYGV4cG9ydHNgLlxuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzO1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLlxuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0bW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMgJiYgbW9kdWxlO1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgLCBmcm9tIE5vZGUuanMgb3IgQnJvd3NlcmlmaWVkIGNvZGUsIGFuZCB1c2Vcblx0Ly8gaXQgYXMgYHJvb3RgLlxuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdHZhciBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG5cdFx0dGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcblx0fTtcblx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcjtcblx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0ludmFsaWRDaGFyYWN0ZXJFcnJvcic7XG5cblx0dmFyIGVycm9yID0gZnVuY3Rpb24obWVzc2FnZSkge1xuXHRcdC8vIE5vdGU6IHRoZSBlcnJvciBtZXNzYWdlcyB1c2VkIHRocm91Z2hvdXQgdGhpcyBmaWxlIG1hdGNoIHRob3NlIHVzZWQgYnlcblx0XHQvLyB0aGUgbmF0aXZlIGBhdG9iYC9gYnRvYWAgaW1wbGVtZW50YXRpb24gaW4gQ2hyb21pdW0uXG5cdFx0dGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvcihtZXNzYWdlKTtcblx0fTtcblxuXHR2YXIgVEFCTEUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG5cdC8vIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvY29tbW9uLW1pY3Jvc3ludGF4ZXMuaHRtbCNzcGFjZS1jaGFyYWN0ZXJcblx0dmFyIFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMgPSAvW1xcdFxcblxcZlxcciBdL2c7XG5cblx0Ly8gYGRlY29kZWAgaXMgZGVzaWduZWQgdG8gYmUgZnVsbHkgY29tcGF0aWJsZSB3aXRoIGBhdG9iYCBhcyBkZXNjcmliZWQgaW4gdGhlXG5cdC8vIEhUTUwgU3RhbmRhcmQuIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYXRvYlxuXHQvLyBUaGUgb3B0aW1pemVkIGJhc2U2NC1kZWNvZGluZyBhbGdvcml0aG0gdXNlZCBpcyBiYXNlZCBvbiBAYXRr4oCZcyBleGNlbGxlbnRcblx0Ly8gaW1wbGVtZW50YXRpb24uIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2F0ay8xMDIwMzk2XG5cdHZhciBkZWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHRcdGlucHV0ID0gU3RyaW5nKGlucHV0KVxuXHRcdFx0LnJlcGxhY2UoUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUywgJycpO1xuXHRcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cdFx0aWYgKGxlbmd0aCAlIDQgPT0gMCkge1xuXHRcdFx0aW5wdXQgPSBpbnB1dC5yZXBsYWNlKC89PT8kLywgJycpO1xuXHRcdFx0bGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRsZW5ndGggJSA0ID09IDEgfHxcblx0XHRcdC8vIGh0dHA6Ly93aGF0d2cub3JnL0MjYWxwaGFudW1lcmljLWFzY2lpLWNoYXJhY3RlcnNcblx0XHRcdC9bXithLXpBLVowLTkvXS8udGVzdChpbnB1dClcblx0XHQpIHtcblx0XHRcdGVycm9yKFxuXHRcdFx0XHQnSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuJ1xuXHRcdFx0KTtcblx0XHR9XG5cdFx0dmFyIGJpdENvdW50ZXIgPSAwO1xuXHRcdHZhciBiaXRTdG9yYWdlO1xuXHRcdHZhciBidWZmZXI7XG5cdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdHZhciBwb3NpdGlvbiA9IC0xO1xuXHRcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XG5cdFx0XHRidWZmZXIgPSBUQUJMRS5pbmRleE9mKGlucHV0LmNoYXJBdChwb3NpdGlvbikpO1xuXHRcdFx0Yml0U3RvcmFnZSA9IGJpdENvdW50ZXIgJSA0ID8gYml0U3RvcmFnZSAqIDY0ICsgYnVmZmVyIDogYnVmZmVyO1xuXHRcdFx0Ly8gVW5sZXNzIHRoaXMgaXMgdGhlIGZpcnN0IG9mIGEgZ3JvdXAgb2YgNCBjaGFyYWN0ZXJz4oCmXG5cdFx0XHRpZiAoYml0Q291bnRlcisrICUgNCkge1xuXHRcdFx0XHQvLyDigKZjb252ZXJ0IHRoZSBmaXJzdCA4IGJpdHMgdG8gYSBzaW5nbGUgQVNDSUkgY2hhcmFjdGVyLlxuXHRcdFx0XHRvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShcblx0XHRcdFx0XHQweEZGICYgYml0U3RvcmFnZSA+PiAoLTIgKiBiaXRDb3VudGVyICYgNilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fTtcblxuXHQvLyBgZW5jb2RlYCBpcyBkZXNpZ25lZCB0byBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggYGJ0b2FgIGFzIGRlc2NyaWJlZCBpbiB0aGVcblx0Ly8gSFRNTCBTdGFuZGFyZDogaHR0cDovL3doYXR3Zy5vcmcvaHRtbC93ZWJhcHBhcGlzLmh0bWwjZG9tLXdpbmRvd2Jhc2U2NC1idG9hXG5cdHZhciBlbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHRcdGlucHV0ID0gU3RyaW5nKGlucHV0KTtcblx0XHRpZiAoL1teXFwwLVxceEZGXS8udGVzdChpbnB1dCkpIHtcblx0XHRcdC8vIE5vdGU6IG5vIG5lZWQgdG8gc3BlY2lhbC1jYXNlIGFzdHJhbCBzeW1ib2xzIGhlcmUsIGFzIHN1cnJvZ2F0ZXMgYXJlXG5cdFx0XHQvLyBtYXRjaGVkLCBhbmQgdGhlIGlucHV0IGlzIHN1cHBvc2VkIHRvIG9ubHkgY29udGFpbiBBU0NJSSBhbnl3YXkuXG5cdFx0XHRlcnJvcihcblx0XHRcdFx0J1RoZSBzdHJpbmcgdG8gYmUgZW5jb2RlZCBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgb2YgdGhlICcgK1xuXHRcdFx0XHQnTGF0aW4xIHJhbmdlLidcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHZhciBwYWRkaW5nID0gaW5wdXQubGVuZ3RoICUgMztcblx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0dmFyIHBvc2l0aW9uID0gLTE7XG5cdFx0dmFyIGE7XG5cdFx0dmFyIGI7XG5cdFx0dmFyIGM7XG5cdFx0dmFyIGJ1ZmZlcjtcblx0XHQvLyBNYWtlIHN1cmUgYW55IHBhZGRpbmcgaXMgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBsb29wLlxuXHRcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGggLSBwYWRkaW5nO1xuXG5cdFx0d2hpbGUgKCsrcG9zaXRpb24gPCBsZW5ndGgpIHtcblx0XHRcdC8vIFJlYWQgdGhyZWUgYnl0ZXMsIGkuZS4gMjQgYml0cy5cblx0XHRcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCAxNjtcblx0XHRcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pIDw8IDg7XG5cdFx0XHRjID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKTtcblx0XHRcdGJ1ZmZlciA9IGEgKyBiICsgYztcblx0XHRcdC8vIFR1cm4gdGhlIDI0IGJpdHMgaW50byBmb3VyIGNodW5rcyBvZiA2IGJpdHMgZWFjaCwgYW5kIGFwcGVuZCB0aGVcblx0XHRcdC8vIG1hdGNoaW5nIGNoYXJhY3RlciBmb3IgZWFjaCBvZiB0aGVtIHRvIHRoZSBvdXRwdXQuXG5cdFx0XHRvdXRwdXQgKz0gKFxuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDE4ICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDEyICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDYgJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgJiAweDNGKVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAocGFkZGluZyA9PSAyKSB7XG5cdFx0XHRhID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbikgPDwgODtcblx0XHRcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xuXHRcdFx0YnVmZmVyID0gYSArIGI7XG5cdFx0XHRvdXRwdXQgKz0gKFxuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDEwKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdCgoYnVmZmVyID4+IDQpICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA8PCAyKSAmIDB4M0YpICtcblx0XHRcdFx0Jz0nXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAocGFkZGluZyA9PSAxKSB7XG5cdFx0XHRidWZmZXIgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcblx0XHRcdG91dHB1dCArPSAoXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA8PCA0KSAmIDB4M0YpICtcblx0XHRcdFx0Jz09J1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9O1xuXG5cdHZhciBiYXNlNjQgPSB7XG5cdFx0J2VuY29kZSc6IGVuY29kZSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCd2ZXJzaW9uJzogJzEuMC4wJ1xuXHR9O1xuXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGJhc2U2NDtcblx0XHR9KTtcblx0fVx0ZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgIWZyZWVFeHBvcnRzLm5vZGVUeXBlKSB7XG5cdFx0aWYgKGZyZWVNb2R1bGUpIHsgLy8gaW4gTm9kZS5qcyBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IGJhc2U2NDtcblx0XHR9IGVsc2UgeyAvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yICh2YXIga2V5IGluIGJhc2U2NCkge1xuXHRcdFx0XHRiYXNlNjQuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IGJhc2U2NFtrZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7IC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LmJhc2U2NCA9IGJhc2U2NDtcblx0fVxuXG59KHRoaXMpKTtcbiIsIihmdW5jdGlvbiAobmFtZSwgY29udGV4dCwgZGVmaW5pdGlvbikge1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIGRlZmluZShkZWZpbml0aW9uKTtcbiAgZWxzZSBjb250ZXh0W25hbWVdID0gZGVmaW5pdGlvbigpO1xufSkoJ3VybGpvaW4nLCB0aGlzLCBmdW5jdGlvbiAoKSB7XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplIChzdHJBcnJheSkge1xuICAgIHZhciByZXN1bHRBcnJheSA9IFtdO1xuICAgIGlmIChzdHJBcnJheS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG5cbiAgICBpZiAodHlwZW9mIHN0ckFycmF5WzBdICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBzdHJBcnJheVswXSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGZpcnN0IHBhcnQgaXMgYSBwbGFpbiBwcm90b2NvbCwgd2UgY29tYmluZSBpdCB3aXRoIHRoZSBuZXh0IHBhcnQuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eW14vOl0rOlxcLyokLykgJiYgc3RyQXJyYXkubGVuZ3RoID4gMSkge1xuICAgICAgdmFyIGZpcnN0ID0gc3RyQXJyYXkuc2hpZnQoKTtcbiAgICAgIHN0ckFycmF5WzBdID0gZmlyc3QgKyBzdHJBcnJheVswXTtcbiAgICB9XG5cbiAgICAvLyBUaGVyZSBtdXN0IGJlIHR3byBvciB0aHJlZSBzbGFzaGVzIGluIHRoZSBmaWxlIHByb3RvY29sLCB0d28gc2xhc2hlcyBpbiBhbnl0aGluZyBlbHNlLlxuICAgIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXmZpbGU6XFwvXFwvXFwvLykpIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8vJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8nKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gc3RyQXJyYXlbaV07XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIGNvbXBvbmVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb25lbnQgPT09ICcnKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgc3RhcnRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBmaXJzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL15bXFwvXSsvLCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoaSA8IHN0ckFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIGVuZGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGxhc3QuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIHRoZSBsYXN0IGNvbXBvbmVudCB3ZSB3aWxsIGNvbWJpbmUgbXVsdGlwbGUgc2xhc2hlcyB0byBhIHNpbmdsZSBvbmUuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJy8nKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0QXJyYXkucHVzaChjb21wb25lbnQpO1xuXG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IHJlc3VsdEFycmF5LmpvaW4oJy8nKTtcbiAgICAvLyBFYWNoIGlucHV0IGNvbXBvbmVudCBpcyBub3cgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNsYXNoIGV4Y2VwdCB0aGUgcG9zc2libGUgZmlyc3QgcGxhaW4gcHJvdG9jb2wgcGFydC5cblxuICAgIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBiZWZvcmUgcGFyYW1ldGVycyBvciBoYXNoXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcLyhcXD98JnwjW14hXSkvZywgJyQxJyk7XG5cbiAgICAvLyByZXBsYWNlID8gaW4gcGFyYW1ldGVycyB3aXRoICZcbiAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJz8nKTtcbiAgICBzdHIgPSBwYXJ0cy5zaGlmdCgpICsgKHBhcnRzLmxlbmd0aCA+IDAgPyAnPyc6ICcnKSArIHBhcnRzLmpvaW4oJyYnKTtcblxuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbnB1dDtcblxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgaW5wdXQgPSBhcmd1bWVudHNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0ID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemUoaW5wdXQpO1xuICB9O1xuXG59KTtcbiIsIi8vIEF4aW9zIHYxLjcuNCBDb3B5cmlnaHQgKGMpIDIwMjQgTWF0dCBaYWJyaXNraWUgYW5kIGNvbnRyaWJ1dG9yc1xuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG5jb25zdCB7dG9TdHJpbmd9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHtnZXRQcm90b3R5cGVPZn0gPSBPYmplY3Q7XG5cbmNvbnN0IGtpbmRPZiA9IChjYWNoZSA9PiB0aGluZyA9PiB7XG4gICAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlXG59O1xuXG5jb25zdCB0eXBlT2ZUZXN0ID0gdHlwZSA9PiB0aGluZyA9PiB0eXBlb2YgdGhpbmcgPT09IHR5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VuZGVmaW5lZCA9IHR5cGVPZlRlc3QoJ3VuZGVmaW5lZCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIGlzRnVuY3Rpb24odmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIGxldCByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdCgnZnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgIT09IG51bGwgJiYgdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSB0aGluZyA9PiB0aGluZyA9PT0gdHJ1ZSB8fCB0aGluZyA9PT0gZmFsc2U7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWwpO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmVhbSA9ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRm9ybURhdGEgPSAodGhpbmcpID0+IHtcbiAgbGV0IGtpbmQ7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fCAoXG4gICAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgKFxuICAgICAgICAoa2luZCA9IGtpbmRPZih0aGluZykpID09PSAnZm9ybWRhdGEnIHx8XG4gICAgICAgIC8vIGRldGVjdCBmb3JtLWRhdGEgaW5zdGFuY2VcbiAgICAgICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICAgICApXG4gICAgKVxuICApXG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuY29uc3QgW2lzUmVhZGFibGVTdHJlYW0sIGlzUmVxdWVzdCwgaXNSZXNwb25zZSwgaXNIZWFkZXJzXSA9IFsnUmVhZGFibGVTdHJlYW0nLCAnUmVxdWVzdCcsICdSZXNwb25zZScsICdIZWFkZXJzJ10ubWFwKGtpbmRPZlRlc3QpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5jb25zdCB0cmltID0gKHN0cikgPT4gc3RyLnRyaW0gP1xuICBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCAnJyk7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4sIHthbGxPd25LZXlzID0gZmFsc2V9ID0ge30pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgaTtcbiAgbGV0IGw7XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGNvbnN0IGtleXMgPSBhbGxPd25LZXlzID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKSA6IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGtleTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEtleShvYmosIGtleSkge1xuICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIGxldCBfa2V5O1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIF9rZXkgPSBrZXlzW2ldO1xuICAgIGlmIChrZXkgPT09IF9rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIF9rZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBfZ2xvYmFsID0gKCgpID0+IHtcbiAgLyplc2xpbnQgbm8tdW5kZWY6MCovXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWwpXG59KSgpO1xuXG5jb25zdCBpc0NvbnRleHREZWZpbmVkID0gKGNvbnRleHQpID0+ICFpc1VuZGVmaW5lZChjb250ZXh0KSAmJiBjb250ZXh0ICE9PSBfZ2xvYmFsO1xuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIGNvbnN0IHtjYXNlbGVzc30gPSBpc0NvbnRleHREZWZpbmVkKHRoaXMpICYmIHRoaXMgfHwge307XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBjb25zdCBhc3NpZ25WYWx1ZSA9ICh2YWwsIGtleSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldEtleSA9IGNhc2VsZXNzICYmIGZpbmRLZXkocmVzdWx0LCBrZXkpIHx8IGtleTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRbdGFyZ2V0S2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHJlc3VsdFt0YXJnZXRLZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbDtcbiAgICB9XG4gIH07XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYXJndW1lbnRzW2ldICYmIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXNdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmNvbnN0IGV4dGVuZCA9IChhLCBiLCB0aGlzQXJnLCB7YWxsT3duS2V5c309IHt9KSA9PiB7XG4gIGZvckVhY2goYiwgKHZhbCwga2V5KSA9PiB7XG4gICAgaWYgKHRoaXNBcmcgJiYgaXNGdW5jdGlvbih2YWwpKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0sIHthbGxPd25LZXlzfSk7XG4gIHJldHVybiBhO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn07XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGluaGVyaXRzID0gKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpID0+IHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCAnc3VwZXInLCB7XG4gICAgdmFsdWU6IHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlXG4gIH0pO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbnxCb29sZWFufSBbZmlsdGVyXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BGaWx0ZXJdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgdG9GbGF0T2JqZWN0ID0gKHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyLCBwcm9wRmlsdGVyKSA9PiB7XG4gIGxldCBwcm9wcztcbiAgbGV0IGk7XG4gIGxldCBwcm9wO1xuICBjb25zdCBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIGlmIChzb3VyY2VPYmogPT0gbnVsbCkgcmV0dXJuIGRlc3RPYmo7XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBmaWx0ZXIgIT09IGZhbHNlICYmIGdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0IG9yIG51bGwgaWYgZmFpbGVkXG4gKlxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKlxuICogQHJldHVybnMgez9BcnJheX1cbiAqL1xuY29uc3QgdG9BcnJheSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgaWYgKGlzQXJyYXkodGhpbmcpKSByZXR1cm4gdGhpbmc7XG4gIGxldCBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoIWlzTnVtYmVyKGkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59O1xuXG4vKipcbiAqIENoZWNraW5nIGlmIHRoZSBVaW50OEFycmF5IGV4aXN0cyBhbmQgaWYgaXQgZG9lcywgaXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZVxuICogdGhpbmcgcGFzc2VkIGluIGlzIGFuIGluc3RhbmNlIG9mIFVpbnQ4QXJyYXlcbiAqXG4gKiBAcGFyYW0ge1R5cGVkQXJyYXl9XG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuY29uc3QgaXNUeXBlZEFycmF5ID0gKFR5cGVkQXJyYXkgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gdGhpbmcgPT4ge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBnZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbi8qKlxuICogRm9yIGVhY2ggZW50cnkgaW4gdGhlIG9iamVjdCwgY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUga2V5IGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgZm9yRWFjaEVudHJ5ID0gKG9iaiwgZm4pID0+IHtcbiAgY29uc3QgZ2VuZXJhdG9yID0gb2JqICYmIG9ialtTeW1ib2wuaXRlcmF0b3JdO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gZ2VuZXJhdG9yLmNhbGwob2JqKTtcblxuICBsZXQgcmVzdWx0O1xuXG4gIHdoaWxlICgocmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpKSAmJiAhcmVzdWx0LmRvbmUpIHtcbiAgICBjb25zdCBwYWlyID0gcmVzdWx0LnZhbHVlO1xuICAgIGZuLmNhbGwob2JqLCBwYWlyWzBdLCBwYWlyWzFdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59O1xuXG4vKiBDaGVja2luZyBpZiB0aGUga2luZE9mVGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gSFRNTEZvcm1FbGVtZW50LiAqL1xuY29uc3QgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoJ0hUTUxGb3JtRWxlbWVudCcpO1xuXG5jb25zdCB0b0NhbWVsQ2FzZSA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLFxuICAgIGZ1bmN0aW9uIHJlcGxhY2VyKG0sIHAxLCBwMikge1xuICAgICAgcmV0dXJuIHAxLnRvVXBwZXJDYXNlKCkgKyBwMjtcbiAgICB9XG4gICk7XG59O1xuXG4vKiBDcmVhdGluZyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjaGVjayBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuICovXG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9ICgoe2hhc093blByb3BlcnR5fSkgPT4gKG9iaiwgcHJvcCkgPT4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKShPYmplY3QucHJvdG90eXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVnRXhwID0ga2luZE9mVGVzdCgnUmVnRXhwJyk7XG5cbmNvbnN0IHJlZHVjZURlc2NyaXB0b3JzID0gKG9iaiwgcmVkdWNlcikgPT4ge1xuICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaik7XG4gIGNvbnN0IHJlZHVjZWREZXNjcmlwdG9ycyA9IHt9O1xuXG4gIGZvckVhY2goZGVzY3JpcHRvcnMsIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgbGV0IHJldDtcbiAgICBpZiAoKHJldCA9IHJlZHVjZXIoZGVzY3JpcHRvciwgbmFtZSwgb2JqKSkgIT09IGZhbHNlKSB7XG4gICAgICByZWR1Y2VkRGVzY3JpcHRvcnNbbmFtZV0gPSByZXQgfHwgZGVzY3JpcHRvcjtcbiAgICB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iaiwgcmVkdWNlZERlc2NyaXB0b3JzKTtcbn07XG5cbi8qKlxuICogTWFrZXMgYWxsIG1ldGhvZHMgcmVhZC1vbmx5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKi9cblxuY29uc3QgZnJlZXplTWV0aG9kcyA9IChvYmopID0+IHtcbiAgcmVkdWNlRGVzY3JpcHRvcnMob2JqLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIC8vIHNraXAgcmVzdHJpY3RlZCBwcm9wcyBpbiBzdHJpY3QgbW9kZVxuICAgIGlmIChpc0Z1bmN0aW9uKG9iaikgJiYgWydhcmd1bWVudHMnLCAnY2FsbGVyJywgJ2NhbGxlZSddLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBvYmpbbmFtZV07XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm47XG5cbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBmYWxzZTtcblxuICAgIGlmICgnd3JpdGFibGUnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIGRlc2NyaXB0b3Iud3JpdGFibGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICBkZXNjcmlwdG9yLnNldCA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0NhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kIFxcJycgKyBuYW1lICsgJ1xcJycpO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICBpc0FycmF5KGFycmF5T3JTdHJpbmcpID8gZGVmaW5lKGFycmF5T3JTdHJpbmcpIDogZGVmaW5lKFN0cmluZyhhcnJheU9yU3RyaW5nKS5zcGxpdChkZWxpbWl0ZXIpKTtcblxuICByZXR1cm4gb2JqO1xufTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSA9ICt2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn07XG5cbmNvbnN0IEFMUEhBID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JztcblxuY29uc3QgRElHSVQgPSAnMDEyMzQ1Njc4OSc7XG5cbmNvbnN0IEFMUEhBQkVUID0ge1xuICBESUdJVCxcbiAgQUxQSEEsXG4gIEFMUEhBX0RJR0lUOiBBTFBIQSArIEFMUEhBLnRvVXBwZXJDYXNlKCkgKyBESUdJVFxufTtcblxuY29uc3QgZ2VuZXJhdGVTdHJpbmcgPSAoc2l6ZSA9IDE2LCBhbHBoYWJldCA9IEFMUEhBQkVULkFMUEhBX0RJR0lUKSA9PiB7XG4gIGxldCBzdHIgPSAnJztcbiAgY29uc3Qge2xlbmd0aH0gPSBhbHBoYWJldDtcbiAgd2hpbGUgKHNpemUtLSkge1xuICAgIHN0ciArPSBhbHBoYWJldFtNYXRoLnJhbmRvbSgpICogbGVuZ3RofDBdO1xuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn07XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhISh0aGluZyAmJiBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgdGhpbmdbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJiB0aGluZ1tTeW1ib2wuaXRlcmF0b3JdKTtcbn1cblxuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBBcnJheSgxMCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlLCBpKSA9PiB7XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7XG4gICAgICAgIHN0YWNrW2ldID0gc291cmNlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhY2tbaV0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9O1xuXG4gIHJldHVybiB2aXNpdChvYmosIDApO1xufTtcblxuY29uc3QgaXNBc3luY0ZuID0ga2luZE9mVGVzdCgnQXN5bmNGdW5jdGlvbicpO1xuXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJiAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG4vLyBvcmlnaW5hbCBjb2RlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vRGlnaXRhbEJyYWluSlMvQXhpb3NQcm9taXNlL2Jsb2IvMTZkZWFiMTM3MTBlYzA5Nzc5OTIyMTMxZjNmYTU5NTQzMjBmODNhYi9saWIvdXRpbHMuanMjTDExLUwzNFxuXG5jb25zdCBfc2V0SW1tZWRpYXRlID0gKChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQsIHBvc3RNZXNzYWdlU3VwcG9ydGVkKSA9PiB7XG4gIGlmIChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQpIHtcbiAgICByZXR1cm4gc2V0SW1tZWRpYXRlO1xuICB9XG5cbiAgcmV0dXJuIHBvc3RNZXNzYWdlU3VwcG9ydGVkID8gKCh0b2tlbiwgY2FsbGJhY2tzKSA9PiB7XG4gICAgX2dsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoe3NvdXJjZSwgZGF0YX0pID0+IHtcbiAgICAgIGlmIChzb3VyY2UgPT09IF9nbG9iYWwgJiYgZGF0YSA9PT0gdG9rZW4pIHtcbiAgICAgICAgY2FsbGJhY2tzLmxlbmd0aCAmJiBjYWxsYmFja3Muc2hpZnQoKSgpO1xuICAgICAgfVxuICAgIH0sIGZhbHNlKTtcblxuICAgIHJldHVybiAoY2IpID0+IHtcbiAgICAgIGNhbGxiYWNrcy5wdXNoKGNiKTtcbiAgICAgIF9nbG9iYWwucG9zdE1lc3NhZ2UodG9rZW4sIFwiKlwiKTtcbiAgICB9XG4gIH0pKGBheGlvc0Ake01hdGgucmFuZG9tKCl9YCwgW10pIDogKGNiKSA9PiBzZXRUaW1lb3V0KGNiKTtcbn0pKFxuICB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nLFxuICBpc0Z1bmN0aW9uKF9nbG9iYWwucG9zdE1lc3NhZ2UpXG4pO1xuXG5jb25zdCBhc2FwID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrICE9PSAndW5kZWZpbmVkJyA/XG4gIHF1ZXVlTWljcm90YXNrLmJpbmQoX2dsb2JhbCkgOiAoIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLm5leHRUaWNrIHx8IF9zZXRJbW1lZGlhdGUpO1xuXG4vLyAqKioqKioqKioqKioqKioqKioqKipcblxudmFyIHV0aWxzJDEgPSB7XG4gIGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmcsXG4gIGlzTnVtYmVyLFxuICBpc0Jvb2xlYW4sXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1JlYWRhYmxlU3RyZWFtLFxuICBpc1JlcXVlc3QsXG4gIGlzUmVzcG9uc2UsXG4gIGlzSGVhZGVycyxcbiAgaXNVbmRlZmluZWQsXG4gIGlzRGF0ZSxcbiAgaXNGaWxlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgQUxQSEFCRVQsXG4gIGdlbmVyYXRlU3RyaW5nLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZSxcbiAgc2V0SW1tZWRpYXRlOiBfc2V0SW1tZWRpYXRlLFxuICBhc2FwXG59O1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ10gVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG4gIH1cblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIHJlc3BvbnNlICYmICh0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2UpO1xufVxuXG51dGlscyQxLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHV0aWxzJDEudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCBwcm90b3R5cGUkMSA9IEF4aW9zRXJyb3IucHJvdG90eXBlO1xuY29uc3QgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCcsXG4gICdFUlJfTk9UX1NVUFBPUlQnLFxuICAnRVJSX0lOVkFMSURfVVJMJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChjb2RlID0+IHtcbiAgZGVzY3JpcHRvcnNbY29kZV0gPSB7dmFsdWU6IGNvZGV9O1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEF4aW9zRXJyb3IsIGRlc2NyaXB0b3JzKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUkMSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykgPT4ge1xuICBjb25zdCBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUkMSk7XG5cbiAgdXRpbHMkMS50b0ZsYXRPYmplY3QoZXJyb3IsIGF4aW9zRXJyb3IsIGZ1bmN0aW9uIGZpbHRlcihvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSBFcnJvci5wcm90b3R5cGU7XG4gIH0sIHByb3AgPT4ge1xuICAgIHJldHVybiBwcm9wICE9PSAnaXNBeGlvc0Vycm9yJztcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcblxuICBheGlvc0Vycm9yLm5hbWUgPSBlcnJvci5uYW1lO1xuXG4gIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpO1xuXG4gIHJldHVybiBheGlvc0Vycm9yO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxudmFyIGh0dHBBZGFwdGVyID0gbnVsbDtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aGluZyBpcyBhIGFycmF5IG9yIGpzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhpbmcgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIHZpc2l0ZWQuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscyQxLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzJDEuaXNBcnJheSh0aGluZyk7XG59XG5cbi8qKlxuICogSXQgcmVtb3ZlcyB0aGUgYnJhY2tldHMgZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBhcmFtZXRlci5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUga2V5IHdpdGhvdXQgdGhlIGJyYWNrZXRzLlxuICovXG5mdW5jdGlvbiByZW1vdmVCcmFja2V0cyhrZXkpIHtcbiAgcmV0dXJuIHV0aWxzJDEuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXRoLCBhIGtleSwgYW5kIGEgYm9vbGVhbiwgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICovXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGguY29uY2F0KGtleSkubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB0b2tlbiA9IHJlbW92ZUJyYWNrZXRzKHRva2VuKTtcbiAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gIH0pLmpvaW4oZG90cyA/ICcuJyA6ICcnKTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgYXJyYXkgaXMgYW4gYXJyYXkgYW5kIG5vbmUgb2YgaXRzIGVsZW1lbnRzIGFyZSB2aXNpdGFibGUsIHRoZW4gaXQncyBhIGZsYXQgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGbGF0QXJyYXkoYXJyKSB7XG4gIHJldHVybiB1dGlscyQxLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMkMS50b0ZsYXRPYmplY3QodXRpbHMkMSwge30sIG51bGwsIGZ1bmN0aW9uIGZpbHRlcihwcm9wKSB7XG4gIHJldHVybiAvXmlzW0EtWl0vLnRlc3QocHJvcCk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEBwYXJhbSB7P09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy52aXNpdG9yXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5tZXRhVG9rZW5zID0gdHJ1ZV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZG90cyA9IGZhbHNlXVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gW29wdGlvbnMuaW5kZXhlcyA9IGZhbHNlXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbi8qKlxuICogSXQgY29udmVydHMgYW4gb2JqZWN0IGludG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBmb3JtIGRhdGEuXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgLSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSwgb3B0aW9ucykge1xuICBpZiAoIXV0aWxzJDEuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChGb3JtRGF0YSkoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgb3B0aW9ucyA9IHV0aWxzJDEudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICBtZXRhVG9rZW5zOiB0cnVlLFxuICAgIGRvdHM6IGZhbHNlLFxuICAgIGluZGV4ZXM6IGZhbHNlXG4gIH0sIGZhbHNlLCBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gICAgcmV0dXJuICF1dGlscyQxLmlzVW5kZWZpbmVkKHNvdXJjZVtvcHRpb25dKTtcbiAgfSk7XG5cbiAgY29uc3QgbWV0YVRva2VucyA9IG9wdGlvbnMubWV0YVRva2VucztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIGNvbnN0IHZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3IgfHwgZGVmYXVsdFZpc2l0b3I7XG4gIGNvbnN0IGRvdHMgPSBvcHRpb25zLmRvdHM7XG4gIGNvbnN0IGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXM7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucy5CbG9iIHx8IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iO1xuICBjb25zdCB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMkMS5pc1NwZWNDb21wbGlhbnRGb3JtKGZvcm1EYXRhKTtcblxuICBpZiAoIXV0aWxzJDEuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscyQxLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghdXNlQmxvYiAmJiB1dGlscyQxLmlzQmxvYih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIGlmICh1dGlscyQxLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzJDEuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCB2aXNpdG9yLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0ga2V5XG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGhcbiAgICogQHRoaXMge0Zvcm1EYXRhfVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHlcbiAgICovXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaXNpdG9yKHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBsZXQgYXJyID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzJDEuZW5kc1dpdGgoa2V5LCAne30nKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gbWV0YVRva2VucyA/IGtleSA6IGtleS5zbGljZSgwLCAtMik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICh1dGlscyQxLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKCh1dGlscyQxLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzJDEuZW5kc1dpdGgoa2V5LCAnW10nKSkgJiYgKGFyciA9IHV0aWxzJDEudG9BcnJheSh2YWx1ZSkpXG4gICAgICAgICkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzJDEuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWUgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKSA6IChpbmRleGVzID09PSBudWxsID8ga2V5IDoga2V5ICsgJ1tdJyksXG4gICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZVxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkge1xuICAgIGlmICh1dGlscyQxLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAnICsgcGF0aC5qb2luKCcuJykpO1xuICAgIH1cblxuICAgIHN0YWNrLnB1c2godmFsdWUpO1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9ICEodXRpbHMkMS5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIHZpc2l0b3IuY2FsbChcbiAgICAgICAgZm9ybURhdGEsIGVsLCB1dGlscyQxLmlzU3RyaW5nKGtleSkgPyBrZXkudHJpbSgpIDoga2V5LCBwYXRoLCBleHBvc2VkSGVscGVyc1xuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICBidWlsZChlbCwgcGF0aCA/IHBhdGguY29uY2F0KGtleSkgOiBba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIGlmICghdXRpbHMkMS5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbi8qKlxuICogSXQgZW5jb2RlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGluIHRoZSB1bnJlc2VydmVkIHNldCB3aXRoXG4gKiB0aGVpciBwZXJjZW50LWVuY29kZWQgZXF1aXZhbGVudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBlbmNvZGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlbmNvZGUkMShzdHIpIHtcbiAgY29uc3QgY2hhck1hcCA9IHtcbiAgICAnISc6ICclMjEnLFxuICAgIFwiJ1wiOiAnJTI3JyxcbiAgICAnKCc6ICclMjgnLFxuICAgICcpJzogJyUyOScsXG4gICAgJ34nOiAnJTdFJyxcbiAgICAnJTIwJzogJysnLFxuICAgICclMDAnOiAnXFx4MDAnXG4gIH07XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZywgZnVuY3Rpb24gcmVwbGFjZXIobWF0Y2gpIHtcbiAgICByZXR1cm4gY2hhck1hcFttYXRjaF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGFyYW1zIG9iamVjdCBhbmQgY29udmVydHMgaXQgdG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnZlcnRlZCB0byBhIEZvcm1EYXRhIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBwYXNzZWQgdG8gdGhlIEF4aW9zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5fcGFpcnMgPSBbXTtcblxuICBwYXJhbXMgJiYgdG9Gb3JtRGF0YShwYXJhbXMsIHRoaXMsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG5cbnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fcGFpcnMucHVzaChbbmFtZSwgdmFsdWVdKTtcbn07XG5cbnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgY29uc3QgX2VuY29kZSA9IGVuY29kZXIgPyBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSQxKTtcbiAgfSA6IGVuY29kZSQxO1xuXG4gIHJldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgcmV0dXJuIF9lbmNvZGUocGFpclswXSkgKyAnPScgKyBfZW5jb2RlKHBhaXJbMV0pO1xuICB9LCAnJykuam9pbignJicpO1xufTtcblxuLyoqXG4gKiBJdCByZXBsYWNlcyBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjaGFyYWN0ZXJzIGA6YCwgYCRgLCBgLGAsIGArYCwgYFtgLCBhbmQgYF1gIHdpdGggdGhlaXJcbiAqIFVSSSBlbmNvZGVkIGNvdW50ZXJwYXJ0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwgVGhlIHZhbHVlIHRvIGJlIGVuY29kZWQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcGFyYW0gez9vYmplY3R9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5mdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIFxuICBjb25zdCBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplO1xuXG4gIGxldCBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscyQxLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykgP1xuICAgICAgcGFyYW1zLnRvU3RyaW5nKCkgOlxuICAgICAgbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIGNvbnN0IGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZihcIiNcIik7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGludGVyY2VwdG9yIHdhcyByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscyQxLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgICAgZm4oaCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIEludGVyY2VwdG9yTWFuYWdlciQxID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuXG52YXIgdHJhbnNpdGlvbmFsRGVmYXVsdHMgPSB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG5cbnZhciBVUkxTZWFyY2hQYXJhbXMkMSA9IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnID8gVVJMU2VhcmNoUGFyYW1zIDogQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG5cbnZhciBGb3JtRGF0YSQxID0gdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDtcblxudmFyIEJsb2IkMSA9IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyA/IEJsb2IgOiBudWxsO1xuXG52YXIgcGxhdGZvcm0kMSA9IHtcbiAgaXNCcm93c2VyOiB0cnVlLFxuICBjbGFzc2VzOiB7XG4gICAgVVJMU2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXMkMSxcbiAgICBGb3JtRGF0YTogRm9ybURhdGEkMSxcbiAgICBCbG9iOiBCbG9iJDFcbiAgfSxcbiAgcHJvdG9jb2xzOiBbJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScsICdibG9iJywgJ3VybCcsICdkYXRhJ11cbn07XG5cbmNvbnN0IGhhc0Jyb3dzZXJFbnYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID0gKFxuICAocHJvZHVjdCkgPT4ge1xuICAgIHJldHVybiBoYXNCcm93c2VyRW52ICYmIFsnUmVhY3ROYXRpdmUnLCAnTmF0aXZlU2NyaXB0JywgJ05TJ10uaW5kZXhPZihwcm9kdWN0KSA8IDBcbiAgfSkodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnByb2R1Y3QpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciB3ZWJXb3JrZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBBbHRob3VnaCB0aGUgYGlzU3RhbmRhcmRCcm93c2VyRW52YCBtZXRob2QgaW5kaWNhdGVzIHRoYXRcbiAqIGBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlcmAsIHRoZSBXZWJXb3JrZXIgd2lsbCBzdGlsbCBiZVxuICogZmlsdGVyZWQgb3V0IGR1ZSB0byBpdHMganVkZ21lbnQgc3RhbmRhcmRcbiAqIGB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnYC5cbiAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtIHdoZW4gYXhpb3MgcG9zdCBgRm9ybURhdGFgIGluIHdlYldvcmtlclxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgPSAoKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUgJiZcbiAgICB0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzID09PSAnZnVuY3Rpb24nXG4gICk7XG59KSgpO1xuXG5jb25zdCBvcmlnaW4gPSBoYXNCcm93c2VyRW52ICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmIHx8ICdodHRwOi8vbG9jYWxob3N0JztcblxudmFyIHV0aWxzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGhhc0Jyb3dzZXJFbnY6IGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjogaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJFbnY6IGhhc1N0YW5kYXJkQnJvd3NlckVudixcbiAgb3JpZ2luOiBvcmlnaW5cbn0pO1xuXG52YXIgcGxhdGZvcm0gPSB7XG4gIC4uLnV0aWxzLFxuICAuLi5wbGF0Zm9ybSQxXG59O1xuXG5mdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIE9iamVjdC5hc3NpZ24oe1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uKHZhbHVlLCBrZXksIHBhdGgsIGhlbHBlcnMpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5pc05vZGUgJiYgdXRpbHMkMS5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoZWxwZXJzLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9LCBvcHRpb25zKSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcgbGlrZSBgZm9vW3hdW3ldW3pdYCBhbmQgcmV0dXJucyBhbiBhcnJheSBsaWtlIGBbJ2ZvbycsICd4JywgJ3knLCAneiddXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJvcFBhdGgobmFtZSkge1xuICAvLyBmb29beF1beV1bel1cbiAgLy8gZm9vLngueS56XG4gIC8vIGZvby14LXktelxuICAvLyBmb28geCB5IHpcbiAgcmV0dXJuIHV0aWxzJDEubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLCBuYW1lKS5tYXAobWF0Y2ggPT4ge1xuICAgIHJldHVybiBtYXRjaFswXSA9PT0gJ1tdJyA/ICcnIDogbWF0Y2hbMV0gfHwgbWF0Y2hbMF07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gYXJyYXkgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNvbnZlcnQgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBhcyB0aGUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9PYmplY3QoYXJyKSB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXJyKTtcbiAgbGV0IGk7XG4gIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICBsZXQga2V5O1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIG9ialtrZXldID0gYXJyW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIEZvcm1EYXRhIG9iamVjdCBhbmQgcmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3Q8c3RyaW5nLCBhbnk+IHwgbnVsbH0gVGhlIGNvbnZlcnRlZCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGZvcm1EYXRhVG9KU09OKGZvcm1EYXRhKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0LCBpbmRleCkge1xuICAgIGxldCBuYW1lID0gcGF0aFtpbmRleCsrXTtcblxuICAgIGlmIChuYW1lID09PSAnX19wcm90b19fJykgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBOdW1iZXIuaXNGaW5pdGUoK25hbWUpO1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID49IHBhdGgubGVuZ3RoO1xuICAgIG5hbWUgPSAhbmFtZSAmJiB1dGlscyQxLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzJDEuaGFzT3duUHJvcCh0YXJnZXQsIG5hbWUpKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFt0YXJnZXRbbmFtZV0sIHZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldFtuYW1lXSB8fCAhdXRpbHMkMS5pc09iamVjdCh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldFtuYW1lXSwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiB1dGlscyQxLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShmb3JtRGF0YSkgJiYgdXRpbHMkMS5pc0Z1bmN0aW9uKGZvcm1EYXRhLmVudHJpZXMpKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICB1dGlscyQxLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcsIHRyaWVzIHRvIHBhcnNlIGl0LCBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb25cbiAqIG9mIHRoZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcnNlciAtIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5jb2RlciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgcmF3VmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscyQxLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscyQxLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBbJ3hocicsICdodHRwJywgJ2ZldGNoJ10sXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgIGNvbnN0IGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzJDEuaXNPYmplY3QoZGF0YSk7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkICYmIHV0aWxzJDEuaXNIVE1MRm9ybShkYXRhKSkge1xuICAgICAgZGF0YSA9IG5ldyBGb3JtRGF0YShkYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc0Zvcm1EYXRhID0gdXRpbHMkMS5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgIHJldHVybiBoYXNKU09OQ29udGVudFR5cGUgPyBKU09OLnN0cmluZ2lmeShmb3JtRGF0YVRvSlNPTihkYXRhKSkgOiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh1dGlscyQxLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzQmxvYihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04JywgZmFsc2UpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgaXNGaWxlTGlzdDtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQpIHtcbiAgICAgIGlmIChjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoaXNGaWxlTGlzdCA9IHV0aWxzJDEuaXNGaWxlTGlzdChkYXRhKSkgfHwgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTEpIHtcbiAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoXG4gICAgICAgICAgaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSxcbiAgICAgICAgICBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpLFxuICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSApIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNSZXNwb25zZShkYXRhKSB8fCB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0oZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmIChkYXRhICYmIHV0aWxzJDEuaXNTdHJpbmcoZGF0YSkgJiYgKChmb3JjZWRKU09OUGFyc2luZyAmJiAhdGhpcy5yZXNwb25zZVR5cGUpIHx8IEpTT05SZXF1ZXN0ZWQpKSB7XG4gICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICBjb25zdCBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiBKU09OUmVxdWVzdGVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiBwbGF0Zm9ybS5jbGFzc2VzLkZvcm1EYXRhLFxuICAgIEJsb2I6IHBsYXRmb3JtLmNsYXNzZXMuQmxvYlxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufTtcblxudXRpbHMkMS5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIChtZXRob2QpID0+IHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudmFyIGRlZmF1bHRzJDEgPSBkZWZhdWx0cztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscyQxLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJhd0hlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbnZhciBwYXJzZUhlYWRlcnMgPSByYXdIZWFkZXJzID0+IHtcbiAgY29uc3QgcGFyc2VkID0ge307XG4gIGxldCBrZXk7XG4gIGxldCB2YWw7XG4gIGxldCBpO1xuXG4gIHJhd0hlYWRlcnMgJiYgcmF3SGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSBsaW5lLnN1YnN0cmluZyhpICsgMSkudHJpbSgpO1xuXG4gICAgaWYgKCFrZXkgfHwgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mW2tleV0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0pIHtcbiAgICAgICAgcGFyc2VkW2tleV0ucHVzaCh2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBbdmFsXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG5jb25zdCAkaW50ZXJuYWxzID0gU3ltYm9sKCdpbnRlcm5hbHMnKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyICYmIFN0cmluZyhoZWFkZXIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdXRpbHMkMS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5jb25zdCBpc1ZhbGlkSGVhZGVyTmFtZSA9IChzdHIpID0+IC9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3Qoc3RyLnRyaW0oKSk7XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVyVmFsdWUoY29udGV4dCwgdmFsdWUsIGhlYWRlciwgZmlsdGVyLCBpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMsIHZhbHVlLCBoZWFkZXIpO1xuICB9XG5cbiAgaWYgKGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICAgIHZhbHVlID0gaGVhZGVyO1xuICB9XG5cbiAgaWYgKCF1dGlscyQxLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuO1xuXG4gIGlmICh1dGlscyQxLmlzU3RyaW5nKGZpbHRlcikpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihmaWx0ZXIpICE9PSAtMTtcbiAgfVxuXG4gIGlmICh1dGlscyQxLmlzUmVnRXhwKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLnRlc3QodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlci50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csICh3LCBjaGFyLCBzdHIpID0+IHtcbiAgICAgIHJldHVybiBjaGFyLnRvVXBwZXJDYXNlKCkgKyBzdHI7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWNjZXNzb3JzKG9iaiwgaGVhZGVyKSB7XG4gIGNvbnN0IGFjY2Vzc29yTmFtZSA9IHV0aWxzJDEudG9DYW1lbENhc2UoJyAnICsgaGVhZGVyKTtcblxuICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaChtZXRob2ROYW1lID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24oYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5jYWxsKHRoaXMsIGhlYWRlciwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jbGFzcyBBeGlvc0hlYWRlcnMge1xuICBjb25zdHJ1Y3RvcihoZWFkZXJzKSB7XG4gICAgaGVhZGVycyAmJiB0aGlzLnNldChoZWFkZXJzKTtcbiAgfVxuXG4gIHNldChoZWFkZXIsIHZhbHVlT3JSZXdyaXRlLCByZXdyaXRlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFsSGVhZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZigha2V5IHx8IHNlbGZba2V5XSA9PT0gdW5kZWZpbmVkIHx8IF9yZXdyaXRlID09PSB0cnVlIHx8IChfcmV3cml0ZSA9PT0gdW5kZWZpbmVkICYmIHNlbGZba2V5XSAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMkMS5mb3JFYWNoKGhlYWRlcnMsIChfdmFsdWUsIF9oZWFkZXIpID0+IHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSk7XG5cbiAgICBpZiAodXRpbHMkMS5pc1BsYWluT2JqZWN0KGhlYWRlcikgfHwgaGVhZGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgc2V0SGVhZGVycyhoZWFkZXIsIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYodXRpbHMkMS5pc1N0cmluZyhoZWFkZXIpICYmIChoZWFkZXIgPSBoZWFkZXIudHJpbSgpKSAmJiAhaXNWYWxpZEhlYWRlck5hbWUoaGVhZGVyKSkge1xuICAgICAgc2V0SGVhZGVycyhwYXJzZUhlYWRlcnMoaGVhZGVyKSwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc0hlYWRlcnMoaGVhZGVyKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaGVhZGVyLmVudHJpZXMoKSkge1xuICAgICAgICBzZXRIZWFkZXIodmFsdWUsIGtleSwgcmV3cml0ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5zKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscyQxLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuY2FsbCh0aGlzLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscyQxLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgcmV0dXJuICEhKGtleSAmJiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGUoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7XG4gICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoX2hlYWRlcikge1xuICAgICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgX2hlYWRlcik7XG5cbiAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7XG4gICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTtcblxuICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbaGVhZGVyLCB2YWx1ZV0pID0+IGhlYWRlciArICc6ICcgKyB2YWx1ZSkuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNbJGludGVybmFsc10gPSAodGhpc1skaW50ZXJuYWxzXSA9IHtcbiAgICAgIGFjY2Vzc29yczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzJDEuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbJ0NvbnRlbnQtVHlwZScsICdDb250ZW50LUxlbmd0aCcsICdBY2NlcHQnLCAnQWNjZXB0LUVuY29kaW5nJywgJ1VzZXItQWdlbnQnLCAnQXV0aG9yaXphdGlvbiddKTtcblxuLy8gcmVzZXJ2ZWQgbmFtZXMgaG90Zml4XG51dGlscyQxLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMkMS5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbnZhciBBeGlvc0hlYWRlcnMkMSA9IEF4aW9zSGVhZGVycztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cyQxO1xuICBjb25zdCBjb250ZXh0ID0gcmVzcG9uc2UgfHwgY29uZmlnO1xuICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscyQxLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufVxuXG4vKipcbiAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMkMS5pbmhlcml0cyhDYW5jZWxlZEVycm9yLCBBeGlvc0Vycm9yLCB7XG4gIF9fQ0FOQ0VMX186IHRydWVcbn0pO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoYnl0ZXNDb3VudCAqIDEwMDAgLyBwYXNzZWQpIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG4vKipcbiAqIFRocm90dGxlIGRlY29yYXRvclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7TnVtYmVyfSBmcmVxXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGUoZm4sIGZyZXEpIHtcbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGxldCB0aHJlc2hvbGQgPSAxMDAwIC8gZnJlcTtcbiAgbGV0IGxhc3RBcmdzO1xuICBsZXQgdGltZXI7XG5cbiAgY29uc3QgaW52b2tlID0gKGFyZ3MsIG5vdyA9IERhdGUubm93KCkpID0+IHtcbiAgICB0aW1lc3RhbXAgPSBub3c7XG4gICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gIH07XG5cbiAgY29uc3QgdGhyb3R0bGVkID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHBhc3NlZCA9IG5vdyAtIHRpbWVzdGFtcDtcbiAgICBpZiAoIHBhc3NlZCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgIGludm9rZShhcmdzLCBub3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGludm9rZShsYXN0QXJncyk7XG4gICAgICAgIH0sIHRocmVzaG9sZCAtIHBhc3NlZCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4gbGFzdEFyZ3MgJiYgaW52b2tlKGxhc3RBcmdzKTtcblxuICByZXR1cm4gW3Rocm90dGxlZCwgZmx1c2hdO1xufVxuXG5jb25zdCBwcm9ncmVzc0V2ZW50UmVkdWNlciA9IChsaXN0ZW5lciwgaXNEb3dubG9hZFN0cmVhbSwgZnJlcSA9IDMpID0+IHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gdGhyb3R0bGUoZSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyAobG9hZGVkIC8gdG90YWwpIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZSxcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRvdGFsICE9IG51bGwsXG4gICAgICBbaXNEb3dubG9hZFN0cmVhbSA/ICdkb3dubG9hZCcgOiAndXBsb2FkJ106IHRydWVcbiAgICB9O1xuXG4gICAgbGlzdGVuZXIoZGF0YSk7XG4gIH0sIGZyZXEpO1xufTtcblxuY29uc3QgcHJvZ3Jlc3NFdmVudERlY29yYXRvciA9ICh0b3RhbCwgdGhyb3R0bGVkKSA9PiB7XG4gIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPSBudWxsO1xuXG4gIHJldHVybiBbKGxvYWRlZCkgPT4gdGhyb3R0bGVkWzBdKHtcbiAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgIHRvdGFsLFxuICAgIGxvYWRlZFxuICB9KSwgdGhyb3R0bGVkWzFdXTtcbn07XG5cbmNvbnN0IGFzeW5jRGVjb3JhdG9yID0gKGZuKSA9PiAoLi4uYXJncykgPT4gdXRpbHMkMS5hc2FwKCgpID0+IGZuKC4uLmFyZ3MpKTtcblxudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbi8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgY29uc3QgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgY29uc3QgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGV0IG9yaWdpblVSTDtcblxuICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXRzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgIGxldCBocmVmID0gdXJsO1xuXG4gICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgIH1cblxuICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSAodXRpbHMkMS5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgIH07XG4gIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH0pKCk7XG5cbnZhciBjb29raWVzID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAge1xuICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgY29uc3QgY29va2llID0gW25hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXTtcblxuICAgICAgdXRpbHMkMS5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzJDEuaXNTdHJpbmcocGF0aCkgJiYgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuXG4gICAgICB1dGlscyQxLmlzU3RyaW5nKGRvbWFpbikgJiYgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcblxuICAgICAgc2VjdXJlID09PSB0cnVlICYmIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcblxuICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgfSxcblxuICAgIHJlYWQobmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5mdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuXG5jb25zdCBoZWFkZXJzVG9PYmplY3QgPSAodGhpbmcpID0+IHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzJDEgPyB7IC4uLnRoaW5nIH0gOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5mdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgY29uc3QgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzJDEuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzJDEuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMkMS5tZXJnZS5jYWxsKHtjYXNlbGVzc30sIHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMkMS5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIsIGNhc2VsZXNzKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfSBlbHNlIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aFhTUkZUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBhZGFwdGVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlVHlwZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmQ29va2llTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmSGVhZGVyTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvblVwbG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBkZWNvbXByZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heENvbnRlbnRMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Qm9keUxlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBiZWZvcmVSZWRpcmVjdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc3BvcnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cEFnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBzQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgY2FuY2VsVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgc29ja2V0UGF0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIpID0+IG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHRydWUpXG4gIH07XG5cbiAgdXRpbHMkMS5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZzEsIGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBjb25zdCBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBtZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdLCBwcm9wKTtcbiAgICAodXRpbHMkMS5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxudmFyIHJlc29sdmVDb25maWcgPSAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IG5ld0NvbmZpZyA9IG1lcmdlQ29uZmlnKHt9LCBjb25maWcpO1xuXG4gIGxldCB7ZGF0YSwgd2l0aFhTUkZUb2tlbiwgeHNyZkhlYWRlck5hbWUsIHhzcmZDb29raWVOYW1lLCBoZWFkZXJzLCBhdXRofSA9IG5ld0NvbmZpZztcblxuICBuZXdDb25maWcuaGVhZGVycyA9IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGhlYWRlcnMpO1xuXG4gIG5ld0NvbmZpZy51cmwgPSBidWlsZFVSTChidWlsZEZ1bGxQYXRoKG5ld0NvbmZpZy5iYXNlVVJMLCBuZXdDb25maWcudXJsKSwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuXG4gIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgaWYgKGF1dGgpIHtcbiAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICtcbiAgICAgIGJ0b2EoKGF1dGgudXNlcm5hbWUgfHwgJycpICsgJzonICsgKGF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYXV0aC5wYXNzd29yZCkpIDogJycpKVxuICAgICk7XG4gIH1cblxuICBsZXQgY29udGVudFR5cGU7XG5cbiAgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKSkge1xuICAgIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKHVuZGVmaW5lZCk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9IGVsc2UgaWYgKChjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAvLyBmaXggc2VtaWNvbG9uIGR1cGxpY2F0aW9uIGlzc3VlIGZvciBSZWFjdE5hdGl2ZSBGb3JtRGF0YSBpbXBsZW1lbnRhdGlvblxuICAgICAgY29uc3QgW3R5cGUsIC4uLnRva2Vuc10gPSBjb250ZW50VHlwZSA/IGNvbnRlbnRUeXBlLnNwbGl0KCc7JykubWFwKHRva2VuID0+IHRva2VuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pIDogW107XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKFt0eXBlIHx8ICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgLi4udG9rZW5zXS5qb2luKCc7ICcpKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG5cbiAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMkMS5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihuZXdDb25maWcpKTtcblxuICAgIGlmICh3aXRoWFNSRlRva2VuIHx8ICh3aXRoWFNSRlRva2VuICE9PSBmYWxzZSAmJiBpc1VSTFNhbWVPcmlnaW4obmV3Q29uZmlnLnVybCkpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IHhzcmZIZWFkZXJOYW1lICYmIHhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZCh4c3JmQ29va2llTmFtZSk7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgaGVhZGVycy5zZXQoeHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0NvbmZpZztcbn07XG5cbmNvbnN0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCA9IHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCc7XG5cbnZhciB4aHJBZGFwdGVyID0gaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBjb25zdCBfY29uZmlnID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuICAgIGxldCByZXF1ZXN0RGF0YSA9IF9jb25maWcuZGF0YTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oX2NvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBsZXQge3Jlc3BvbnNlVHlwZSwgb25VcGxvYWRQcm9ncmVzcywgb25Eb3dubG9hZFByb2dyZXNzfSA9IF9jb25maWc7XG4gICAgbGV0IG9uQ2FuY2VsZWQ7XG4gICAgbGV0IHVwbG9hZFRocm90dGxlZCwgZG93bmxvYWRUaHJvdHRsZWQ7XG4gICAgbGV0IGZsdXNoVXBsb2FkLCBmbHVzaERvd25sb2FkO1xuXG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGZsdXNoVXBsb2FkICYmIGZsdXNoVXBsb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuICAgICAgZmx1c2hEb3dubG9hZCAmJiBmbHVzaERvd25sb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG5cbiAgICAgIF9jb25maWcuc2lnbmFsICYmIF9jb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub3BlbihfY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBfY29uZmlnLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IF9jb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShcbiAgICAgICAgJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCAmJiByZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBfY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gX2NvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgcmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShudWxsKTtcblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscyQxLmZvckVhY2gocmVxdWVzdEhlYWRlcnMudG9KU09OKCksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoX2NvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhX2NvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gX2NvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgIChbZG93bmxvYWRUaHJvdHRsZWQsIGZsdXNoRG93bmxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZG93bmxvYWRUaHJvdHRsZWQpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKG9uVXBsb2FkUHJvZ3Jlc3MgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIChbdXBsb2FkVGhyb3R0bGVkLCBmbHVzaFVwbG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKSk7XG5cbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdXBsb2FkVGhyb3R0bGVkKTtcblxuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZsdXNoVXBsb2FkKTtcbiAgICB9XG5cbiAgICBpZiAoX2NvbmZpZy5jYW5jZWxUb2tlbiB8fCBfY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgX2NvbmZpZy5zaWduYWwuYWJvcnRlZCA/IG9uQ2FuY2VsZWQoKSA6IF9jb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKF9jb25maWcudXJsKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgfSk7XG59O1xuXG5jb25zdCBjb21wb3NlU2lnbmFscyA9IChzaWduYWxzLCB0aW1lb3V0KSA9PiB7XG4gIGxldCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGxldCBhYm9ydGVkO1xuXG4gIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAoY2FuY2VsKSB7XG4gICAgaWYgKCFhYm9ydGVkKSB7XG4gICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICBjb25zdCBlcnIgPSBjYW5jZWwgaW5zdGFuY2VvZiBFcnJvciA/IGNhbmNlbCA6IHRoaXMucmVhc29uO1xuICAgICAgY29udHJvbGxlci5hYm9ydChlcnIgaW5zdGFuY2VvZiBBeGlvc0Vycm9yID8gZXJyIDogbmV3IENhbmNlbGVkRXJyb3IoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycikpO1xuICAgIH1cbiAgfTtcblxuICBsZXQgdGltZXIgPSB0aW1lb3V0ICYmIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIG9uYWJvcnQobmV3IEF4aW9zRXJyb3IoYHRpbWVvdXQgJHt0aW1lb3V0fSBvZiBtcyBleGNlZWRlZGAsIEF4aW9zRXJyb3IuRVRJTUVET1VUKSk7XG4gIH0sIHRpbWVvdXQpO1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgIGlmIChzaWduYWxzKSB7XG4gICAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgc2lnbmFscy5mb3JFYWNoKHNpZ25hbCA9PiB7XG4gICAgICAgIHNpZ25hbCAmJlxuICAgICAgICAoc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIgPyBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KSA6IHNpZ25hbC51bnN1YnNjcmliZShvbmFib3J0KSk7XG4gICAgICB9KTtcbiAgICAgIHNpZ25hbHMgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsICYmIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICYmIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uYWJvcnQpKTtcblxuICBjb25zdCB7c2lnbmFsfSA9IGNvbnRyb2xsZXI7XG5cbiAgc2lnbmFsLnVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmU7XG5cbiAgcmV0dXJuIFtzaWduYWwsICgpID0+IHtcbiAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIHRpbWVyID0gbnVsbDtcbiAgfV07XG59O1xuXG52YXIgY29tcG9zZVNpZ25hbHMkMSA9IGNvbXBvc2VTaWduYWxzO1xuXG5jb25zdCBzdHJlYW1DaHVuayA9IGZ1bmN0aW9uKiAoY2h1bmssIGNodW5rU2l6ZSkge1xuICBsZXQgbGVuID0gY2h1bmsuYnl0ZUxlbmd0aDtcblxuICBpZiAoIWNodW5rU2l6ZSB8fCBsZW4gPCBjaHVua1NpemUpIHtcbiAgICB5aWVsZCBjaHVuaztcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgcG9zID0gMDtcbiAgbGV0IGVuZDtcblxuICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgZW5kID0gcG9zICsgY2h1bmtTaXplO1xuICAgIHlpZWxkIGNodW5rLnNsaWNlKHBvcywgZW5kKTtcbiAgICBwb3MgPSBlbmQ7XG4gIH1cbn07XG5cbmNvbnN0IHJlYWRCeXRlcyA9IGFzeW5jIGZ1bmN0aW9uKiAoaXRlcmFibGUsIGNodW5rU2l6ZSwgZW5jb2RlKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgaXRlcmFibGUpIHtcbiAgICB5aWVsZCogc3RyZWFtQ2h1bmsoQXJyYXlCdWZmZXIuaXNWaWV3KGNodW5rKSA/IGNodW5rIDogKGF3YWl0IGVuY29kZShTdHJpbmcoY2h1bmspKSksIGNodW5rU2l6ZSk7XG4gIH1cbn07XG5cbmNvbnN0IHRyYWNrU3RyZWFtID0gKHN0cmVhbSwgY2h1bmtTaXplLCBvblByb2dyZXNzLCBvbkZpbmlzaCwgZW5jb2RlKSA9PiB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gcmVhZEJ5dGVzKHN0cmVhbSwgY2h1bmtTaXplLCBlbmNvZGUpO1xuXG4gIGxldCBieXRlcyA9IDA7XG4gIGxldCBkb25lO1xuICBsZXQgX29uRmluaXNoID0gKGUpID0+IHtcbiAgICBpZiAoIWRvbmUpIHtcbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgb25GaW5pc2ggJiYgb25GaW5pc2goZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgX29uRmluaXNoKCk7XG4gICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsZW4gPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICBpZiAob25Qcm9ncmVzcykge1xuICAgICAgICAgIGxldCBsb2FkZWRCeXRlcyA9IGJ5dGVzICs9IGxlbjtcbiAgICAgICAgICBvblByb2dyZXNzKGxvYWRlZEJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfb25GaW5pc2goZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2FuY2VsKHJlYXNvbikge1xuICAgICAgX29uRmluaXNoKHJlYXNvbik7XG4gICAgICByZXR1cm4gaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgfVxuICB9LCB7XG4gICAgaGlnaFdhdGVyTWFyazogMlxuICB9KVxufTtcblxuY29uc3QgaXNGZXRjaFN1cHBvcnRlZCA9IHR5cGVvZiBmZXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgUmVzcG9uc2UgPT09ICdmdW5jdGlvbic7XG5jb25zdCBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkID0gaXNGZXRjaFN1cHBvcnRlZCAmJiB0eXBlb2YgUmVhZGFibGVTdHJlYW0gPT09ICdmdW5jdGlvbic7XG5cbi8vIHVzZWQgb25seSBpbnNpZGUgdGhlIGZldGNoIGFkYXB0ZXJcbmNvbnN0IGVuY29kZVRleHQgPSBpc0ZldGNoU3VwcG9ydGVkICYmICh0eXBlb2YgVGV4dEVuY29kZXIgPT09ICdmdW5jdGlvbicgP1xuICAgICgoZW5jb2RlcikgPT4gKHN0cikgPT4gZW5jb2Rlci5lbmNvZGUoc3RyKSkobmV3IFRleHRFbmNvZGVyKCkpIDpcbiAgICBhc3luYyAoc3RyKSA9PiBuZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2Uoc3RyKS5hcnJheUJ1ZmZlcigpKVxuKTtcblxuY29uc3QgdGVzdCA9IChmbiwgLi4uYXJncykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAhIWZuKC4uLmFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn07XG5cbmNvbnN0IHN1cHBvcnRzUmVxdWVzdFN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiYgdGVzdCgoKSA9PiB7XG4gIGxldCBkdXBsZXhBY2Nlc3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IGhhc0NvbnRlbnRUeXBlID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgYm9keTogbmV3IFJlYWRhYmxlU3RyZWFtKCksXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgZ2V0IGR1cGxleCgpIHtcbiAgICAgIGR1cGxleEFjY2Vzc2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiAnaGFsZic7XG4gICAgfSxcbiAgfSkuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpO1xuXG4gIHJldHVybiBkdXBsZXhBY2Nlc3NlZCAmJiAhaGFzQ29udGVudFR5cGU7XG59KTtcblxuY29uc3QgREVGQVVMVF9DSFVOS19TSVpFID0gNjQgKiAxMDI0O1xuXG5jb25zdCBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJlxuICB0ZXN0KCgpID0+IHV0aWxzJDEuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoJycpLmJvZHkpKTtcblxuXG5jb25zdCByZXNvbHZlcnMgPSB7XG4gIHN0cmVhbTogc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAoKHJlcykgPT4gcmVzLmJvZHkpXG59O1xuXG5pc0ZldGNoU3VwcG9ydGVkICYmICgoKHJlcykgPT4ge1xuICBbJ3RleHQnLCAnYXJyYXlCdWZmZXInLCAnYmxvYicsICdmb3JtRGF0YScsICdzdHJlYW0nXS5mb3JFYWNoKHR5cGUgPT4ge1xuICAgICFyZXNvbHZlcnNbdHlwZV0gJiYgKHJlc29sdmVyc1t0eXBlXSA9IHV0aWxzJDEuaXNGdW5jdGlvbihyZXNbdHlwZV0pID8gKHJlcykgPT4gcmVzW3R5cGVdKCkgOlxuICAgICAgKF8sIGNvbmZpZykgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgUmVzcG9uc2UgdHlwZSAnJHt0eXBlfScgaXMgbm90IHN1cHBvcnRlZGAsIEF4aW9zRXJyb3IuRVJSX05PVF9TVVBQT1JULCBjb25maWcpO1xuICAgICAgfSk7XG4gIH0pO1xufSkobmV3IFJlc3BvbnNlKSk7XG5cbmNvbnN0IGdldEJvZHlMZW5ndGggPSBhc3luYyAoYm9keSkgPT4ge1xuICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZih1dGlscyQxLmlzQmxvYihib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemU7XG4gIH1cblxuICBpZih1dGlscyQxLmlzU3BlY0NvbXBsaWFudEZvcm0oYm9keSkpIHtcbiAgICByZXR1cm4gKGF3YWl0IG5ldyBSZXF1ZXN0KGJvZHkpLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7XG4gIH1cblxuICBpZih1dGlscyQxLmlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpIHx8IHV0aWxzJDEuaXNBcnJheUJ1ZmZlcihib2R5KSkge1xuICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGg7XG4gIH1cblxuICBpZih1dGlscyQxLmlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG4gICAgYm9keSA9IGJvZHkgKyAnJztcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNTdHJpbmcoYm9keSkpIHtcbiAgICByZXR1cm4gKGF3YWl0IGVuY29kZVRleHQoYm9keSkpLmJ5dGVMZW5ndGg7XG4gIH1cbn07XG5cbmNvbnN0IHJlc29sdmVCb2R5TGVuZ3RoID0gYXN5bmMgKGhlYWRlcnMsIGJvZHkpID0+IHtcbiAgY29uc3QgbGVuZ3RoID0gdXRpbHMkMS50b0Zpbml0ZU51bWJlcihoZWFkZXJzLmdldENvbnRlbnRMZW5ndGgoKSk7XG5cbiAgcmV0dXJuIGxlbmd0aCA9PSBudWxsID8gZ2V0Qm9keUxlbmd0aChib2R5KSA6IGxlbmd0aDtcbn07XG5cbnZhciBmZXRjaEFkYXB0ZXIgPSBpc0ZldGNoU3VwcG9ydGVkICYmIChhc3luYyAoY29uZmlnKSA9PiB7XG4gIGxldCB7XG4gICAgdXJsLFxuICAgIG1ldGhvZCxcbiAgICBkYXRhLFxuICAgIHNpZ25hbCxcbiAgICBjYW5jZWxUb2tlbixcbiAgICB0aW1lb3V0LFxuICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICBvblVwbG9hZFByb2dyZXNzLFxuICAgIHJlc3BvbnNlVHlwZSxcbiAgICBoZWFkZXJzLFxuICAgIHdpdGhDcmVkZW50aWFscyA9ICdzYW1lLW9yaWdpbicsXG4gICAgZmV0Y2hPcHRpb25zXG4gIH0gPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG5cbiAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlID8gKHJlc3BvbnNlVHlwZSArICcnKS50b0xvd2VyQ2FzZSgpIDogJ3RleHQnO1xuXG4gIGxldCBbY29tcG9zZWRTaWduYWwsIHN0b3BUaW1lb3V0XSA9IChzaWduYWwgfHwgY2FuY2VsVG9rZW4gfHwgdGltZW91dCkgP1xuICAgIGNvbXBvc2VTaWduYWxzJDEoW3NpZ25hbCwgY2FuY2VsVG9rZW5dLCB0aW1lb3V0KSA6IFtdO1xuXG4gIGxldCBmaW5pc2hlZCwgcmVxdWVzdDtcblxuICBjb25zdCBvbkZpbmlzaCA9ICgpID0+IHtcbiAgICAhZmluaXNoZWQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb21wb3NlZFNpZ25hbCAmJiBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuXG4gICAgZmluaXNoZWQgPSB0cnVlO1xuICB9O1xuXG4gIGxldCByZXF1ZXN0Q29udGVudExlbmd0aDtcblxuICB0cnkge1xuICAgIGlmIChcbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MgJiYgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtICYmIG1ldGhvZCAhPT0gJ2dldCcgJiYgbWV0aG9kICE9PSAnaGVhZCcgJiZcbiAgICAgIChyZXF1ZXN0Q29udGVudExlbmd0aCA9IGF3YWl0IHJlc29sdmVCb2R5TGVuZ3RoKGhlYWRlcnMsIGRhdGEpKSAhPT0gMFxuICAgICkge1xuICAgICAgbGV0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBkYXRhLFxuICAgICAgICBkdXBsZXg6IFwiaGFsZlwiXG4gICAgICB9KTtcblxuICAgICAgbGV0IGNvbnRlbnRUeXBlSGVhZGVyO1xuXG4gICAgICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGRhdGEpICYmIChjb250ZW50VHlwZUhlYWRlciA9IF9yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZUhlYWRlcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChfcmVxdWVzdC5ib2R5KSB7XG4gICAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPSBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICAgIHJlcXVlc3RDb250ZW50TGVuZ3RoLFxuICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uVXBsb2FkUHJvZ3Jlc3MpKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEgPSB0cmFja1N0cmVhbShfcmVxdWVzdC5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsIGZsdXNoLCBlbmNvZGVUZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcod2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ29taXQnO1xuICAgIH1cblxuICAgIHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgIHNpZ25hbDogY29tcG9zZWRTaWduYWwsXG4gICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczogaGVhZGVycy5ub3JtYWxpemUoKS50b0pTT04oKSxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICBkdXBsZXg6IFwiaGFsZlwiLFxuICAgICAgY3JlZGVudGlhbHM6IHdpdGhDcmVkZW50aWFsc1xuICAgIH0pO1xuXG4gICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVxdWVzdCk7XG5cbiAgICBjb25zdCBpc1N0cmVhbVJlc3BvbnNlID0gc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAocmVzcG9uc2VUeXBlID09PSAnc3RyZWFtJyB8fCByZXNwb25zZVR5cGUgPT09ICdyZXNwb25zZScpO1xuXG4gICAgaWYgKHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKG9uRG93bmxvYWRQcm9ncmVzcyB8fCBpc1N0cmVhbVJlc3BvbnNlKSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gICAgICBbJ3N0YXR1cycsICdzdGF0dXNUZXh0JywgJ2hlYWRlcnMnXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICBvcHRpb25zW3Byb3BdID0gcmVzcG9uc2VbcHJvcF07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50TGVuZ3RoID0gdXRpbHMkMS50b0Zpbml0ZU51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSk7XG5cbiAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPSBvbkRvd25sb2FkUHJvZ3Jlc3MgJiYgcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgcmVzcG9uc2VDb250ZW50TGVuZ3RoLFxuICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvbkRvd25sb2FkUHJvZ3Jlc3MpLCB0cnVlKVxuICAgICAgKSB8fCBbXTtcblxuICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoXG4gICAgICAgIHRyYWNrU3RyZWFtKHJlc3BvbnNlLmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgKCkgPT4ge1xuICAgICAgICAgIGZsdXNoICYmIGZsdXNoKCk7XG4gICAgICAgICAgaXNTdHJlYW1SZXNwb25zZSAmJiBvbkZpbmlzaCgpO1xuICAgICAgICB9LCBlbmNvZGVUZXh0KSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xuXG4gICAgbGV0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHJlc29sdmVyc1t1dGlscyQxLmZpbmRLZXkocmVzb2x2ZXJzLCByZXNwb25zZVR5cGUpIHx8ICd0ZXh0J10ocmVzcG9uc2UsIGNvbmZpZyk7XG5cbiAgICAhaXNTdHJlYW1SZXNwb25zZSAmJiBvbkZpbmlzaCgpO1xuXG4gICAgc3RvcFRpbWVvdXQgJiYgc3RvcFRpbWVvdXQoKTtcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgaGVhZGVyczogQXhpb3NIZWFkZXJzJDEuZnJvbShyZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfSk7XG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgb25GaW5pc2goKTtcblxuICAgIGlmIChlcnIgJiYgZXJyLm5hbWUgPT09ICdUeXBlRXJyb3InICYmIC9mZXRjaC9pLnRlc3QoZXJyLm1lc3NhZ2UpKSB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKFxuICAgICAgICBuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCksXG4gICAgICAgIHtcbiAgICAgICAgICBjYXVzZTogZXJyLmNhdXNlIHx8IGVyclxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuXG4gICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGVyciwgZXJyICYmIGVyci5jb2RlLCBjb25maWcsIHJlcXVlc3QpO1xuICB9XG59KTtcblxuY29uc3Qga25vd25BZGFwdGVycyA9IHtcbiAgaHR0cDogaHR0cEFkYXB0ZXIsXG4gIHhocjogeGhyQWRhcHRlcixcbiAgZmV0Y2g6IGZldGNoQWRhcHRlclxufTtcblxudXRpbHMkMS5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWV9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnYWRhcHRlck5hbWUnLCB7dmFsdWV9KTtcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlclJlYXNvbiA9IChyZWFzb24pID0+IGAtICR7cmVhc29ufWA7XG5cbmNvbnN0IGlzUmVzb2x2ZWRIYW5kbGUgPSAoYWRhcHRlcikgPT4gdXRpbHMkMS5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbnZhciBhZGFwdGVycyA9IHtcbiAgZ2V0QWRhcHRlcjogKGFkYXB0ZXJzKSA9PiB7XG4gICAgYWRhcHRlcnMgPSB1dGlscyQxLmlzQXJyYXkoYWRhcHRlcnMpID8gYWRhcHRlcnMgOiBbYWRhcHRlcnNdO1xuXG4gICAgY29uc3Qge2xlbmd0aH0gPSBhZGFwdGVycztcbiAgICBsZXQgbmFtZU9yQWRhcHRlcjtcbiAgICBsZXQgYWRhcHRlcjtcblxuICAgIGNvbnN0IHJlamVjdGVkUmVhc29ucyA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgbmFtZU9yQWRhcHRlciA9IGFkYXB0ZXJzW2ldO1xuICAgICAgbGV0IGlkO1xuXG4gICAgICBhZGFwdGVyID0gbmFtZU9yQWRhcHRlcjtcblxuICAgICAgaWYgKCFpc1Jlc29sdmVkSGFuZGxlKG5hbWVPckFkYXB0ZXIpKSB7XG4gICAgICAgIGFkYXB0ZXIgPSBrbm93bkFkYXB0ZXJzWyhpZCA9IFN0cmluZyhuYW1lT3JBZGFwdGVyKSkudG9Mb3dlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGFkYXB0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBVbmtub3duIGFkYXB0ZXIgJyR7aWR9J2ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGFwdGVyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZWplY3RlZFJlYXNvbnNbaWQgfHwgJyMnICsgaV0gPSBhZGFwdGVyO1xuICAgIH1cblxuICAgIGlmICghYWRhcHRlcikge1xuXG4gICAgICBjb25zdCByZWFzb25zID0gT2JqZWN0LmVudHJpZXMocmVqZWN0ZWRSZWFzb25zKVxuICAgICAgICAubWFwKChbaWQsIHN0YXRlXSkgPT4gYGFkYXB0ZXIgJHtpZH0gYCArXG4gICAgICAgICAgKHN0YXRlID09PSBmYWxzZSA/ICdpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCcgOiAnaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQnKVxuICAgICAgICApO1xuXG4gICAgICBsZXQgcyA9IGxlbmd0aCA/XG4gICAgICAgIChyZWFzb25zLmxlbmd0aCA+IDEgPyAnc2luY2UgOlxcbicgKyByZWFzb25zLm1hcChyZW5kZXJSZWFzb24pLmpvaW4oJ1xcbicpIDogJyAnICsgcmVuZGVyUmVhc29uKHJlYXNvbnNbMF0pKSA6XG4gICAgICAgICdhcyBubyBhZGFwdGVyIHNwZWNpZmllZCc7XG5cbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBgVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCBgICsgcyxcbiAgICAgICAgJ0VSUl9OT1RfU1VQUE9SVCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkYXB0ZXI7XG4gIH0sXG4gIGFkYXB0ZXJzOiBrbm93bkFkYXB0ZXJzXG59O1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbmZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzJDEuYWRhcHRlcik7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICBjb25maWcsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICByZXNwb25zZVxuICAgICk7XG5cbiAgICByZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShyZXNwb25zZS5oZWFkZXJzKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjEuNy40XCI7XG5cbmNvbnN0IHZhbGlkYXRvcnMkMSA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9ycyQxW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMkMS50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiAodmFsdWUsIG9wdCwgb3B0cykgPT4ge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9ERVBSRUNBVEVEXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBjb25zdCBvcHQgPSBrZXlzW2ldO1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbnZhciB2YWxpZGF0b3IgPSB7XG4gIGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnM6IHZhbGlkYXRvcnMkMVxufTtcblxuY29uc3QgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5jbGFzcyBBeGlvcyB7XG4gIGNvbnN0cnVjdG9yKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlciQxKCksXG4gICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlciQxKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxldCBkdW1teTtcblxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15ID0ge30pIDogKGR1bW15ID0gbmV3IEVycm9yKCkpO1xuXG4gICAgICAgIC8vIHNsaWNlIG9mZiB0aGUgRXJyb3I6IC4uLiBsaW5lXG4gICAgICAgIGNvbnN0IHN0YWNrID0gZHVtbXkuc3RhY2sgPyBkdW1teS5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCAnJykgOiAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgICAgZXJyLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lc1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2sgJiYgIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrLnJlcGxhY2UoL14uK1xcbi4rXFxuLywgJycpKSkge1xuICAgICAgICAgICAgZXJyLnN0YWNrICs9ICdcXG4nICsgc3RhY2s7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaWdub3JlIHRoZSBjYXNlIHdoZXJlIFwic3RhY2tcIiBpcyBhbiB1bi13cml0YWJsZSBwcm9wZXJ0eVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBfcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICAgIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZ09yVXJsIHx8IHt9O1xuICAgIH1cblxuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgICBjb25zdCB7dHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzfSA9IGNvbmZpZztcblxuICAgIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXNTZXJpYWxpemVyICE9IG51bGwpIHtcbiAgICAgIGlmICh1dGlscyQxLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhwYXJhbXNTZXJpYWxpemVyLCB7XG4gICAgICAgICAgZW5jb2RlOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICAgIHNlcmlhbGl6ZTogdmFsaWRhdG9ycy5mdW5jdGlvblxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICAgIGNvbmZpZy5tZXRob2QgPSAoY29uZmlnLm1ldGhvZCB8fCB0aGlzLmRlZmF1bHRzLm1ldGhvZCB8fCAnZ2V0JykudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICAgIGxldCBjb250ZXh0SGVhZGVycyA9IGhlYWRlcnMgJiYgdXRpbHMkMS5tZXJnZShcbiAgICAgIGhlYWRlcnMuY29tbW9uLFxuICAgICAgaGVhZGVyc1tjb25maWcubWV0aG9kXVxuICAgICk7XG5cbiAgICBoZWFkZXJzICYmIHV0aWxzJDEuZm9yRWFjaChcbiAgICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgICAgKG1ldGhvZCkgPT4ge1xuICAgICAgICBkZWxldGUgaGVhZGVyc1ttZXRob2RdO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gICAgY29uc3QgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICBsZXQgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgbGV0IHByb21pc2U7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBsZW47XG5cbiAgICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgICAgY29uc3QgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LmJpbmQodGhpcyksIHVuZGVmaW5lZF07XG4gICAgICBjaGFpbi51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBjaGFpbi5wdXNoLmFwcGx5KGNoYWluLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgbGVuID0gY2hhaW4ubGVuZ3RoO1xuXG4gICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW5baSsrXSwgY2hhaW5baSsrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIGxlbiA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIGxldCBuZXdDb25maWcgPSBjb25maWc7XG5cbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBjb25zdCBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICBjb25zdCBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvblJlamVjdGVkLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdC5jYWxsKHRoaXMsIG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaSA9IDA7XG4gICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRVcmkoY29uZmlnKSB7XG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIHJldHVybiBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuICB9XG59XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMkMS5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzJDEuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaXNGb3JtID8ge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgfSA6IHt9LFxuICAgICAgICB1cmwsXG4gICAgICAgIGRhdGFcbiAgICAgIH0pKTtcbiAgICB9O1xuICB9XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBnZW5lcmF0ZUhUVFBNZXRob2QoKTtcblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kICsgJ0Zvcm0nXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCh0cnVlKTtcbn0pO1xuXG52YXIgQXhpb3MkMSA9IEF4aW9zO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbihjYW5jZWwgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IG9uZnVsZmlsbGVkID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbnZhciBDYW5jZWxUb2tlbiQxID0gQ2FuY2VsVG9rZW47XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMkMS5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuXG5jb25zdCBIdHRwU3RhdHVzQ29kZSA9IHtcbiAgQ29udGludWU6IDEwMCxcbiAgU3dpdGNoaW5nUHJvdG9jb2xzOiAxMDEsXG4gIFByb2Nlc3Npbmc6IDEwMixcbiAgRWFybHlIaW50czogMTAzLFxuICBPazogMjAwLFxuICBDcmVhdGVkOiAyMDEsXG4gIEFjY2VwdGVkOiAyMDIsXG4gIE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjogMjAzLFxuICBOb0NvbnRlbnQ6IDIwNCxcbiAgUmVzZXRDb250ZW50OiAyMDUsXG4gIFBhcnRpYWxDb250ZW50OiAyMDYsXG4gIE11bHRpU3RhdHVzOiAyMDcsXG4gIEFscmVhZHlSZXBvcnRlZDogMjA4LFxuICBJbVVzZWQ6IDIyNixcbiAgTXVsdGlwbGVDaG9pY2VzOiAzMDAsXG4gIE1vdmVkUGVybWFuZW50bHk6IDMwMSxcbiAgRm91bmQ6IDMwMixcbiAgU2VlT3RoZXI6IDMwMyxcbiAgTm90TW9kaWZpZWQ6IDMwNCxcbiAgVXNlUHJveHk6IDMwNSxcbiAgVW51c2VkOiAzMDYsXG4gIFRlbXBvcmFyeVJlZGlyZWN0OiAzMDcsXG4gIFBlcm1hbmVudFJlZGlyZWN0OiAzMDgsXG4gIEJhZFJlcXVlc3Q6IDQwMCxcbiAgVW5hdXRob3JpemVkOiA0MDEsXG4gIFBheW1lbnRSZXF1aXJlZDogNDAyLFxuICBGb3JiaWRkZW46IDQwMyxcbiAgTm90Rm91bmQ6IDQwNCxcbiAgTWV0aG9kTm90QWxsb3dlZDogNDA1LFxuICBOb3RBY2NlcHRhYmxlOiA0MDYsXG4gIFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDogNDA3LFxuICBSZXF1ZXN0VGltZW91dDogNDA4LFxuICBDb25mbGljdDogNDA5LFxuICBHb25lOiA0MTAsXG4gIExlbmd0aFJlcXVpcmVkOiA0MTEsXG4gIFByZWNvbmRpdGlvbkZhaWxlZDogNDEyLFxuICBQYXlsb2FkVG9vTGFyZ2U6IDQxMyxcbiAgVXJpVG9vTG9uZzogNDE0LFxuICBVbnN1cHBvcnRlZE1lZGlhVHlwZTogNDE1LFxuICBSYW5nZU5vdFNhdGlzZmlhYmxlOiA0MTYsXG4gIEV4cGVjdGF0aW9uRmFpbGVkOiA0MTcsXG4gIEltQVRlYXBvdDogNDE4LFxuICBNaXNkaXJlY3RlZFJlcXVlc3Q6IDQyMSxcbiAgVW5wcm9jZXNzYWJsZUVudGl0eTogNDIyLFxuICBMb2NrZWQ6IDQyMyxcbiAgRmFpbGVkRGVwZW5kZW5jeTogNDI0LFxuICBUb29FYXJseTogNDI1LFxuICBVcGdyYWRlUmVxdWlyZWQ6IDQyNixcbiAgUHJlY29uZGl0aW9uUmVxdWlyZWQ6IDQyOCxcbiAgVG9vTWFueVJlcXVlc3RzOiA0MjksXG4gIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTogNDMxLFxuICBVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczogNDUxLFxuICBJbnRlcm5hbFNlcnZlckVycm9yOiA1MDAsXG4gIE5vdEltcGxlbWVudGVkOiA1MDEsXG4gIEJhZEdhdGV3YXk6IDUwMixcbiAgU2VydmljZVVuYXZhaWxhYmxlOiA1MDMsXG4gIEdhdGV3YXlUaW1lb3V0OiA1MDQsXG4gIEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOiA1MDUsXG4gIFZhcmlhbnRBbHNvTmVnb3RpYXRlczogNTA2LFxuICBJbnN1ZmZpY2llbnRTdG9yYWdlOiA1MDcsXG4gIExvb3BEZXRlY3RlZDogNTA4LFxuICBOb3RFeHRlbmRlZDogNTEwLFxuICBOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDogNTExLFxufTtcblxuT2JqZWN0LmVudHJpZXMoSHR0cFN0YXR1c0NvZGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICBIdHRwU3RhdHVzQ29kZVt2YWx1ZV0gPSBrZXk7XG59KTtcblxudmFyIEh0dHBTdGF0dXNDb2RlJDEgPSBIdHRwU3RhdHVzQ29kZTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zJDEoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcyQxLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscyQxLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MkMS5wcm90b3R5cGUsIGNvbnRleHQsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzJDEuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbmNvbnN0IGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMkMSk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcyQxO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSBDYW5jZWxlZEVycm9yO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSBDYW5jZWxUb2tlbiQxO1xuYXhpb3MuaXNDYW5jZWwgPSBpc0NhbmNlbDtcbmF4aW9zLlZFUlNJT04gPSBWRVJTSU9OO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHRvRm9ybURhdGE7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gQXhpb3NFcnJvcjtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbmF4aW9zLnNwcmVhZCA9IHNwcmVhZDtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gaXNBeGlvc0Vycm9yO1xuXG4vLyBFeHBvc2UgbWVyZ2VDb25maWdcbmF4aW9zLm1lcmdlQ29uZmlnID0gbWVyZ2VDb25maWc7XG5cbmF4aW9zLkF4aW9zSGVhZGVycyA9IEF4aW9zSGVhZGVycyQxO1xuXG5heGlvcy5mb3JtVG9KU09OID0gdGhpbmcgPT4gZm9ybURhdGFUb0pTT04odXRpbHMkMS5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG5cbmF4aW9zLmdldEFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlJDE7XG5cbmF4aW9zLmRlZmF1bHQgPSBheGlvcztcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF4aW9zLmNqcy5tYXBcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5ubWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NzExKTtcbiJdLCJuYW1lcyI6WyJEb21haW4iLCJkYXRhIiwicmVjZWl2aW5nIiwic2VuZGluZyIsInRoaXMiLCJuYW1lIiwicmVxdWlyZV90bHMiLCJza2lwX3ZlcmlmaWNhdGlvbiIsInN0YXRlIiwid2lsZGNhcmQiLCJzcGFtX2FjdGlvbiIsImNyZWF0ZWRfYXQiLCJEYXRlIiwic210cF9wYXNzd29yZCIsInNtdHBfbG9naW4iLCJ0eXBlIiwicmVjZWl2aW5nX2Ruc19yZWNvcmRzIiwic2VuZGluZ19kbnNfcmVjb3JkcyIsImlkIiwiaXNfZGlzYWJsZWQiLCJ3ZWJfcHJlZml4Iiwid2ViX3NjaGVtZSIsInVzZV9hdXRvbWF0aWNfc2VuZGVyX3NlY3VyaXR5IiwiZHluYW1pY1Byb3BlcnRpZXMiLCJyZWR1Y2UiLCJhY2MiLCJwcm9wZXJ0eU5hbWUiLCJPYmplY3QiLCJhc3NpZ24iLCJ1cmxfam9pbl8xIiwiX19pbXBvcnREZWZhdWx0IiwicmVxdWlyZSIsIkVycm9yXzEiLCJkb21haW5fMSIsIkRvbWFpbnNDbGllbnQiLCJyZXF1ZXN0IiwiZG9tYWluQ3JlZGVudGlhbHNDbGllbnQiLCJkb21haW5UZW1wbGF0ZXNDbGllbnQiLCJkb21haW5UYWdzQ2xpZW50IiwiZG9tYWluVHJhY2tpbmciLCJsb2dnZXIiLCJjb25zb2xlIiwiZG9tYWluQ3JlZGVudGlhbHMiLCJkb21haW5UZW1wbGF0ZXMiLCJkb21haW5UYWdzIiwicHJvdG90eXBlIiwiX2hhbmRsZUJvb2xWYWx1ZXMiLCJwcm9wc0ZvclJlcGxhY2VtZW50IiwicmVwbGFjZWRQcm9wcyIsImtleXMiLCJrZXkiLCJwcm9wIiwidmFsdWUiLCJ0b1N0cmluZyIsIl9fYXNzaWduIiwiX3BhcnNlTWVzc2FnZSIsInJlc3BvbnNlIiwiYm9keSIsInBhcnNlRG9tYWluTGlzdCIsIml0ZW1zIiwibWFwIiwiaXRlbSIsImRlZmF1bHQiLCJfcGFyc2VEb21haW4iLCJkb21haW4iLCJsaXN0IiwicXVlcnkiLCJfdGhpcyIsImdldCIsInRoZW4iLCJyZXMiLCJwcmVwYXJlZFF1ZXJ5IiwiX2EiLCJleHRlbmRlZCIsIl9iIiwid2l0aF9kbnMiLCJjb25jYXQiLCJjcmVhdGUiLCJwb3N0T2JqIiwicG9zdFdpdGhGRCIsInVwZGF0ZSIsInB1dERhdGEiLCJwdXRXaXRoRkQiLCJ2ZXJpZnkiLCJwdXQiLCJkZXN0cm95IiwiZGVsZXRlIiwiZ2V0Q29ubmVjdGlvbiIsInVwZGF0ZUNvbm5lY3Rpb24iLCJnZXRUcmFja2luZyIsIndhcm4iLCJ1cGRhdGVUcmFja2luZyIsImdldElwcyIsImFzc2lnbklwIiwiaXAiLCJkZWxldGVJcCIsImxpbmtJcFBvb2wiLCJwb29sSWQiLCJwb29sX2lkIiwidW5saW5rSXBQb2xsIiwicmVwbGFjZW1lbnQiLCJzZWFyY2hQYXJhbXMiLCJnZXRVc2VyRGF0YUVycm9yIiwidXBkYXRlREtJTUF1dGhvcml0eSIsInNlbGYiLCJ1cGRhdGVES0lNU2VsZWN0b3IiLCJka2ltU2VsZWN0b3IiLCJzdGF0dXMiLCJzZW50IiwibWVzc2FnZSIsInVwZGF0ZVdlYlByZWZpeCIsIndlYlByZWZpeCIsIkRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IiwiYmFzZVJvdXRlIiwiX3BhcnNlRG9tYWluQ3JlZGVudGlhbHNMaXN0IiwidG90YWxDb3VudCIsInRvdGFsX2NvdW50IiwiX3BhcnNlTWVzc2FnZVJlc3BvbnNlIiwiX3BhcnNlRGVsZXRlZFJlc3BvbnNlIiwic3BlYyIsImNyZWRlbnRpYWxzTG9naW4iLCJOYXZpZ2F0aW9uVGhydVBhZ2VzXzEiLCJEb21haW5UYWciLCJ0YWdJbmZvIiwidGFnIiwiZGVzY3JpcHRpb24iLCJleHBvcnRzIiwiRG9tYWluVGFnU3RhdGlzdGljIiwidGFnU3RhdGlzdGljSW5mbyIsInN0YXJ0IiwiZW5kIiwicmVzb2x1dGlvbiIsInN0YXRzIiwic3RhdCIsInRpbWUiLCJEb21haW5UYWdzQ2xpZW50IiwiX3N1cGVyIiwiY2FsbCIsIl9fZXh0ZW5kcyIsInBhcnNlTGlzdCIsInBhZ2VzIiwicGFyc2VQYWdlTGlua3MiLCJfcGFyc2VUYWdTdGF0aXN0aWMiLCJyZXF1ZXN0TGlzdFdpdGhQYWdlcyIsInN0YXRpc3RpYyIsImNvdW50cmllcyIsInByb3ZpZGVycyIsImRldmljZXMiLCJEb21haW5UZW1wbGF0ZUl0ZW0iLCJkb21haW5UZW1wbGF0ZUZyb21BUEkiLCJjcmVhdGVkQXQiLCJjcmVhdGVkQnkiLCJ2ZXJzaW9uIiwidmVyc2lvbnMiLCJsZW5ndGgiLCJyZXN1bHQiLCJEb21haW5UZW1wbGF0ZXNDbGllbnQiLCJwYXJzZUNyZWF0aW9uUmVzcG9uc2UiLCJ0ZW1wbGF0ZSIsInBhcnNlQ3JlYXRpb25WZXJzaW9uUmVzcG9uc2UiLCJwYXJzZU11dGF0aW9uUmVzcG9uc2UiLCJ0ZW1wbGF0ZU5hbWUiLCJwYXJzZU5vdGlmaWNhdGlvblJlc3BvbnNlIiwicGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZSIsInRlbXBsYXRlVmVyc2lvbiIsImQiLCJwYXJzZUxpc3RUZW1wbGF0ZVZlcnNpb25zIiwiZGVzdHJveUFsbCIsImxpc3RWZXJzaW9ucyIsImdldFZlcnNpb24iLCJjcmVhdGVWZXJzaW9uIiwidXBkYXRlVmVyc2lvbiIsImRlc3Ryb3lWZXJzaW9uIiwiRG9tYWluVHJhY2tpbmdDbGllbnQiLCJfcGFyc2VUcmFja2luZ1NldHRpbmdzIiwidHJhY2tpbmciLCJfcGFyc2VUcmFja2luZ1VwZGF0ZSIsIl9pc09wZW5UcmFja2luZ0luZm9XaXRQbGFjZSIsIm9iaiIsInJlc3BvbnNlU3RhdHVzQ29kZSIsImdlbmVyYXRlIiwicG9zdCIsInJlZ2VuZXJhdGUiLCJwcmVwYXJlZERhdGEiLCJhY3RpdmUiLCJwbGFjZV9hdF90aGVfdG9wIiwiRXZlbnRDbGllbnQiLCJJcFBvb2xzQ2xpZW50IiwicGFyc2VJcFBvb2xzUmVzcG9uc2UiLCJwYXRjaFdpdGhGRCIsIklwc0NsaWVudCIsInBhcnNlSXBzUmVzcG9uc2UiLCJJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50IiwicGF0aCIsImF0dHJpYnV0ZU5hbWUiLCJJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50Iiwic3VwcG9ydGVkX2ZpbHRlcnMiLCJJbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50IiwiYXR0cmlidXRlcyIsImZpbHRlcnMiLCJzaGFyaW5nIiwiY29udmVydERhdGVUb1VUQyIsImlucHV0RGF0ZSIsInRvSVNPU3RyaW5nIiwicHJlcGFyZVF1ZXJ5RGF0YSIsInF1ZXJ5RGF0YSIsInByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHQiLCJib3giLCJoYW5kbGVkU2VlZExpc3REYXRlcyIsInVwZGF0ZWRfYXQiLCJzaGFyaW5nX2V4cGlyZXNfYXQiLCJCb3giLCJsYXN0X3Jlc3VsdF9hdCIsIklEIiwiaW5ib3hQbGFjZW1lbnRzUmVzdWx0IiwiSWQiLCJpbmJveFBsYWNlbWVudFJlc3VsdCIsImdldFJlc3VsdEJ5U2hhcmVJZCIsInNoYXJlSWQiLCJJUFJTaGFyaW5nQ2xpZW50IiwicHJlcGFyZUluYm94UGxhY2VtZW50c1Jlc3VsdFNoYXJpbmciLCJleHBpcmVzX2F0IiwiZW5hYmxlZCIsIlNlZWRzTGlzdHNDbGllbnQiLCJwcmVwYXJlUmVzdWx0Iiwic2VlZExpc3QiLCJwcmVwYXJlU2VlZExpc3QiLCJzZWVkcyIsIlNlZWRzIiwic2VlZEl0ZW0iLCJoYW5kbGVkU2VlZERhdGVzIiwibWF4X2VtYWlsX2NvdW50X2hpdF9hdCIsImxhc3Rfc2VudF90b19hdCIsImxhc3RfZGVsaXZlcmVkX2F0IiwidXBkYXRlZFNlZWRzTGlzdCIsInNlZWRsaXN0IiwiSW5ib3hQbGFjZW1lbnRzQ2xpZW50Iiwic2VlZHNMaXN0c0NsaWVudCIsInJlc3VsdHMiLCJzZWVkc0xpc3RzIiwicnVuVGVzdCIsIkluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudCIsImhhbmRsZWRQcm92aWRlckRhdGVzIiwiUmVxdWVzdF8xIiwiZG9tYWluc0NsaWVudF8xIiwiRXZlbnRzXzEiLCJTdGF0c0NsaWVudF8xIiwiU3VwcHJlc3Npb25zQ2xpZW50XzEiLCJXZWJob29rc18xIiwiTWVzc2FnZXNfMSIsIlJvdXRlc18xIiwidmFsaWRhdGVfMSIsIklQc18xIiwiSVBQb29sc18xIiwibWFpbGluZ0xpc3RzXzEiLCJtYWlsTGlzdE1lbWJlcnNfMSIsImRvbWFpbnNDcmVkZW50aWFsc18xIiwibXVsdGlwbGVWYWxpZGF0aW9uXzEiLCJkb21haW5zVGVtcGxhdGVzXzEiLCJkb21haW5zVGFnc18xIiwiU3ViYWNjb3VudHNfMSIsIlNlZWRzTGlzdHNDbGllbnRfMSIsImluYm94UGxhY2VtZW50c18xIiwiSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudF8xIiwiQXR0cmlidXRlc0NsaWVudF8xIiwiRmlsdGVyc0NsaWVudF8xIiwiSW5ib3hQbGFjZW1lbnRzUmVzdWx0c1NoYXJpbmdDbGllbnRfMSIsIkluYm94UGxhY2VtZW50c1Byb3ZpZGVyc18xIiwiTWV0cmljc0NsaWVudF8xIiwiZG9tYWluc1RyYWNraW5nXzEiLCJNYWlsZ3VuQ2xpZW50Iiwib3B0aW9ucyIsImZvcm1EYXRhIiwiY29uZmlnIiwidXJsIiwidXNlcm5hbWUiLCJFcnJvciIsIm1haWxMaXN0c01lbWJlcnMiLCJkb21haW5UcmFja2luZ0NsaWVudCIsIm11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCIsIkluYm94UGxhY2VtZW50c1Jlc3VsdHNTaGFyaW5nQ2xpZW50Iiwic2VlZHNMaXN0c0F0dHJpYnV0ZXMiLCJyZXN1bHRzQXR0cmlidXRlc0NsaWVudCIsInNlZWRzTGlzdHNGaWx0ZXJzQ2xpZW50IiwicmVzdWx0c0ZpbHRlcnNDbGllbnQiLCJpbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50IiwiaW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50IiwiZG9tYWlucyIsIndlYmhvb2tzIiwiZXZlbnRzIiwibWV0cmljcyIsInN1cHByZXNzaW9ucyIsIm1lc3NhZ2VzIiwicm91dGVzIiwiaXBzIiwiaXBfcG9vbHMiLCJsaXN0cyIsInZhbGlkYXRlIiwic3ViYWNjb3VudHMiLCJpbmJveFBsYWNlbWVudHMiLCJzZXRTdWJhY2NvdW50Iiwic3ViYWNjb3VudElkIiwic2V0U3ViYWNjb3VudEhlYWRlciIsInJlc2V0U3ViYWNjb3VudCIsInJlc2V0U3ViYWNjb3VudEhlYWRlciIsIk1haWxMaXN0c01lbWJlcnMiLCJjaGVja0FuZFVwZGF0ZURhdGEiLCJuZXdEYXRhIiwidmFycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdWJzY3JpYmVkIiwibGlzdE1lbWJlcnMiLCJtYWlsTGlzdEFkZHJlc3MiLCJnZXRNZW1iZXIiLCJtYWlsTGlzdE1lbWJlckFkZHJlc3MiLCJtZW1iZXIiLCJjcmVhdGVNZW1iZXIiLCJyZXFEYXRhIiwiY3JlYXRlTWVtYmVycyIsIm1lbWJlcnMiLCJBcnJheSIsImlzQXJyYXkiLCJ1cHNlcnQiLCJ1cGRhdGVNZW1iZXIiLCJkZXN0cm95TWVtYmVyIiwiTWFpbGluZ0xpc3RzQ2xpZW50IiwicGFyc2VWYWxpZGF0aW9uUmVzdWx0IiwidmFsaWRhdGlvblJlc3VsdCIsImNhbmNlbFZhbGlkYXRpb24iLCJNZXNzYWdlc0NsaWVudCIsInByZXBhcmVCb29sZWFuVmFsdWVzIiwieWVzTm9Qcm9wZXJ0aWVzIiwiU2V0IiwiaGFzIiwiX3BhcnNlUmVzcG9uc2UiLCJtb2RpZmllZERhdGEiLCJNZXRyaWNzQ2xpZW50IiwidG9VVENTdHJpbmciLCJwcmVwYXJlUXVlcnkiLCJzdGFydERhdGUiLCJlbmREYXRlIiwicVN0YXJ0IiwicUVuZCIsImhhbmRsZVJlc3BvbnNlIiwicmVzQm9keSIsInBhcnNlIiwiZ2V0QWNjb3VudCIsImdldEFjY291bnRVc2FnZSIsIlJvdXRlc0NsaWVudCIsInJvdXRlIiwiU3RhdHNDb250YWluZXJfMSIsIlN0YXRzQ2xpZW50IiwicHJlcGFyZVNlYXJjaFBhcmFtcyIsImVudHJpZXMiLCJhcnJheVdpdGhQYWlycyIsImN1cnJlbnRQYWlyIiwicmVwZWF0ZWRQcm9wZXJ0eSIsIl9fc3ByZWFkQXJyYXkiLCJwdXNoIiwicGFyc2VTdGF0cyIsImdldERvbWFpbiIsIlN0YXRzQ29udGFpbmVyIiwiU3ViYWNjb3VudHNDbGllbnQiLCJlbmFibGUiLCJkaXNhYmxlIiwiU1VCQUNDT1VOVF9IRUFERVIiLCJFbnVtc18xIiwiQm91bmNlIiwiU3VwcHJlc3Npb25Nb2RlbHMiLCJCT1VOQ0VTIiwiYWRkcmVzcyIsImNvZGUiLCJlcnJvciIsIkNvbXBsYWludCIsIkNPTVBMQUlOVFMiLCJTdXBwcmVzc2lvbiIsIkJvdW5jZV8xIiwiQ29tcGxhaW50XzEiLCJVbnN1YnNjcmliZV8xIiwiV2hpdGVMaXN0XzEiLCJjcmVhdGVPcHRpb25zIiwiaGVhZGVycyIsIlN1cHByZXNzaW9uQ2xpZW50IiwibW9kZWxzIiwiYm91bmNlcyIsImNvbXBsYWludHMiLCJ1bnN1YnNjcmliZXMiLCJ3aGl0ZWxpc3RzIiwiTW9kZWwiLCJfcGFyc2VJdGVtIiwiY3JlYXRlV2hpdGVMaXN0IiwiaXNEYXRhQXJyYXkiLCJwcmVwYXJlUmVzcG9uc2UiLCJjcmVhdGVVbnN1YnNjcmliZSIsInNvbWUiLCJ1bnN1YnNjcmliZSIsInRhZ3MiLCJnZXRNb2RlbCIsIm1vZGVsIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicG9zdERhdGEiLCJtb2R1bGUiLCJVbnN1YnNjcmliZSIsIlVOU1VCU0NSSUJFUyIsIldoaXRlTGlzdCIsIldISVRFTElTVFMiLCJyZWFzb24iLCJBdHRhY2htZW50c0hhbmRsZXJfMSIsIk11bHRpcGxlVmFsaWRhdGlvbkpvYiIsInF1YW50aXR5IiwicmVjb3Jkc1Byb2Nlc3NlZCIsInJlY29yZHNfcHJvY2Vzc2VkIiwiZG93bmxvYWRfdXJsIiwiZG93bmxvYWRVcmwiLCJjc3YiLCJqc29uIiwic3VtbWFyeSIsImNhdGNoQWxsIiwiY2F0Y2hfYWxsIiwiZGVsaXZlcmFibGUiLCJkb05vdFNlbmQiLCJkb19ub3Rfc2VuZCIsInVuZGVsaXZlcmFibGUiLCJ1bmtub3duIiwicmlzayIsImhpZ2giLCJsb3ciLCJtZWRpdW0iLCJNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQiLCJhdHRhY2htZW50c0hhbmRsZXIiLCJqb2JzIiwiam9iIiwidG90YWwiLCJsaXN0SWQiLCJjb252ZXJ0VG9FeHBlY3RlZFNoYXBlIiwiaXNCdWZmZXIiLCJmaWxlIiwibXVsdGlwbGVWYWxpZGF0aW9uRmlsZSIsImlzU3RyZWFtIiwibXVsdGlwbGVWYWxpZGF0aW9uRGF0YSIsIlZhbGlkYXRlQ2xpZW50IiwibXVsdGlwbGVWYWxpZGF0aW9uIiwiV2ViaG9vayIsInVybHMiLCJXZWJob29rc0NsaWVudCIsIl9wYXJzZVdlYmhvb2tMaXN0IiwiX3BhcnNlV2ViaG9va1dpdGhJRCIsIndlYmhvb2tSZXNwb25zZSIsIndlYmhvb2siLCJ1bmRlZmluZWQiLCJfcGFyc2VXZWJob29rVGVzdCIsInRlc3QiLCJ1cmxWYWx1ZXMiLCJCbG9iRnJvbVN0cmVhbSIsInN0cmVhbSIsInNpemUiLCJfc3RyZWFtIiwiZGVmaW5lUHJvcGVydHkiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsIkF0dGFjaG1lbnRzSGFuZGxlciIsImdldEF0dGFjaG1lbnRPcHRpb25zIiwiZmlsZW5hbWUiLCJjb250ZW50VHlwZSIsImtub3duTGVuZ3RoIiwiZ2V0RmlsZUluZm8iLCJnZXRDdXN0b21GaWxlSW5mbyIsImdldEJ1ZmZlckluZm8iLCJidWZmZXIiLCJieXRlTGVuZ3RoIiwicGlwZSIsImlzQ3VzdG9tRmlsZSIsImlzQnJvd3NlckZpbGUiLCJCbG9iIiwiQnVmZmVyIiwiZ2V0QXR0YWNobWVudEluZm8iLCJhdHRhY2htZW50IiwiY29udmVydFRvRkRleHBlY3RlZFNoYXBlIiwidXNlclByb3ZpZGVkVmFsdWUiLCJnZXRCbG9iRnJvbVN0cmVhbSIsIkFQSUVycm9yIiwic3RhdHVzVGV4dCIsImJvZHlNZXNzYWdlIiwic3RhY2siLCJkZXRhaWxzIiwiRm9ybURhdGFCdWlsZGVyIiwiRm9ybURhdGFDb25zdHJ1Y3RvciIsImZpbGVLZXlzIiwiY3JlYXRlRm9ybURhdGEiLCJmaWx0ZXIiLCJmb3JtRGF0YUFjYyIsImluY2x1ZGVzIiwiYXR0YWNobWVudFZhbHVlIiwiaXNNZXNzYWdlQXR0YWNobWVudCIsImFkZEZpbGVzVG9GRCIsIm1lc3NhZ2VWYWx1ZSIsImlzTUlNRSIsImFkZE1pbWVEYXRhVG9GRCIsImFkZENvbW1vblByb3BlcnR5VG9GRCIsImZvcm1EYXRhSW5zdGFuY2UiLCJpc0Zvcm1EYXRhUGFja2FnZSIsImFwcGVuZCIsImJyb3dzZXJGb3JtRGF0YSIsImJsb2JJbnN0YW5jZSIsIlJlYWRhYmxlU3RyZWFtIiwiZ2V0SGVhZGVycyIsIkZpbGUiLCJldmVyeSIsImFwcGVuZEZpbGVUb0ZEIiwib3JpZ2luYWxLZXkiLCJvYmpEYXRhIiwiZmQiLCJmcm9tIiwiYmxvYiIsInNldCIsImZvckVhY2giLCJhZGRWYWx1ZUJhc2VkT25GRCIsImZkS2V5IiwiZmRWYWx1ZSIsIk5hdmlnYXRpb25UaHJ1UGFnZXMiLCJwYXJzZVBhZ2UiLCJwYWdlVXJsIiwidXJsU2VwYXJhdG9yIiwiaXRlcmF0b3JOYW1lIiwiVVJMIiwicGFnZVZhbHVlIiwic3BsaXQiLCJwb3AiLCJpdGVyYXRvclBvc2l0aW9uIiwicGFnZSIsInBhZ2luZyIsInVwZGF0ZVVybEFuZFF1ZXJ5IiwiY2xpZW50VXJsIiwicXVlcnlDb3B5IiwidXBkYXRlZFF1ZXJ5IiwiYmFzZTY0IiwiX19pbXBvcnRTdGFyIiwiYXhpb3NfMSIsIkZvcm1EYXRhQnVpbGRlcl8xIiwiUmVxdWVzdCIsInRpbWVvdXQiLCJtYWtlSGVhZGVyc0Zyb21PYmplY3QiLCJmb3JtRGF0YUJ1aWxkZXIiLCJtYXhCb2R5TGVuZ3RoIiwicHJveHkiLCJtZXRob2QiLCJvbkNhbGxPcHRpb25zIiwicmVxdWVzdEhlYWRlcnMiLCJqb2luQW5kVHJhbnNmb3JtSGVhZGVycyIsInBhcmFtcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJ1cmxWYWx1ZSIsInRvTG9jYWxlVXBwZXJDYXNlIiwiX2QiLCJlcnJvclJlc3BvbnNlIiwiZXJyXzEiLCJfYyIsImdldFJlc3BvbnNlQm9keSIsIkF4aW9zSGVhZGVycyIsImJhc2ljIiwiZW5jb2RlIiwic2V0QXV0aG9yaXphdGlvbiIsInJlY2VpdmVkT25DYWxsSGVhZGVycyIsIm9uQ2FsbEhlYWRlcnMiLCJoZWFkZXJzT2JqZWN0IiwiaGVhZGVyc0FjY3VtdWxhdG9yIiwiY29tbWFuZCIsImFkZERlZmF1bHRIZWFkZXJzIiwicmVxdWVzdE9wdGlvbnMiLCJSZXNvbHV0aW9uIiwiV2ViaG9va3NJZHMiLCJZZXNObyIsIl9fZXhwb3J0U3RhciIsIk1haWxndW5DbGllbnRfMSIsIk1haWxndW4iLCJGb3JtRGF0YSIsImNsaWVudCIsImZyZWVFeHBvcnRzIiwiZnJlZUdsb2JhbCIsImciLCJnbG9iYWwiLCJ3aW5kb3ciLCJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiLCJUQUJMRSIsIlJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMiLCJpbnB1dCIsIlN0cmluZyIsImEiLCJiIiwiYyIsInBhZGRpbmciLCJvdXRwdXQiLCJwb3NpdGlvbiIsImNoYXJDb2RlQXQiLCJjaGFyQXQiLCJyZXBsYWNlIiwiYml0U3RvcmFnZSIsImJpdENvdW50ZXIiLCJpbmRleE9mIiwiZnJvbUNoYXJDb2RlIiwic3RyQXJyYXkiLCJyZXN1bHRBcnJheSIsIlR5cGVFcnJvciIsIm1hdGNoIiwiZmlyc3QiLCJzaGlmdCIsImkiLCJjb21wb25lbnQiLCJzdHIiLCJqb2luIiwicGFydHMiLCJub3JtYWxpemUiLCJhcmd1bWVudHMiLCJzbGljZSIsImRlZmluaXRpb24iLCJiaW5kIiwiZm4iLCJ0aGlzQXJnIiwiYXBwbHkiLCJnZXRQcm90b3R5cGVPZiIsImtpbmRPZiIsImNhY2hlIiwidGhpbmciLCJ0b0xvd2VyQ2FzZSIsImtpbmRPZlRlc3QiLCJ0eXBlT2ZUZXN0IiwiaXNVbmRlZmluZWQiLCJpc0FycmF5QnVmZmVyIiwiaXNTdHJpbmciLCJpc0Z1bmN0aW9uIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzUGxhaW5PYmplY3QiLCJ2YWwiLCJpdGVyYXRvciIsImlzRGF0ZSIsImlzRmlsZSIsImlzQmxvYiIsImlzRmlsZUxpc3QiLCJpc1VSTFNlYXJjaFBhcmFtcyIsImlzUmVhZGFibGVTdHJlYW0iLCJpc1JlcXVlc3QiLCJpc1Jlc3BvbnNlIiwiaXNIZWFkZXJzIiwiYWxsT3duS2V5cyIsImwiLCJsZW4iLCJmaW5kS2V5IiwiX2tleSIsIl9nbG9iYWwiLCJnbG9iYWxUaGlzIiwiaXNDb250ZXh0RGVmaW5lZCIsImNvbnRleHQiLCJpc1R5cGVkQXJyYXkiLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImlzSFRNTEZvcm0iLCJoYXNPd25Qcm9wZXJ0eSIsImlzUmVnRXhwIiwicmVkdWNlRGVzY3JpcHRvcnMiLCJyZWR1Y2VyIiwiZGVzY3JpcHRvcnMiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwicmVkdWNlZERlc2NyaXB0b3JzIiwiZGVzY3JpcHRvciIsInJldCIsImRlZmluZVByb3BlcnRpZXMiLCJBTFBIQSIsIkRJR0lUIiwiQUxQSEFCRVQiLCJBTFBIQV9ESUdJVCIsInRvVXBwZXJDYXNlIiwiaXNBc3luY0ZuIiwiX3NldEltbWVkaWF0ZSIsInNldEltbWVkaWF0ZVN1cHBvcnRlZCIsInNldEltbWVkaWF0ZSIsInBvc3RNZXNzYWdlU3VwcG9ydGVkIiwicG9zdE1lc3NhZ2UiLCJ0b2tlbiIsIk1hdGgiLCJyYW5kb20iLCJjYWxsYmFja3MiLCJhZGRFdmVudExpc3RlbmVyIiwic291cmNlIiwiY2IiLCJzZXRUaW1lb3V0IiwiYXNhcCIsInF1ZXVlTWljcm90YXNrIiwicHJvY2VzcyIsIm5leHRUaWNrIiwidXRpbHMkMSIsImNvbnN0cnVjdG9yIiwiaXNGb3JtRGF0YSIsImtpbmQiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaXNCb29sZWFuIiwibWVyZ2UiLCJjYXNlbGVzcyIsImFzc2lnblZhbHVlIiwidGFyZ2V0S2V5IiwiZXh0ZW5kIiwidHJpbSIsInN0cmlwQk9NIiwiY29udGVudCIsImluaGVyaXRzIiwic3VwZXJDb25zdHJ1Y3RvciIsInByb3BzIiwidG9GbGF0T2JqZWN0Iiwic291cmNlT2JqIiwiZGVzdE9iaiIsInByb3BGaWx0ZXIiLCJtZXJnZWQiLCJlbmRzV2l0aCIsInNlYXJjaFN0cmluZyIsImxhc3RJbmRleCIsInRvQXJyYXkiLCJhcnIiLCJmb3JFYWNoRW50cnkiLCJuZXh0IiwiZG9uZSIsInBhaXIiLCJtYXRjaEFsbCIsInJlZ0V4cCIsIm1hdGNoZXMiLCJleGVjIiwiaGFzT3duUHJvcCIsImZyZWV6ZU1ldGhvZHMiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJ0b09iamVjdFNldCIsImFycmF5T3JTdHJpbmciLCJkZWxpbWl0ZXIiLCJkZWZpbmUiLCJ0b0NhbWVsQ2FzZSIsIm0iLCJwMSIsInAyIiwibm9vcCIsInRvRmluaXRlTnVtYmVyIiwiZGVmYXVsdFZhbHVlIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJnZW5lcmF0ZVN0cmluZyIsImFscGhhYmV0IiwiaXNTcGVjQ29tcGxpYW50Rm9ybSIsInRvSlNPTk9iamVjdCIsInZpc2l0IiwidGFyZ2V0IiwicmVkdWNlZFZhbHVlIiwiaXNUaGVuYWJsZSIsImNhdGNoIiwiQXhpb3NFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwidG9KU09OIiwibnVtYmVyIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwicHJvdG90eXBlJDEiLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJjYXVzZSIsImlzVmlzaXRhYmxlIiwicmVtb3ZlQnJhY2tldHMiLCJyZW5kZXJLZXkiLCJkb3RzIiwicHJlZGljYXRlcyIsInRvRm9ybURhdGEiLCJtZXRhVG9rZW5zIiwiaW5kZXhlcyIsIm9wdGlvbiIsInZpc2l0b3IiLCJkZWZhdWx0VmlzaXRvciIsInVzZUJsb2IiLCJjb252ZXJ0VmFsdWUiLCJpc0ZsYXRBcnJheSIsImVsIiwiaW5kZXgiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwiZW5jb2RlJDEiLCJjaGFyTWFwIiwiQXhpb3NVUkxTZWFyY2hQYXJhbXMiLCJfcGFpcnMiLCJidWlsZFVSTCIsIl9lbmNvZGUiLCJzZXJpYWxpemVGbiIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZWRQYXJhbXMiLCJoYXNobWFya0luZGV4IiwiZW5jb2RlciIsIkludGVyY2VwdG9yTWFuYWdlciQxIiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiaGFuZGxlcnMiLCJ1c2UiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInN5bmNocm9ub3VzIiwicnVuV2hlbiIsImVqZWN0IiwiY2xlYXIiLCJoIiwidHJhbnNpdGlvbmFsRGVmYXVsdHMiLCJzaWxlbnRKU09OUGFyc2luZyIsImZvcmNlZEpTT05QYXJzaW5nIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsInBsYXRmb3JtJDEiLCJpc0Jyb3dzZXIiLCJjbGFzc2VzIiwicHJvdG9jb2xzIiwiaGFzQnJvd3NlckVudiIsImRvY3VtZW50IiwiaGFzU3RhbmRhcmRCcm93c2VyRW52IiwicHJvZHVjdCIsIm5hdmlnYXRvciIsImhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiIsIldvcmtlckdsb2JhbFNjb3BlIiwiaW1wb3J0U2NyaXB0cyIsIm9yaWdpbiIsImxvY2F0aW9uIiwiaHJlZiIsInBsYXRmb3JtIiwiZnJlZXplIiwiX19wcm90b19fIiwiZm9ybURhdGFUb0pTT04iLCJidWlsZFBhdGgiLCJpc051bWVyaWNLZXkiLCJpc0xhc3QiLCJhcnJheVRvT2JqZWN0IiwicGFyc2VQcm9wUGF0aCIsImRlZmF1bHRzIiwidHJhbnNpdGlvbmFsIiwiYWRhcHRlciIsInRyYW5zZm9ybVJlcXVlc3QiLCJnZXRDb250ZW50VHlwZSIsImhhc0pTT05Db250ZW50VHlwZSIsImlzT2JqZWN0UGF5bG9hZCIsInNldENvbnRlbnRUeXBlIiwiaGVscGVycyIsImlzTm9kZSIsInRvVVJMRW5jb2RlZEZvcm0iLCJmb3JtU2VyaWFsaXplciIsIl9Gb3JtRGF0YSIsImVudiIsInJhd1ZhbHVlIiwicGFyc2VyIiwiZSIsInN0cmluZ2lmeVNhZmVseSIsInRyYW5zZm9ybVJlc3BvbnNlIiwiSlNPTlJlcXVlc3RlZCIsInJlc3BvbnNlVHlwZSIsInN0cmljdEpTT05QYXJzaW5nIiwiRVJSX0JBRF9SRVNQT05TRSIsInhzcmZDb29raWVOYW1lIiwieHNyZkhlYWRlck5hbWUiLCJtYXhDb250ZW50TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJjb21tb24iLCJkZWZhdWx0cyQxIiwiaWdub3JlRHVwbGljYXRlT2YiLCIkaW50ZXJuYWxzIiwibm9ybWFsaXplSGVhZGVyIiwiaGVhZGVyIiwibm9ybWFsaXplVmFsdWUiLCJtYXRjaEhlYWRlclZhbHVlIiwiaXNIZWFkZXJOYW1lRmlsdGVyIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwic2V0SGVhZGVyIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJyYXdIZWFkZXJzIiwicGFyc2VkIiwibGluZSIsInN1YnN0cmluZyIsInBhcnNlSGVhZGVycyIsInRva2VucyIsInRva2Vuc1JFIiwicGFyc2VUb2tlbnMiLCJtYXRjaGVyIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsImZvcm1hdCIsIm5vcm1hbGl6ZWQiLCJ3IiwiY2hhciIsImZvcm1hdEhlYWRlciIsInRhcmdldHMiLCJhc1N0cmluZ3MiLCJjb21wdXRlZCIsImFjY2Vzc29yIiwiYWNjZXNzb3JzIiwiZGVmaW5lQWNjZXNzb3IiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiY29uZmlndXJhYmxlIiwiYnVpbGRBY2Nlc3NvcnMiLCJtYXBwZWQiLCJoZWFkZXJWYWx1ZSIsIkF4aW9zSGVhZGVycyQxIiwidHJhbnNmb3JtRGF0YSIsImZucyIsImlzQ2FuY2VsIiwiX19DQU5DRUxfXyIsIkNhbmNlbGVkRXJyb3IiLCJFUlJfQ0FOQ0VMRUQiLCJzZXR0bGUiLCJyZXNvbHZlIiwicmVqZWN0IiwiRVJSX0JBRF9SRVFVRVNUIiwiZmxvb3IiLCJwcm9ncmVzc0V2ZW50UmVkdWNlciIsImxpc3RlbmVyIiwiaXNEb3dubG9hZFN0cmVhbSIsImZyZXEiLCJieXRlc05vdGlmaWVkIiwiX3NwZWVkb21ldGVyIiwic2FtcGxlc0NvdW50IiwibWluIiwiYnl0ZXMiLCJ0aW1lc3RhbXBzIiwiZmlyc3RTYW1wbGVUUyIsImhlYWQiLCJ0YWlsIiwiY2h1bmtMZW5ndGgiLCJub3ciLCJzdGFydGVkQXQiLCJieXRlc0NvdW50IiwicGFzc2VkIiwicm91bmQiLCJzcGVlZG9tZXRlciIsImxhc3RBcmdzIiwidGltZXIiLCJ0aW1lc3RhbXAiLCJ0aHJlc2hvbGQiLCJpbnZva2UiLCJhcmdzIiwiY2xlYXJUaW1lb3V0IiwidGhyb3R0bGUiLCJsb2FkZWQiLCJsZW5ndGhDb21wdXRhYmxlIiwicHJvZ3Jlc3NCeXRlcyIsInJhdGUiLCJwcm9ncmVzcyIsImVzdGltYXRlZCIsImV2ZW50IiwicHJvZ3Jlc3NFdmVudERlY29yYXRvciIsInRocm90dGxlZCIsImFzeW5jRGVjb3JhdG9yIiwiaXNVUkxTYW1lT3JpZ2luIiwibXNpZSIsInVzZXJBZ2VudCIsInVybFBhcnNpbmdOb2RlIiwiY3JlYXRlRWxlbWVudCIsIm9yaWdpblVSTCIsInJlc29sdmVVUkwiLCJzZXRBdHRyaWJ1dGUiLCJwcm90b2NvbCIsImhvc3QiLCJzZWFyY2giLCJoYXNoIiwiaG9zdG5hbWUiLCJwb3J0IiwicGF0aG5hbWUiLCJyZXF1ZXN0VVJMIiwiY29va2llcyIsIndyaXRlIiwiZXhwaXJlcyIsInNlY3VyZSIsImNvb2tpZSIsInRvR01UU3RyaW5nIiwicmVhZCIsIlJlZ0V4cCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsImJ1aWxkRnVsbFBhdGgiLCJiYXNlVVJMIiwicmVxdWVzdGVkVVJMIiwicmVsYXRpdmVVUkwiLCJjb21iaW5lVVJMcyIsImhlYWRlcnNUb09iamVjdCIsIm1lcmdlQ29uZmlnIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXRNZXNzYWdlIiwid2l0aENyZWRlbnRpYWxzIiwid2l0aFhTUkZUb2tlbiIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJkZWNvbXByZXNzIiwiYmVmb3JlUmVkaXJlY3QiLCJ0cmFuc3BvcnQiLCJodHRwQWdlbnQiLCJodHRwc0FnZW50IiwiY2FuY2VsVG9rZW4iLCJzb2NrZXRQYXRoIiwicmVzcG9uc2VFbmNvZGluZyIsImNvbmZpZ1ZhbHVlIiwicmVzb2x2ZUNvbmZpZyIsIm5ld0NvbmZpZyIsImF1dGgiLCJidG9hIiwicGFzc3dvcmQiLCJ1bmVzY2FwZSIsIkJvb2xlYW4iLCJ4c3JmVmFsdWUiLCJ4aHJBZGFwdGVyIiwiWE1MSHR0cFJlcXVlc3QiLCJQcm9taXNlIiwiX2NvbmZpZyIsInJlcXVlc3REYXRhIiwib25DYW5jZWxlZCIsInVwbG9hZFRocm90dGxlZCIsImRvd25sb2FkVGhyb3R0bGVkIiwiZmx1c2hVcGxvYWQiLCJmbHVzaERvd25sb2FkIiwic2lnbmFsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9ubG9hZGVuZCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsImVyciIsInJlc3BvbnNlVGV4dCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVzcG9uc2VVUkwiLCJvbmFib3J0IiwiRUNPTk5BQk9SVEVEIiwib25lcnJvciIsIkVSUl9ORVRXT1JLIiwib250aW1lb3V0IiwidGltZW91dEVycm9yTWVzc2FnZSIsIkVUSU1FRE9VVCIsInNldFJlcXVlc3RIZWFkZXIiLCJ1cGxvYWQiLCJjYW5jZWwiLCJhYm9ydCIsInN1YnNjcmliZSIsImFib3J0ZWQiLCJwYXJzZVByb3RvY29sIiwic2VuZCIsImNvbXBvc2VTaWduYWxzJDEiLCJzaWduYWxzIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsInN0cmVhbUNodW5rIiwiY2h1bmsiLCJjaHVua1NpemUiLCJwb3MiLCJ0cmFja1N0cmVhbSIsIm9uUHJvZ3Jlc3MiLCJvbkZpbmlzaCIsImFzeW5jIiwiaXRlcmFibGUiLCJyZWFkQnl0ZXMiLCJfb25GaW5pc2giLCJwdWxsIiwiY2xvc2UiLCJsb2FkZWRCeXRlcyIsImVucXVldWUiLCJyZXR1cm4iLCJoaWdoV2F0ZXJNYXJrIiwiaXNGZXRjaFN1cHBvcnRlZCIsImZldGNoIiwiUmVzcG9uc2UiLCJpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkIiwiZW5jb2RlVGV4dCIsIlRleHRFbmNvZGVyIiwiYXJyYXlCdWZmZXIiLCJzdXBwb3J0c1JlcXVlc3RTdHJlYW0iLCJkdXBsZXhBY2Nlc3NlZCIsImhhc0NvbnRlbnRUeXBlIiwiZHVwbGV4Iiwic3VwcG9ydHNSZXNwb25zZVN0cmVhbSIsInJlc29sdmVycyIsIl8iLCJFUlJfTk9UX1NVUFBPUlQiLCJyZXNvbHZlQm9keUxlbmd0aCIsImdldENvbnRlbnRMZW5ndGgiLCJnZXRCb2R5TGVuZ3RoIiwia25vd25BZGFwdGVycyIsImh0dHAiLCJ4aHIiLCJmZXRjaE9wdGlvbnMiLCJmaW5pc2hlZCIsImNvbXBvc2VkU2lnbmFsIiwic3RvcFRpbWVvdXQiLCJyZXF1ZXN0Q29udGVudExlbmd0aCIsImNvbnRlbnRUeXBlSGVhZGVyIiwiX3JlcXVlc3QiLCJmbHVzaCIsImNyZWRlbnRpYWxzIiwiaXNTdHJlYW1SZXNwb25zZSIsInJlc3BvbnNlQ29udGVudExlbmd0aCIsInJlc3BvbnNlRGF0YSIsInJlbmRlclJlYXNvbiIsImlzUmVzb2x2ZWRIYW5kbGUiLCJhZGFwdGVycyIsIm5hbWVPckFkYXB0ZXIiLCJyZWplY3RlZFJlYXNvbnMiLCJyZWFzb25zIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRocm93SWZSZXF1ZXN0ZWQiLCJkaXNwYXRjaFJlcXVlc3QiLCJWRVJTSU9OIiwidmFsaWRhdG9ycyQxIiwiZGVwcmVjYXRlZFdhcm5pbmdzIiwidmFsaWRhdG9yIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiRVJSX0RFUFJFQ0FURUQiLCJhc3NlcnRPcHRpb25zIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsInZhbGlkYXRvcnMiLCJBeGlvcyIsImluc3RhbmNlQ29uZmlnIiwiaW50ZXJjZXB0b3JzIiwiY29uZmlnT3JVcmwiLCJkdW1teSIsImJvb2xlYW4iLCJmdW5jdGlvbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInVuc2hpZnQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJwcm9taXNlIiwiY2hhaW4iLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJBeGlvcyQxIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJzcGxpY2UiLCJDYW5jZWxUb2tlbiQxIiwiSHR0cFN0YXR1c0NvZGUiLCJDb250aW51ZSIsIlN3aXRjaGluZ1Byb3RvY29scyIsIlByb2Nlc3NpbmciLCJFYXJseUhpbnRzIiwiT2siLCJDcmVhdGVkIiwiQWNjZXB0ZWQiLCJOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24iLCJOb0NvbnRlbnQiLCJSZXNldENvbnRlbnQiLCJQYXJ0aWFsQ29udGVudCIsIk11bHRpU3RhdHVzIiwiQWxyZWFkeVJlcG9ydGVkIiwiSW1Vc2VkIiwiTXVsdGlwbGVDaG9pY2VzIiwiTW92ZWRQZXJtYW5lbnRseSIsIkZvdW5kIiwiU2VlT3RoZXIiLCJOb3RNb2RpZmllZCIsIlVzZVByb3h5IiwiVW51c2VkIiwiVGVtcG9yYXJ5UmVkaXJlY3QiLCJQZXJtYW5lbnRSZWRpcmVjdCIsIkJhZFJlcXVlc3QiLCJVbmF1dGhvcml6ZWQiLCJQYXltZW50UmVxdWlyZWQiLCJGb3JiaWRkZW4iLCJOb3RGb3VuZCIsIk1ldGhvZE5vdEFsbG93ZWQiLCJOb3RBY2NlcHRhYmxlIiwiUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiUmVxdWVzdFRpbWVvdXQiLCJDb25mbGljdCIsIkdvbmUiLCJMZW5ndGhSZXF1aXJlZCIsIlByZWNvbmRpdGlvbkZhaWxlZCIsIlBheWxvYWRUb29MYXJnZSIsIlVyaVRvb0xvbmciLCJVbnN1cHBvcnRlZE1lZGlhVHlwZSIsIlJhbmdlTm90U2F0aXNmaWFibGUiLCJFeHBlY3RhdGlvbkZhaWxlZCIsIkltQVRlYXBvdCIsIk1pc2RpcmVjdGVkUmVxdWVzdCIsIlVucHJvY2Vzc2FibGVFbnRpdHkiLCJMb2NrZWQiLCJGYWlsZWREZXBlbmRlbmN5IiwiVG9vRWFybHkiLCJVcGdyYWRlUmVxdWlyZWQiLCJQcmVjb25kaXRpb25SZXF1aXJlZCIsIlRvb01hbnlSZXF1ZXN0cyIsIlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSIsIlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zIiwiSW50ZXJuYWxTZXJ2ZXJFcnJvciIsIk5vdEltcGxlbWVudGVkIiwiQmFkR2F0ZXdheSIsIlNlcnZpY2VVbmF2YWlsYWJsZSIsIkdhdGV3YXlUaW1lb3V0IiwiSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQiLCJWYXJpYW50QWxzb05lZ290aWF0ZXMiLCJJbnN1ZmZpY2llbnRTdG9yYWdlIiwiTG9vcERldGVjdGVkIiwiTm90RXh0ZW5kZWQiLCJOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZCIsIkh0dHBTdGF0dXNDb2RlJDEiLCJheGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJjYWxsYmFjayIsImlzQXhpb3NFcnJvciIsInBheWxvYWQiLCJmb3JtVG9KU09OIiwiZ2V0QWRhcHRlciIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJGdW5jdGlvbiIsIm5tZCIsInBhdGhzIiwiY2hpbGRyZW4iXSwic291cmNlUm9vdCI6IiJ9
|